<?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>61183</bug_id>
          
          <creation_ts>2011-05-20 04:55:52 -0700</creation_ts>
          <short_desc>SVG svgAttributeChanged/synchronizeProperty/parseMappedAttribute should be optimized</short_desc>
          <delta_ts>2014-05-14 23:13:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>krit</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>407001</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 04:55:52 -0700</bug_when>
    <thetext>SVG svgAttributeChanged/synchronizeProperty/parseMappedAttribute should be optimized.

Example: rect.x.baseVal.value = 100;
What happens: SVGRectElement::svgAttributeChanged(const QualifiedName&amp; attrName) is invoked with &quot;SVGNames::rectAttr&quot; as parameter.

void SVGRectElement::svgAttributeChanged(const QualifiedName&amp; attrName)
{
    SVGStyledTransformableElement::svgAttributeChanged(attrName);

    // Handle my own attribute changes...
}

We always traverse the base class hiearchy, when invoking svgAttributeChanged (this has a reason, explained below (*) ).
An efficient pattern would look like:

HashSet&lt;QualifiedName&gt; attributesSupportedByRect; (eg, containing SVGNames::xAttr/yAttr/widthAttr/.. and the SVGTests/SVGLangSpace/... properties)
void SVGRectElement::svgAttributeChanged(const QualifiedName&amp; attrName)
{
    if (!attributesSupportedByRect.contains(attrName)) {
        SVGStyledTransformableElement::svgAttributeChanged(attrName);
        return;
    }

    // When we get here, we know for sure it&apos;s one of our attributes that has changed.
    // Note for eg. SVGNames::transformAttr, the call from SVGRectElement::svgAttributeChanged, would be immediately forwarded to sVGStyledTransformableElement which handles transformAttr changes)

    if (attrName == SVGNames::xAttr) { do_work(); return; }
    if (attrName == SVGNames::yAttr) { do_work(); return; }
...
    ASSERT_NOT_REACHED();
}

Exactly the same pattern can be applied to synchronizeProperty and parseMappedAttribute. I have not yet measured the performance benefits, but just imagine, how much fewer string comparisions are now done when parsing attributes / synchronizing svg&lt;-&gt;xml dom and when changing attributes via scripts either through DOM or SVG DOM.

Note (*):
Every svgAttributeChanged call from a class like SVGRectElement has to reach the base class SVGStyledElement::svgAttributeChanged, as it handles invalidation of the instances of an element.
Say that a &lt;rect&gt; is referenced by a &lt;use&gt; and we change the &apos;x&apos; attribute of the &lt;rect&gt;, then SVGStyledElement::svgAttributeChanged, calls SVGElementInstance::invalidateAllInstancesOfElement(this), so that the &lt;use&gt; can rebuild its shadow tree... That&apos;s the only reason we do the base-class dance, and can easily be avoided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407019</commentid>
    <comment_count>1</comment_count>
      <attachid>94203</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 06:00:53 -0700</bug_when>
    <thetext>Created attachment 94203
Patch 

A first EWS run, still have to measure PLT perf diffs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407024</commentid>
    <comment_count>2</comment_count>
      <attachid>94203</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-20 06:12:19 -0700</bug_when>
    <thetext>Comment on attachment 94203
Patch 

Attachment 94203 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8722149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407055</commentid>
    <comment_count>3</comment_count>
      <attachid>94203</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 06:48:45 -0700</bug_when>
    <thetext>Comment on attachment 94203
Patch 

Attachment 94203 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8722151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407069</commentid>
    <comment_count>4</comment_count>
      <attachid>94203</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-05-20 07:03:15 -0700</bug_when>
    <thetext>Comment on attachment 94203
Patch 

Attachment 94203 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/8719364</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407077</commentid>
    <comment_count>5</comment_count>
      <attachid>94203</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 07:22:26 -0700</bug_when>
    <thetext>Comment on attachment 94203
Patch 

Attachment 94203 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8719371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407079</commentid>
    <comment_count>6</comment_count>
      <attachid>94217</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 07:24:59 -0700</bug_when>
    <thetext>Created attachment 94217
Patch v2

Fix non-allinone-builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407090</commentid>
    <comment_count>7</comment_count>
      <attachid>94217</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 07:36:26 -0700</bug_when>
    <thetext>Comment on attachment 94217
Patch v2

Attachment 94217 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8716621</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407091</commentid>
    <comment_count>8</comment_count>
      <attachid>94217</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-20 07:39:59 -0700</bug_when>
    <thetext>Comment on attachment 94217
Patch v2

Attachment 94217 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8716627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407095</commentid>
    <comment_count>9</comment_count>
      <attachid>94203</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 07:54:01 -0700</bug_when>
    <thetext>Comment on attachment 94203
Patch 

Attachment 94203 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8721318</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407101</commentid>
    <comment_count>10</comment_count>
      <attachid>94220</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 08:11:37 -0700</bug_when>
    <thetext>Created attachment 94220
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407107</commentid>
    <comment_count>11</comment_count>
      <attachid>94220</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-20 08:22:01 -0700</bug_when>
    <thetext>Comment on attachment 94220
Patch v3

Attachment 94220 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8723168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407109</commentid>
    <comment_count>12</comment_count>
      <attachid>94217</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 08:31:37 -0700</bug_when>
    <thetext>Comment on attachment 94217
Patch v2

Attachment 94217 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8718487</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407112</commentid>
    <comment_count>13</comment_count>
      <attachid>94225</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 08:35:17 -0700</bug_when>
    <thetext>Created attachment 94225
Patch v4

More build fixes..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407116</commentid>
    <comment_count>14</comment_count>
      <attachid>94217</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 08:39:20 -0700</bug_when>
    <thetext>Comment on attachment 94217
Patch v2

Attachment 94217 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8721334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407120</commentid>
    <comment_count>15</comment_count>
      <attachid>94227</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 08:46:15 -0700</bug_when>
    <thetext>Created attachment 94227
Patch v5

Fix merge problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407128</commentid>
    <comment_count>16</comment_count>
      <attachid>94225</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-20 08:53:59 -0700</bug_when>
    <thetext>Comment on attachment 94225
Patch v4

Attachment 94225 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8722192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407143</commentid>
    <comment_count>17</comment_count>
      <attachid>94220</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 09:09:18 -0700</bug_when>
    <thetext>Comment on attachment 94220
Patch v3

Attachment 94220 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8719398</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407169</commentid>
    <comment_count>18</comment_count>
      <attachid>94227</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-05-20 10:09:28 -0700</bug_when>
    <thetext>Comment on attachment 94227
Patch v5

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

I like the code changes. Once some of my questions and ChangeLog suggestions are cleared up this can be r+ed quickly I think, until then r-.

&gt; Source/WebCore/ChangeLog:18
&gt; +        Switch to a more efficient pattern, by providing a &quot;bool isSupportedAttribute(const QualifiedName&amp;);&quot; function for all SVG*Elements.

Typo: hierarchy

&gt; Source/WebCore/ChangeLog:31
&gt; +            // Note for eg. SVGNames::transformAttr, the call from SVGRectElement::svgAttributeChanged, would be immediately forwarded to the base class, which handles transformAttr changes)

You mean by the if section above? If so the Note can be moved above it to indicate what the if section does.

&gt; Source/WebCore/ChangeLog:47
&gt; +

dance sounds a bit frivolous :) Better reword

&gt; Source/WebCore/ChangeLog:48
&gt; +        Add &quot;SVGElementInstance::InvalidationGuard guard(this)&quot; statments in all svgAttributeChanged implementations, that calls invalidateAllInstancesOfElement(this)

Typo: statements

&gt; Source/WebCore/ChangeLog:53
&gt; +

how? Better, worse, the same?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407203</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 11:14:24 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 94227 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94227&amp;action=review
&gt; 
&gt; I like the code changes. Once some of my questions and ChangeLog suggestions are cleared up this can be r+ed quickly I think, until then r-.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        Switch to a more efficient pattern, by providing a &quot;bool isSupportedAttribute(const QualifiedName&amp;);&quot; function for all SVG*Elements.
&gt; 
&gt; Typo: hierarchy
Fixed.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:31
&gt; &gt; +            // Note for eg. SVGNames::transformAttr, the call from SVGRectElement::svgAttributeChanged, would be immediately forwarded to the base class, which handles transformAttr changes)
&gt; 
&gt; You mean by the if section above? If so the Note can be moved above it to indicate what the if section does.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:47
&gt; &gt; +
&gt; 
&gt; dance sounds a bit frivolous :) Better reword
Fixed.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:48
&gt; &gt; +        Add &quot;SVGElementInstance::InvalidationGuard guard(this)&quot; statments in all svgAttributeChanged implementations, that calls invalidateAllInstancesOfElement(this)
&gt; 
&gt; Typo: statements
Fixed.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:53
&gt; &gt; +
&gt; 
&gt; how? Better, worse, the same?
Reworded: it&apos;s a slight overall performance progression (around 2-3% in DRT runs), hard to observe, other than using micro benchmarks  (eg. setting transformAttr ten thousand times, etc.).

Do you want me to upload a new version? We usually give r+, if only comments have to change, and ask the patch creator to fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407263</commentid>
    <comment_count>20</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-05-20 12:10:16 -0700</bug_when>
    <thetext>Hi Niko,

(In reply to comment #19)

[...]

&gt; Do you want me to upload a new version? We usually give r+, if only comments have to change, and ask the patch creator to fix before landing.

No, that is fine, I&apos;ll change the state, so r=me.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407264</commentid>
    <comment_count>21</comment_count>
      <attachid>94227</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-05-20 12:12:22 -0700</bug_when>
    <thetext>Comment on attachment 94227
Patch v5

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407508</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 23:18:23 -0700</bug_when>
    <thetext>Landed in r87010.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472295</commentid>
    <comment_count>23</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-23 10:00:56 -0700</bug_when>
    <thetext>This patch caused a regression if the web author uses another prefix for Xlink namespace than &apos;xlink&apos;. See bug 68679.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472741</commentid>
    <comment_count>24</comment_count>
      <attachid>94227</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-24 01:11:57 -0700</bug_when>
    <thetext>Comment on attachment 94227
Patch v5

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

&gt; Source/WebCore/svg/SVGURIReference.cpp:69
&gt; +void SVGURIReference::addSupportedAttributes(HashSet&lt;QualifiedName&gt;&amp; supportedAttributes)
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, xlinkPrefix, (&quot;xlink&quot;));
&gt; +    QualifiedName hrefWithPrefix = XLinkNames::hrefAttr;
&gt; +    hrefWithPrefix.setPrefix(xlinkPrefix);
&gt; +    supportedAttributes.add(hrefWithPrefix);
&gt; +    supportedAttributes.add(XLinkNames::hrefAttr);
&gt; +}
&gt; +

thorten already noticed it yesterday. This seems to be the problem: The assumption that the prefix of Xlink is always &apos;xlink&apos;.

Just a general question. Can the prefix get changed dynamically? Or is it possible to assume that the prefix won&apos;t change once it is defined in the document?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551899</commentid>
    <comment_count>25</comment_count>
      <attachid>94227</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-08 01:52:33 -0800</bug_when>
    <thetext>Comment on attachment 94227
Patch v5

Dirk, can we close this bug now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554160</commentid>
    <comment_count>26</comment_count>
      <attachid>94227</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-10 10:20:35 -0800</bug_when>
    <thetext>Comment on attachment 94227
Patch v5

Cleared Rob Buis&apos;s review+ from obsolete attachment 94227 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009462</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2014-05-14 23:13:25 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 94227 [details])
&gt; Dirk, can we close this bug now?

I hope so. There are certain other optimizations that we can do. HTML did some of them recently. This should be done in more detailed bug reports though.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94203</attachid>
            <date>2011-05-20 06:00:53 -0700</date>
            <delta_ts>2011-05-20 07:54:01 -0700</delta_ts>
            <desc>Patch </desc>
            <filename>PerfPatch.diff</filename>
            <type>text/plain</type>
            <size>317360</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTQzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAwIEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBzdmdBdHRyaWJ1dGVDaGFuZ2VkL3N5bmNo
cm9uaXplUHJvcGVydHkvcGFyc2VNYXBwZWRBdHRyaWJ1dGUgc2hvdWxkIGJlIG9wdGltaXplZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExODMKKwor
ICAgICAgICBFeGFtcGxlOiByZWN0LnguYmFzZVZhbC52YWx1ZSA9IDEwMDsKKyAgICAgICAgV2hh
dCBoYXBwZW5zOiBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgaXMgaW52b2tlZCB3aXRoICJTVkdOYW1lczo6cmVjdEF0dHIi
IGFzIHBhcmFtZXRlci4KKworICAgICAgICB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorICAgICAgICB7CisgICAg
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgICAgICAvLyBIYW5kbGUgbXkgb3duIGF0dHJpYnV0ZSBjaGFu
Z2VzLi4uCisgICAgICAgIH0KKworICAgICAgICBXZSBhbHdheXMgdHJhdmVyc2UgdGhlIGJhc2Ug
Y2xhc3MgaGllYXJjaHksIHdoZW4gaW52b2tpbmcgc3ZnQXR0cmlidXRlQ2hhbmdlZCAodGhpcyBo
YXMgYSByZWFzb24sIGV4cGxhaW5lZCBiZWxvdyAoKikgKS4KKyAgICAgICAgU3dpdGNoIHRvIGEg
bW9yZSBlZmZpY2llbnQgcGF0dGVybiwgYnkgcHJvdmlkaW5nIGEgImJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOyIgZnVuY3Rpb24gZm9yIGFsbCBTVkcqRWxl
bWVudHMuCisgICAgICAgIEl0IGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHRoZSBwYXJ0aWN1bGFy
IFNWRypFbGVtZW50IGNsYXNzIGhhbmRsZXMgKGJ1dCBub3QgaXRzIHBhcmVudCBjbGFzc2VzIGF0
dHJpYnV0ZXMpLiBGb3IgZXhhbXBsZSBTVkdSZWN0RWxlbWVudAorICAgICAgICBjb250YWlucyB4
L3kvd2lkdGgvaGVpZ2h0L3J4L3J5IGF0dHJpYnV0ZXMsIGFuZCB0aGUgb25lcyBmcm9tIFNWR1Rl
c3RzL1NWR0xhbmdTcGFjZS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICh4bWw6c3BhY2Uv
bGFuZywgZXRjLiksCisgICAgICAgIGJ1dCBub3QgZWcuIHRyYW5zZm9ybSBhcyB0aGF0J3MgaGFu
ZGxlZCBieSB0aGUgcGFyZW50IGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lgor
CisgICAgICAgIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUuY29udGFpbnMoYXR0ck5hbWUpKSB7CisgICAgICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2Uga25vdyBmb3Igc3VyZSBpdCdzIG9uZSBvZiBvdXIg
YXR0cmlidXRlcyB0aGF0IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgLy8gTm90ZSBmb3IgZWcu
IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCB0aGUgY2FsbCBmcm9tIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkLCB3b3VsZCBiZSBpbW1lZGlhdGVseSBmb3J3YXJkZWQgdG8gdGhl
IGJhc2UgY2xhc3MsIHdoaWNoIGhhbmRsZXMgdHJhbnNmb3JtQXR0ciBjaGFuZ2VzKQorCisgICAg
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7IGRvX3dvcmsoKTsgcmV0
dXJuOyB9CisgICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7IGRv
X3dvcmsoKTsgcmV0dXJuOyB9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vIEFzc3Vy
ZSB0aGF0IHdlIGhhbmRsZWQgYWxsIHByb3BlcnRpZXMgd2UgY2xhaW0gc3VwcG9ydCBmb3IgaW4g
ImlzU3VwcG9ydGVkQXR0cmlidXRlKCkiLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICBFeGFjdGx5IHRoZSBzYW1lIHBhdHRlcm4gY2FuIGJl
IGFwcGxpZWQgdG8gc3luY2hyb25pemVQcm9wZXJ0eSBhbmQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUg
dG8gc3BlZWQgdGhlbSB1cCBhcyB3ZWxsLgorCisgICAgICAgIE5vdGUgKCopOgorICAgICAgICBF
dmVyeSBzdmdBdHRyaWJ1dGVDaGFuZ2VkIGNhbGwgZnJvbSBhIGNsYXNzIGxpa2UgU1ZHUmVjdEVs
ZW1lbnQgaGFzIHRvIHJlYWNoIHRoZSBiYXNlIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQsIGFzIGl0IGhhbmRsZXMKKyAgICAgICAgaW52YWxpZGF0aW9uIG9mIHRo
ZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudC4gU2F5IHRoYXQgYSA8cmVjdD4gaXMgcmVmZXJlbmNl
ZCBieSBhIDx1c2U+IGFuZCB3ZSBjaGFuZ2UgdGhlICd4JyBhdHRyaWJ1dGUgb2YgdGhlIDxyZWN0
PiwgdGhlbgorICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkLCBj
YWxscyBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQo
dGhpcyksIHNvIHRoYXQgdGhlIDx1c2U+IGNhbiByZWJ1aWxkIGl0cyBzaGFkb3cgdHJlZS4uLgor
ICAgICAgICBUaGF0J3MgdGhlIG9ubHkgcmVhc29uIHdlIGRvIHRoZSBiYXNlLWNsYXNzIGRhbmNl
LCBhbmQgY2FuIGVhc2lseSBiZSBhdm9pZGVkLgorCisgICAgICAgIEFkZCAiU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBndWFyZCh0aGlzKSIgc3RhdG1lbnRzIGluIGFsbCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIGltcGxlbWVudGF0aW9ucywgdGhhdCBjYWxscyBpbnZhbGlkYXRl
QWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpCisgICAgICAgIHVwb24gZGVzdHJ1Y3Rpb24sIGFm
dGVyIHdlJ3ZlIHJlYWN0ZWQgdG8gdGhlIHN2ZyBhdHRyaWJ1dGUgY2hhbmdlLiBUaGlzIGFzc3Vy
ZXMgd2UgbmV2ZXIgZm9yZ2V0IHRvIGNhbGwgdGhlIGludmFsaWRhdGlvbiBtZXRob2QgYW55d2hl
cmUsIGFuZCBkb24ndAorICAgICAgICBuZWVkIHRvIHJlbHkgb24gdGhlIGJhc2UgY2xhc3Mgc3Zn
QXR0cmlidXRlQ2hhbmdlZCgpIGNhbGwgdG8gZG8gaXQuCisgICAgICAgCisgICAgICAgIE9ubHkg
YWZmZWN0cyBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBz
dmcvU1ZHQUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Np
cmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q2lyY2xlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0N1cnNvckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkOjpJbnZhbGlkYXRpb25HdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkOjp+SW52YWxpZGF0aW9uR3VhcmQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNl
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TWVyZ2VOb2RlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZz
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAg
ICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJv
bml6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdHRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KToKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHTGFu
Z1NwYWNlLmg6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xpbmVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAg
ICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNYXJrZXJFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01hc2tFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkpOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
dGVybkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR1BhdHRlcm5FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
Y3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1JlY3RF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0b3BFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdTdG9wRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHVGVzdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5oOgorICAgICAg
ICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyk6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5oOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVmlld0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1ZpZXdFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR1pv
b21BbmRQYW4uaDoKKwogMjAxMS0wNS0yMCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgVHJ5IHRvIGZpeCBXaW5kb3dzIENFIGJ1aWxkLgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTc0LDI2ICs3NSw1
MSBAQCBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKICAgICByZXR1cm4gU1ZHU3R5
bGVkRWxlbWVudDo6dGl0bGUoKTsKIH0KIAorYm9vbCBTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0
cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhcmdldEF0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKQotICAgICAgICBz
ZXRTVkdUYXJnZXRCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKSB7CisgICAgICAgIHNl
dFNWR1RhcmdldEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdBRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3Rh
bmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIC8v
IFVubGlrZSBvdGhlciBTVkcqRWxlbWVudCBjbGFzc2VzLCBTVkdBRWxlbWVudCBvbmx5IGxpc3Rl
bnMgdG8gU1ZHVVJJUmVmZXJlbmNlIGNoYW5nZXMKICAgICAvLyBhcyBub25lIG9mIHRoZSBvdGhl
ciBwcm9wZXJ0aWVzIGNoYW5nZXMgdGhlIGxpbmtpbmcgYmVoYXZpb3VyIGZvciBvdXIgPGE+IGVs
ZW1lbnQuCkBAIC0xMjMsMjQgKzE0OSw0MSBAQCB2b2lkIFNWR0FFbGVtZW50OjpmaWxsQXR0cmli
dXRlVG9Qcm9wZXJ0CiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTVkdUYXJnZXQoKTsKICAg
ICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVNWR1RhcmdldCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHQUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIHN2Z1RhcmdldCgpOyB9CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNCArODksMjkgQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6cGF0aEF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhBdHRyKSB7CiAgICAgICAgIG1fcGF0
aCA9IFBhdGgoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQ
YXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9t
U3RyaW5nKGF0dHItPnZhbHVlKCksIG1fcGF0aCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAgICAgCiBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Um90YXRlTW9kZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cm90
YXRlTW9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjQgKzgxLDM5IEBAIEFuaW1hdGVk
QXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3IKICAgICByZXR1cm4gQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0OwogfQogCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgcmV0dXJu
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInRyYW5zbGF0ZSIp
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICBpZiAodmFsdWUgPT0gInRyYW5zbGF0ZSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgICAgICBlbHNlIGlmIChhdHRy
LT52YWx1ZSgpID09ICJzY2FsZSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJzY2FsZSIp
CiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU7
Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJvdGF0ZSIpCisgICAgICAgIGVs
c2UgaWYgKHZhbHVlID09ICJyb3RhdGUiKQogICAgICAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUo
KSA9PSAic2tld1giKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAic2tld1giKQogICAgICAg
ICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAg
ICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJza2V3WSIpCisgICAgICAgIGVsc2UgaWYgKHZh
bHVlID09ICJza2V3WSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1k7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLSAgICAKIHN0YXRpYyBTVkdUcmFuc2Zvcm1M
aXN0KiB0cmFuc2Zvcm1MaXN0Rm9yKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Q7CiAgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50KikgY29uc3Q7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShj
b25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMjUgKzEzNiw1NyBAQCBzdGF0
aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogfQogCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
a2V5VGltZXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmtleVBvaW50c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisgICAgIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewogICAgICAgICBhdHRyLT52YWx1
ZSgpLnN0cmluZygpLnNwbGl0KCc7JywgbV92YWx1ZXMpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7CiAgICAg
ICAgIHBhcnNlS2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlUaW1lcywgdHJ1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyICYmIGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
c3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9ubHkgYnV0IGl0IGlz
IHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCi0gICAgICAgIC8vIHdoZXJlIHRoZSBvdGhlciB0aW1p
bmcgY2FsY3VsYXRhdGlvbnMgYXJlLgotICAgICAgICBwYXJzZUtleVRpbWVzKGF0dHItPnZhbHVl
KCksIG1fa2V5UG9pbnRzLCBmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgeworICAgICAgICBp
ZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgc3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9u
bHkgYnV0IGl0IGlzIHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCisgICAgICAgICAgICAvLyB3aGVy
ZSB0aGUgb3RoZXIgdGltaW5nIGNhbGN1bGF0YXRpb25zIGFyZS4KKyAgICAgICAgICAgIHBhcnNl
S2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlQb2ludHMsIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpIHsKICAgICAgICAgcGFyc2VLZXlTcGxpbmVzKGF0dHItPnZhbHVl
KCksIG1fa2V5U3BsaW5lcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0
dHIsIGJvb2wgcHJlc2VydmVEZWNscykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogCiAgICAgZW51bSBDYWxjTW9kZSB7IENhbGNNb2RlRGlzY3JldGUsIENhbGNN
b2RlTGluZWFyLCBDYWxjTW9kZVBhY2VkLCBDYWxjTW9kZVNwbGluZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDMwICs1Miw2MiBAQCBQYXNzUmVmUHRyPFNWR0NpcmNsZUVsZW1lbnQ+IFNWR0NpcmNsZUVsCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdDaXJjbGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKK2Jvb2wgU1ZHQ2lyY2xlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChI
YXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYg
KHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5n
U3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
c3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpjeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6Y3lBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJB
dHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpj
eEF0dHIpCi0gICAgICAgIHNldEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgs
IGF0dHItPnZhbHVlKCkpKTsgICAgICAgCi0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpjeUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1l
KCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikgeworICAgICAgICBzZXRDeEJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpIHsK
ICAgICAgICAgc2V0Q3lCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHIt
PnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRy
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpyQXR0cikgewogICAgICAgICBzZXRSQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhN
b2RlT3RoZXIsIGF0dHItPnZhbHVlKCkpKTsKICAgICAgICAgaWYgKHJCYXNlVmFsdWUoKS52YWx1
ZSh0aGlzKSA8IDAuMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIGNpcmNsZSA8cj4gaXMgbm90
IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZH
TGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0NpcmNsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAg
ICBib29sIGlzTGVuZ3RoQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRy
CkBAIC05NywzNCArMTI5LDU3IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmcKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3Bh
Y2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVy
ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7CiAgICAgICAgIHN5bmNo
cm9uaXplQ3koKTsKICAgICAgICAgc3luY2hyb25pemVSKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25p
emVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpjeEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpj
eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpjeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyQXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVIoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdD
aXJjbGVFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdD
bGlwUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdD
bGlwUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVu
dEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zv
cm1MaXN0LmgiCiAKQEAgLTQ5LDU2ICs1MCw4NiBAQCBQYXNzUmVmUHRyPFNWR0NsaXBQYXRoRWxl
bWVudD4gU1ZHQ2xpcFBhCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdDbGlwUGF0aEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdDbGlwUGF0aEVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpOworICAgIH0K
KyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisK
IHZvaWQgU1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7
CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmNsaXBQYXRoVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBp
ZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRDbGlwUGF0aFVuaXRzQmFzZVZh
bHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZH
Q2xpcFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVu
ZGVyZXIoKTsKLSAgICBpZiAoIW9iamVjdCkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJk
KHRoaXMpOwogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0
cgotICAgICAgICB8fCBTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAg
ICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8
fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KQotICAgICAgICB8fCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIo
KSkKICAgICAgICAgb2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdD
bGlwUGF0aEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkp
IHsKICAgICAgICAgc3luY2hyb25pemVDbGlwUGF0aFVuaXRzKCk7CiAgICAgICAgIHN5bmNocm9u
aXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hy
b25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjbGlwUGF0aFVu
aXRzQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmNsaXBQYXRoVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ2xpcFBh
dGhVbml0cygpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwot
ICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlz
LCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0NsaXBQYXRoRWxl
bWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNW
R1Rlc3RzOjppc1ZhbGlkKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQZW5kaW5nUmVzb3Vy
Y2VIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBib29sIGlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwzNiAr
NDgsNzQgQEAgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OlNWRwogewogfQog
Citib29sIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnR5cGVBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cik7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzbG9wZUF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW50ZXJjZXB0QXR0cik7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjphbXBsaXR1ZGVBdHRyKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4cG9uZW50QXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpvZmZzZXRBdHRyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2
b2lkIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7
CisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsK
ICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0
eVRyYWl0czxDb21wb25lbnRUcmFuc2ZlclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAg
ICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShw
cm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
dGFibGVWYWx1ZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIpIHsKICAgICAgICAgU1ZHTnVt
YmVyTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKHZhbHVlKTsKICAgICAgICAg
ZGV0YWNoQW5pbWF0ZWRUYWJsZVZhbHVlc0xpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAg
ICAgICAgIHNldFRhYmxlVmFsdWVzQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzbG9wZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzbG9wZUF0dHIpIHsKICAg
ICAgICAgc2V0U2xvcGVCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmludGVyY2VwdEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbnRlcmNlcHRBdHRy
KSB7CiAgICAgICAgIHNldEludGVyY2VwdEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YW1wbGl0dWRlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmFt
cGxpdHVkZUF0dHIpIHsKICAgICAgICAgc2V0QW1wbGl0dWRlQmFzZVZhbHVlKHZhbHVlLnRvRmxv
YXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpleHBvbmVudEF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpleHBvbmVudEF0dHIpIHsKICAgICAgICAgc2V0RXhwb25lbnRCYXNlVmFsdWUodmFs
dWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9m
ZnNldEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIHNldE9mZnNldEJhc2VWYWx1ZSh2
YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgp
OwogICAgICAgICBzeW5jaHJvbml6ZVRhYmxlVmFsdWVzKCk7CkBAIC04NiwyMyArMTI0LDUxIEBA
IHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQKICAgICAgICAgc3luY2hy
b25pemVBbXBsaXR1ZGUoKTsKICAgICAgICAgc3luY2hyb25pemVFeHBvbmVudCgpOwogICAgICAg
ICBzeW5jaHJvbml6ZU9mZnNldCgpOworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVz
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVRhYmxlVmFsdWVzKCk7Ci0gICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNsb3BlQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplU2xvcGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW50
ZXJjZXB0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aW50ZXJjZXB0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUludGVyY2Vw
dCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphbXBsaXR1ZGVBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjph
bXBsaXR1ZGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQW1wbGl0dWRlKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZXhwb25lbnRBdHRyKSB7
CiAgICAgICAgIHN5bmNocm9uaXplRXhwb25lbnQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZU9mZnNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAg
Ly8gRklYTUU6IHN2Z0F0dHJpYnV0ZUNoYW5nZWQgbWlzc2luZy4KKyAgICBib29sIGlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBmaWxs
QXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdDdXJzb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Q3Vyc29yRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0N1cnNvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01NSwyMiArNTYsNDQgQEAgU1ZHQ3Vyc29yRWxlbWVudDo6flNWR0N1cnNvckVs
ZW1lbnQoKQogICAgICAgICAoKml0KS0+Y3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKIH0KIAorYm9v
bCBTVkdDdXJzb3JFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0
cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsK
KyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUp
OworfQorCiB2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAg
U1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAg
ICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVl
KCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAg
ICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKKyAgICAgICAgc2V0WUJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOworICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIAorICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdDdXJzb3JFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcCgpCkBAIC0xMDksNDQgKzEzMiw2NCBAQCB2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnJl
bW92ZVJlZmVyZW5jZWRFCiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRy
Ci0gICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAg
ICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKQotICAgICAgICB8fCBTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY2xpZW50cy5iZWdpbigpOwotICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9jbGllbnRzLmVuZCgpOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7Ci0gICAgfQorICAgIC8vIEFueSBjaGFuZ2Ugb2YgYSBjdXJzb3Igc3BlY2lmaWMgYXR0
cmlidXRlIHRyaWdnZXJzIHRoaXMgcmVjYWxjLgorICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOworICAgIEhhc2hTZXQ8U1ZHRWxl
bWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisKKyAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OwogfQogCiB2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewog
ICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CiAgICAgICAg
IHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBzeW5jaHJv
bml6ZUhyZWYoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlz
LCBhdHRyTmFtZSk7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBl
bHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR0N1cnNvckVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDdXJzb3JF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1l
bnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7
IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDE1IEBAIHB1YmxpYzoKIAogICAgIERvY3VtZW50KiBv
d25lckRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50ID8gbV9lbGVtZW50LT5vd25l
ckRvY3VtZW50KCkgOiAwOyB9CiAKKyAgICBjbGFzcyBJbnZhbGlkYXRpb25HdWFyZCB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEludmFsaWRhdGlvbkd1YXJkKTsKKyAgICBwdWJsaWM6
ICAgIAorICAgICAgICBJbnZhbGlkYXRpb25HdWFyZChTVkdFbGVtZW50KiBlbGVtZW50KSA6IG1f
ZWxlbWVudChlbGVtZW50KSB7IH0KKyAgICAgICAgfkludmFsaWRhdGlvbkd1YXJkKCkgeyBTVkdF
bGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQobV9lbGVtZW50
KTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFNWR0VsZW1lbnQqIG1fZWxlbWVudDsKKyAgICB9
OworCiAgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVudChTVkdF
bGVtZW50Kik7CiAKICAgICB1c2luZyBUcmVlU2hhcmVkPFNWR0VsZW1lbnRJbnN0YW5jZT46OnJl
ZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTU0LDM0ICs1NSw3MCBAQCBQYXNzUmVmUHRy
PFNWR0VsbGlwc2VFbGVtZW50PiBTVkdFbGxpcHNlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdFbGxpcHNlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0VsbGlw
c2VFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4s
IHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3Vw
cG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN4QXR0cik7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnhBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJ5QXR0cik7CisgICAgfQorICAgIHJldHVybiBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdFbGxp
cHNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKSB7CiAg
ICAgICAgIHNldEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZh
bHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikgewogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cnhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAgc2V0UnhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBpZiAo
cnhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKICAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9y
IGVsbGlwc2UgPHJ4PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpyeUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgewogICAgICAgICBzZXRSeUJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwogICAg
ICAgICBpZiAocnlCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUg
dmFsdWUgZm9yIGVsbGlwc2UgPHJ5PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChT
VkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQg
aW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBib29sIGlzTGVuZ3RoQXR0cmlidXRlID0g
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRyCkBAIC0xMDQsMTUgKzE0MSwxNiBAQCB2b2lk
IFNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQot
ICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0VsbGlwc2VFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAg
IHN5bmNocm9uaXplQ3goKTsKICAgICAgICAgc3luY2hyb25pemVDeSgpOwpAQCAtMTIwLDIxICsx
NTgsNDYgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZQogICAgICAg
ICBzeW5jaHJvbml6ZVJ5KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMs
IGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjeEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjeEF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVDeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmN5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnJ4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUngo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnlBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeUF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVSeSgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXpl
UHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAm
IFNWR0VsbGlwc2VFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTEgQEAgYm9vbCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tubwogICAgIHJldHVybiBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEF0dHI7CiB9CiAKK3ZvaWQgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQXR0cik7Cit9CisKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4mKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKGNvbnN0IGJvb2wmKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTQ3LDE5ICs0
OCw0MyBAQCBQYXNzUmVmUHRyPFNWR0ZFQmxlbmRFbGVtZW50PiBTVkdGRUJsZW5kCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUJsZW5kRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwog
fQogCitib29sIFNWR0ZFQmxlbmRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hT
ZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3Vw
cG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6Om1vZGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjppbjJBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
Y29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1
ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5u
YW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjptb2RlQXR0cikgewogICAgICAgICBCbGVuZE1vZGVUeXBl
IHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxCbGVuZE1vZGVUeXBlPjo6ZnJvbVN0
cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAg
IHNldE1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzZXRJbjFC
YXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aW4yQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsK
LSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRUJsZW5kRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc0LDMzICs5OSw1NyBAQCBib29sIFNWR0ZFQmxlbmRFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBCiAKIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRh
dGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjptb2RlQXR0cikgewogICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aW5BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJB
dHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
QmxlbmRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1vZGUoKTsKICAgICAgICAgc3luY2hyb25pemVJ
bjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9k
ZUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVNb2RlKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVCbGVuZEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
U1ZHRkVCbGVuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSk7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NywyMiArNDgs
NDYgQEAgUGFzc1JlZlB0cjxTVkdGRUNvbG9yTWF0cml4RWxlbWVudD4gU1ZHRgogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAorYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2YWx1ZXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAg
IGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZh
bHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAg
ICAgICAgQ29sb3JNYXRyaXhUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxD
b2xvck1hdHJpeFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAo
cHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKHByb3BlcnR5
VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0
dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBh
cnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRWYWx1ZXNMaXN0V3JhcHBlcnMobmV3
TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRWYWx1ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc5LDMyICsxMDQsNTcgQEAgYm9vbCBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRQogCiB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNW
R0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhp
cyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyCi0gICAgICAgIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dHlwZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsK
ICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAg
aWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVUeXBlKCk7
CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7
CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplVHlwZSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwyMSArNDgsNDkgQEAgUGFzc1JlZlB0cjxTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6aW5BdHRyKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhh
dHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQorICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CisgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIC8vIEZJWE1FOiBzdmdBdHRy
aWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTUxLDI3ICs1Miw2NyBAQCBQYXNzUmVmUHRyPFNW
R0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Omlu
MkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3BlcmF0
b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmsxQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjprMkF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6azNBdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Oms0QXR0cik7CisgICAgfQorICAg
IHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9p
ZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9w
ZXJhdG9yQXR0cikgewogICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHByb3BlcnR5VmFs
dWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmlu
Zyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNl
dF9vcGVyYXRvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldElu
MUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAgICBzZXRJbjJCYXNlVmFsdWUodmFsdWUp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFB
dHRyKSB7CiAgICAgICAgIHNldEsxQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprMkF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprMkF0dHIpIHsKICAg
ICAgICAgc2V0SzJCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmszQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmszQXR0cikgewogICAgICAgICBzZXRL
M0Jhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRyKSB7CiAgICAgICAgIHNldEs0QmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtOTUsMjQgKzEzNiwz
MiBAQCBib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmCiAKIHZvaWQgU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9w
ZXJhdG9yQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyCiAgICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprMkF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmszQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRB
dHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKSB7CiAgICAgICAg
IHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjppbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAg
aW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6
ZV9vcGVyYXRvcigpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwpAQCAtMTIxLDIzICsxNzAs
NTEgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN5bmNocm9uaXplUAogICAgICAgICBz
eW5jaHJvbml6ZUsyKCk7CiAgICAgICAgIHN5bmNocm9uaXplSzMoKTsKICAgICAgICAgc3luY2hy
b25pemVLNCgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3Bl
cmF0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplX29wZXJhdG9yKCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmluMkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjIoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVL
MSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMkF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmszQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSzMoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprNEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVLNCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVDb21wb3NpdGVF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRG
aWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR1BhcnNlclV0aWxpdGllcy5oIgpAQCAtODMsNDcgKzg0LDk5IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJpeEUKICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQog
Citib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBp
ZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpvcmRlckF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjplZGdlTW9kZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6ZGl2aXNvckF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6Ymlhc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsK
ICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6Om9yZGVyQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b3JkZXJBdHRyKSB7CiAgICAgICAgIGZs
b2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4
LCB5KSkgewogICAgICAgICAgICAgc2V0T3JkZXJYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAg
c2V0T3JkZXJZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CiAg
ICAgICAgIEVkZ2VNb2RlVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RWRn
ZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3Bl
cnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0RWRnZU1vZGVCYXNlVmFsdWUocHJvcGVydHlW
YWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1h
dHJpeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlz
dCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNo
QW5pbWF0ZWRLZXJuZWxNYXRyaXhMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAg
ICBzZXRLZXJuZWxNYXRyaXhCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpIHsKICAg
ICAgICAgc2V0RGl2aXNvckJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpIHsK
ICAgICAgICAgc2V0Qmlhc0Jhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIpCi0gICAgICAgIHNldFRhcmdl
dFhCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpCi0gICAgICAgIHNldFRhcmdldFlCYXNlVmFs
dWUodmFsdWUudG9VSW50U3RyaWN0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSB7CisgICAg
ICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUuc3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dGFyZ2V0WUF0dHIpIHsKKyAgICAgICAgc2V0VGFyZ2V0WUJhc2VWYWx1ZSh2YWx1ZS5zdHJp
bmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAg
ICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1
ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgp
OwogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBo
YUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAi
dHJ1ZSIpCiAgICAgICAgICAgICBzZXRQcmVzZXJ2ZUFscGhhQmFzZVZhbHVlKHRydWUpOwogICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQogICAgICAgICAgICAgc2V0UHJlc2VydmVB
bHBoYUJhc2VWYWx1ZShmYWxzZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9v
bCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2
NCw3ICsyMTcsMTIgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c2V0S2Vybgog
CiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxp
ZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZGl2aXNvckF0dHIKQEAgLTE3MiwxOSArMjMwLDIzIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OnN2Z0F0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRh
cmdldFhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cgog
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIKLSAg
ICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKQorICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cgogICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6b3JkZXJBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjprZXJuZWxNYXRyaXhBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6a2VybmVsTWF0cml4QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1l
ID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVFZGdlTW9kZSgpOwogICAgICAg
ICBzeW5jaHJvbml6ZURpdmlzb3IoKTsKQEAgLTE5NCwyNCArMjU2LDUyIEBAIHZvaWQgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN5bmNocm8KICAgICAgICAgc3luY2hyb25pemVLZXJuZWxV
bml0TGVuZ3RoWCgpOwogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBbHBoYSgpOworICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpl
ZGdlTW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
RWRnZU1vZGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmRpdmlzb3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRGl2aXNvcigpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiaWFzQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVCaWFzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnRhcmdldFhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVRhcmdldFgo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdl
dFlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVGFyZ2V0WSgpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVu
Z3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhYKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFkoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhhQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFscGhhKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTVkdDb2xvci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02NiwyMyArNjcsNTIgQEAgY29uc3QgQXRvbWljU3RyaW5n
JiBTVkdGRURpZmZ1c2VMaWdodGluZwogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jv
b2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAo
c3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsg
Ly8gRXZlbiB0aG91Z2ggaXQncyBhIFNWRy1DU1MgcHJvcGVydHksIHdlIG92ZXJyaWRlIGl0cyBo
YW5kbGluZyBoZXJlLgorICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSB8
fCBhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgeworICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikgewogICAgICAgICBzZXRTdXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUu
dG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1
c2VDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyKSB7CiAgICAgICAgIHNldERp
ZmZ1c2VDb25zdGFudEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5l
bFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJz
ZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAgc2V0S2Vy
bmVsVW5pdExlbmd0aFhCYXNlVmFsdWUoeCk7CiAgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVu
Z3RoWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQpAQCAtMTMyLDE2ICsxNjIsMjcgQEAgYm9vbCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OnNldEZpbAogCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFu
Y2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cgogICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cgogICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgewogICAgICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdG
RUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKQEAgLTE1NSwyNyArMTk2LDQ2IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpsaWdodEUKIAogdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3VyZmFjZVNjYWxlKCk7CiAgICAgICAgIHN5
bmNocm9uaXplRGlmZnVzZUNvbnN0YW50KCk7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5p
dExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAg
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplU3VyZmFjZVNjYWxlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVEaWZmdXNlQ29uc3RhbnQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWCgpOwogICAgICAgICBzeW5jaHJvbml6
ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
aAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlz
aW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCkBAIC00OSwyNSArNTAsNTcgQEAgUGFzc1JlZlB0cjxTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQ+IAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpp
bjJBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhDaGFu
bmVsU2VsZWN0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OnNjYWxlQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBj
b25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JB
dHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxlY3RvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1By
b3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3RvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAg
ICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0WENoYW5uZWxTZWxl
Y3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0
b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxlY3RvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNW
R1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3RvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsK
ICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0WUNoYW5uZWxT
ZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJh
c2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAgICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2Nh
bGVBdHRyKSB7CiAgICAgICAgIHNldFNjYWxlQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtODYsMzcgKzExOSw2OSBAQCBib29sIFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2V0RmlsCiAKIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjpzY2FsZUF0dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRp
b25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
Ojp5Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRy
KSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewog
ICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplWENoYW5uZWxTZWxlY3RvcigpOwogICAgICAgICBzeW5jaHJvbml6ZVlD
aGFubmVsU2VsZWN0b3IoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3lu
Y2hyb25pemVJbjIoKTsKICAgICAgICAgc3luY2hyb25pemVTY2FsZSgpOworICAgICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVhDaGFubmVsU2VsZWN0b3IoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2Vs
ZWN0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWUNoYW5uZWxTZWxlY3RvcigpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpp
bjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4yKCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplU2NhbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5o
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogICAgIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFk
b3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVk
ZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTcyLDU4
ICs3MywxMTIgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzZXRTdGREZXZpYQogICAg
IGludmFsaWRhdGUoKTsKIH0KIAorYm9vbCBTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkeEF0dHIpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpOworICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
RkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICgh
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RkRGV2
aWF0aW9uQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1i
ZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldFN0ZERldmlh
dGlvblhCYXNlVmFsdWUoeCk7CiAgICAgICAgICAgICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVl
KHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRy
KSB7CiAgICAgICAgIHNldER4QmFzZVZhbHVlKGF0dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKLSAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikg
ewogICAgICAgICBzZXREeUJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpLnRvRmxvYXQoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwog
ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyCiAgICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5
QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAg
ICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7Ci0gICAgCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVTdGREZXZpYXRpb25YKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9u
WSgpOwogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsK
ICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2
aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVEeSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXIqIGZpbHRlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFk
b3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEcm9wU2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTY2LDQ2ICs2Nyw4NSBAQCB2b2lkIFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudDo6c2V0U3RkRGV2CiAgICAgaW52YWxpZGF0ZSgpOwogfQogCitib29sIFNW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6c3RkRGV2aWF0aW9uQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25z
dCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgp
OwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsK
ICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAgICBzZXRTdGREZXZpYXRpb25YQmFzZVZhbHVl
KHgpOwogICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWUJhc2VWYWx1ZSh5KTsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERl
dmlhdGlvbkF0dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewog
ICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAg
IHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlh
dGlvblkoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3Rk
RGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAmIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1
ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKQEAgLTc3LDUwICs3OCw5NiBAQCB2b2lkIFNW
R0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0SW1hZ2VSZXNvCiAgICAgICAgIG1fY2FjaGVkSW1hZ2Ut
PmFkZENsaWVudCh0aGlzKTsKIH0KIAorYm9vbCBTVkdGRUltYWdlRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpOwor
ICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7
Cit9CisKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0
cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh0aGlzLCB2YWx1ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKSB7Ci0gICAgICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkg
eworICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNl
OjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAg
ICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIGNhbid0IGJlIGNvcnJlY3QsIEknbSBqdXN0IHByZXNlcnZpbmcgZXhpc3RpbmcgY29k
ZS4gPGZlSW1hZ2U+ICsgU1ZHIERPTSAnaHJlZicgY2hhbmdlcyBuZWVkIHRlc3RpbmcuCisgICAg
aWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwogICAgICAgICBzeW5jaHJvbml6
ZUhyZWYoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQorICAgIGlmICgh
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9ICAgCisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVB
c3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVJbWFnZUVsZW1lbnQ6OmF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHRkVJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgpAQCAtNzMsMzcgKzc0LDk0IEBA
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZFTGlnaHRFbGVtZW4KICAgICByZXR1cm4gbGln
aHROb2RlLT5saWdodFNvdXJjZSgpOwogfQogCitib29sIFNWR0ZFTGlnaHRFbGVtZW50Ojppc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJp
YnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmF6aW11dGhBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ekF0dHIpOworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cG9pbnRzQXRYQXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpOworICAg
ICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVB
dHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZh
bHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNW
R0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpIHsKICAgICAgICAg
c2V0QXppbXV0aEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpIHsK
ICAgICAgICAgc2V0RWxldmF0aW9uQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAg
ICAgIHNldFhCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VW
YWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ekF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp6QXR0cikgewogICAgICAgICBzZXRaQmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikgewogICAgICAgICBzZXRQb2ludHNBdFhCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKSB7CiAgICAgICAgIHNldFBvaW50
c0F0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpIHsKICAgICAg
ICAgc2V0UG9pbnRzQXRaQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1
bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAgIHNldFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUo
dmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikgewogICAg
ICAgICBzZXRMaW1pdGluZ0NvbmVBbmdsZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgewor
ICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjphemltdXRoQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ZWxldmF0aW9uQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKQEAg
LTEzMiwxMiArMTkwLDEyIEBAIHZvaWQgU1ZHRkVMaWdodEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFu
eVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVBemltdXRoKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplRWxldmF0aW9uKCk7CkBAIC0xNDksMjkgKzIwNyw2NiBAQCB2b2lkIFNWR0ZFTGlnaHRF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7
CiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJFeHBvbmVudCgpOwogICAgICAgICBzeW5jaHJv
bml6ZUxpbWl0aW5nQ29uZUFuZ2xlKCk7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQXpp
bXV0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjplbGV2YXRpb25BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRWxldmF0aW9uKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVaKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0
WEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQb2ludHNBdFgoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVBvaW50c0F0WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplUG9pbnRzQXRaKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1
bGFyRXhwb25lbnRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVNwZWN1bGFyRXhwb25lbnQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVMaW1pdGluZ0NvbmVBbmdsZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwJiBTVkdGRUxpZ2h0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAgcHJvdGVjdGVkOgogICAgIFNWR0ZFTGlnaHRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiBwcml2YXRlOgorICAgIGJvb2wgaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NSwzMSArNDYsNTIgQEAgUGFzc1JlZlB0
cjxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+IFNWR0ZFTQogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHRkVNZXJnZU5vZGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZH
RkVNZXJnZU5vZGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0
cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjppbkF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0
dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0g
ICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgeworICAgICAgICBzZXRJbjFCYXNl
VmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0KLSAgICBpZiAoYXR0ck5h
bWUgIT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuOworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQo
dGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKKyAg
ICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgICAgICBpZiAo
IXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFy
ZW5kZXJlci0+aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpKQorICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSgpKQorICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVu
dFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZh
bGlkYXRpb24ocmVuZGVyZXIpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojph
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkBAIC04NSwxMCArMTA3LDIzIEBAIHZvaWQgU1ZH
RkVNZXJnZU5vZGVFbGVtZW50OjpmaWxsQXR0cmlidXQKIAogdm9pZCBTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAg
aWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKKyAgICAgICAgc3luY2hyb25pemVJbjEoKTsK
KyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNW
R0ZFTWVyZ2VOb2RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAor
ICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAko
cmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpAQCAtNjcsMjMgKzY4
LDQ3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVzKGYKICAgICBpbnZh
bGlkYXRlKCk7CiB9CiAKK2Jvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3BlcmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJhZGl1c0F0dHIpOworICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICgh
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b3BlcmF0
b3JBdHRyKSB7CiAgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZh
bHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0X29w
ZXJhdG9yQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFz
ZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJh
ZGl1c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAg
ICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAg
ICAgICBzZXRSYWRpdXNYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0UmFkaXVzWUJhc2VW
YWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wg
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTEwMCwzNiAr
MTI1LDU5IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWYKIAogdm9p
ZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JB
dHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKQorICAgIFNW
R0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhp
cyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9vcGVyYXRvcigpOwogICAgICAgICBzeW5jaHJv
bml6ZUluMSgpOwogICAgICAgICBzeW5jaHJvbml6ZVJhZGl1c1goKTsKICAgICAgICAgc3luY2hy
b25pemVSYWRpdXNZKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVfb3BlcmF0b3IoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVJbjEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFk
aXVzQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUmFkaXVzWCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZVJhZGl1c1koKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCYgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNDYsNDYgKzQ3LDkxIEBAIFBhc3NSZWZQdHI8
U1ZHRkVPZmZzZXRFbGVtZW50PiBTVkdGRU9mZnMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0ZFT2Zmc2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0ZFT2Zm
c2V0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpp
bkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7Cisg
ICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsK
K30KKwogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsK
ICAgICAgICAgc2V0RHhCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBz
ZXREeUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VW
YWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVPZmZz
ZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyCi0gICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmR5QXR0cikKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFs
aWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRU9mZnNl
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwog
ICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVEeSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwJiBTVkdGRU9mZnNldEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVPZmZzZXRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZH
Q29sb3IuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdG
RUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgpAQCAtNjksMjUgKzcwLDU3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZH
RkVTcGVjdWxhckxpZ2h0aW4KICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCitib29sIFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpOwor
ICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7
Cit9CisKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoteyAgICAKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIp
Cit7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
dXJmYWNlU2NhbGVBdHRyKSB7CiAgICAgICAgIHNldFN1cmZhY2VTY2FsZUJhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3Bl
Y3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0cikgewogICAgICAgICBz
ZXRTcGVjdWxhckNvbnN0YW50QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNw
ZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAgIHNldFNwZWN1bGFyRXhwb25lbnRCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewog
ICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZh
bHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUoeSk7CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBib29sIFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
IGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xMzksMTYgKzE3Miwy
NyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpCiAKIHZvaWQgU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3BlY3VsYXJDb25zdGFudEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnNwZWN1bGFyRXhwb25lbnRBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpr
ZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtl
cm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIp
IHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVu
dCogbGlnaHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2Miw4
ICsyMDYsNiBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0CiAKIHZv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYg
KGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKICAg
ICAgICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUoKTsKQEAgLTE3MSwyMSArMjEzLDQyIEBAIHZv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3luY2gKICAgICAgICAgc3luY2hyb25p
emVTcGVjdWxhckV4cG9uZW50KCk7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0
aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJD
b25zdGFudCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4
cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVT
cGVjdWxhckV4cG9uZW50KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtl
cm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxV
bml0TGVuZ3RoWSgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJKHJl
dmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAgICAgCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJT
dHlsZS5oIgpAQCAtNDUsMjkgKzQ2LDY1IEBAIFBhc3NSZWZQdHI8U1ZHRkVUaWxlRWxlbWVudD4g
U1ZHRkVUaWxlRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFVGlsZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRVRpbGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgIHJldHVybiBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRVRpbGVF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAg
IGVsc2UKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgeworICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0
ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0gICAg
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3Vh
cmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRVRpbGVFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQ
cm9wZXJ0eShhdHRyTmFtZSk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFt
ZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CisgICAgICAgIHN5
bmNocm9uaXplSW4xKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFVGlsZUVs
ZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVUaWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcg
QEAKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRy
aWJ1dGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogCkBAIC02MywyOSArNjQs
NjEgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRVR1cmJ1bGVuY2VFbGVtZQogICAgIHJldHVy
biBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpudW1PY3RhdmVzQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzZWVkQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgVHVyYnVsZW5jZVR5cGUgcHJvcGVydHlW
YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFR1cmJ1bGVuY2VUeXBlPjo6ZnJvbVN0cmluZyh2YWx1
ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldFR5cGVC
YXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyKSB7CiAgICAg
ICAgIFNWR1N0aXRjaE9wdGlvbnMgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNW
R1N0aXRjaE9wdGlvbnM+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5
VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0U3RpdGNoVGlsZXNCYXNlVmFsdWUocHJvcGVydHlW
YWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVx
dWVuY3lBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikgewogICAgICAgICBmbG9hdCB4LCB5
OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsK
ICAgICAgICAgICAgIHNldEJhc2VGcmVxdWVuY3lYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAg
c2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzZWVkQXR0cikgewogICAg
ICAgICBzZXRTZWVkQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikKLSAgICAgICAgc2V0TnVtT2N0
YXZlc0Jhc2VWYWx1ZSh2YWx1ZS50b1VJbnRTdHJpY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpIHsKKyAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VW
YWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3Qs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMTA4LDIwICsxNDEsMjcgQEAgYm9v
bCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRGaWx0ZXJFZgogCiB2b2lkIFNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VG
cmVxdWVuY3lBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVz
QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIKICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cgotICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjp0eXBlQXR0cikgewogICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgp
OwogICAgICAgICBzeW5jaHJvbml6ZVN0aXRjaFRpbGVzKCk7CkBAIC0xMjksMjAgKzE2OSw0MiBA
QCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplCiAgICAgICAgIHN5bmNo
cm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKICAgICAgICAgc3luY2hyb25pemVTZWVkKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplTnVtT2N0YXZlcygpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0
cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVR5cGUoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxl
c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGl0Y2hUaWxlcygpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUJhc2VGcmVxdWVuY3lYKCk7CiAgICAgICAgIHN5
bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpzZWVkQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTZWVkKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpudW1P
Y3RhdmVzQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZU51bU9jdGF2ZXMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTkwLDc1ICs5
MSwxMDYgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpzZXRGaWx0ZXJSZXModW5zaQogICAgICAg
ICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCitib29sIFNWR0ZpbHRlckVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9y
dGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHko
KSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3Vw
cG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwcmltaXRpdmVV
bml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAg
ICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cik7Cisg
ICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsK
K30KKwogdm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyKSB7
CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1By
b3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVl
KTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0RmlsdGVy
VW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNB
dHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5n
KHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0
UHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0
WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAg
ICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lk
dGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CiAg
ICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVy
KHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAgc2V0RmlsdGVyUmVzWEJhc2VWYWx1ZSh4KTsK
ICAgICAgICAgICAgIHNldEZpbHRlclJlc1lCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBTVkdTdHlsZWRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5
bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBib29sIGludmFsaWRhdGVDbGllbnRzID0gZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3Rh
bmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjp5QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAg
ICAgIGludmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmhlaWdodEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0
aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwot
ICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaW52YWxpZGF0ZUNs
aWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cgot
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyCi0gICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyCi0gICAgICAgIHx8IFNW
R1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZH
TGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBp
ZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNl
dE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5
bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0
ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAg
c3luY2hyb25pemVZKCk7CkBAIC0xNzAsMjggKzIwMiw2MiBAQCB2b2lkIFNWR0ZpbHRlckVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAgIHN5bmNocm9uaXplRmlsdGVyUmVzWSgpOwog
ICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAg
c3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzeW5j
aHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmZpbHRlclVuaXRzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
RmlsdGVyVW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJpbWl0
aXZlVW5pdHNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQ
cmltaXRpdmVVbml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0
ZXJSZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVGaWx0ZXJS
ZXNYKCk7CiAgICAgICAgIHN5bmNocm9uaXplRmlsdGVyUmVzWSgpOwotICAgIH0gZWxzZSBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25p
emVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFw
JiBTVkdGaWx0ZXJFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291
cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgYm9vbCBpc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC01Mywy
MSArNTQsNTMgQEAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpTVgogICAg
IC8vIFNwZWM6IElmIHRoZSB3aWR0aC9oZWlnaHQgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQs
IHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCiB9
CiAKK2Jvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnJlc3VsdEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9y
dGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7
CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIp
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0
WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAg
ICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lk
dGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikgewogICAgICAgICBz
ZXRSZXN1bHRCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFNWR1N0
eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCkBAIC03OSwzOSArMTEyLDU4IEBAIGJv
b2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUKIAogdm9pZCBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgot
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpyZXN1bHRBdHRyKQotICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgU1ZHRWxlbWVu
dEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsgICAg
CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplV2lkdGgoKTsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKICAgICAgICAgc3lu
Y2hyb25pemVSZXN1bHQoKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
U3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cmVzdWx0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cmVzdWx0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJlc3VsdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5n
ZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJD
aGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDEwIEBA
IGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnUKIHsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewogICAgICAgICBGbG9hdFJlY3Qg
dmlld0JveDsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlVmlld0JveChkb2N1bWVudCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFh
dHRyLT52YWx1ZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgcGFyc2VWaWV3Qm94KGRvY3VtZW50
LCBhdHRyLT52YWx1ZSgpLCB2aWV3Qm94KTsKICAgICAgICAgc2V0Vmlld0JveEJhc2VWYWx1ZSh2
aWV3Qm94KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh0aGlzLCBhdHRyLT52
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDUsMTEgKzEwNCwzMSBAQCBib29s
IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgp
KSB7CisgICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOworICAgICAgICBzeW5jaHJvbml6ZVBy
ZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIpCisgICAgICAgIHN5bmNocm9uaXplVmll
d0JveCgpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVj
dFJhdGlvQXR0cikKKyAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cit9
CisKIGJvb2wgU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHJldHVybiBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmll
d0JveEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRy
OwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNo
U2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2aWV3Qm94QXR0cik7CisgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKTsKK30KKwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRU
b1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmll
d0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIGNsYXNzIEF0dHJpYnV0ZTsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgUXVhbGlmaWVkTmFtZTsK
K2NsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwogCiBjbGFz
cyBTVkdGaXRUb1ZpZXdCb3ggewpAQCAtNDIsMTAgKzQzLDE1IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoRG9jdW1lbnQqLCBBdHRyaWJ1dGUqKTsKICAgICBib29s
IGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQgYWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CisgICAgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnRpZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKGNvbnN0IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8mKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVWaWV3Qm94
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8o
KSA9IDA7CisKIHByaXZhdGU6CiAgICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsMzIgKzU2LDY4IEBAIFBhc3NSZWZQdHI8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+IFNW
R0YKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmli
dXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAg
ICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZ
QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7
CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0
aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJO
YW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgpAQCAtOTMsMjAgKzEyOSwxMiBAQCB2b2lkIFNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50OjpzdmdBdHRyaWJ1CiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5k
bGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUKLSAg
ICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAg
ICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkp
CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3Vy
Y2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCiB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAg
IHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKQEAgLTExNSwyMSArMTQz
LDQ2IEBAIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN5bmNocm9uaXoKICAgICAgICAg
c3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9u
aXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMs
IGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0
cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lk
dGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVp
Z2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVz
dHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAmIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3Bl
cnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwcml2
YXRlOgogICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBT
VkdUZXN0czo6aXNWYWxpZCgpOyB9CisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ0LDggKzQ1LDI0IEBAIFBhc3NSZWZQdHI8U1ZHR0VsZW1lbnQ+IFNWR0dFbGVtZW50Ojpj
cmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0dFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKK2Jvb2wgU1ZHR0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNl
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5j
b250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpA
QCAtNTMsMzkgKzcwLDUwIEBAIHZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEEKICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogdm9pZCBTVkdHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0KLSAgICBpZiAoU1ZHVGVz
dHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRh
dGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAorICAgIGlmIChTVkdUZXN0
czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAg
ICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpCisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJl
cigpKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJl
c291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIAogdm9pZCBTVkdHRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNo
cm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRo
aXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHR0VsZW1lbnQ6
OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVu
dC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxp
ZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKQEAgLTUxLDcz
ICs1MiwxMTQgQEAgU1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVudEVsZW1lbnQoYwogewog
fQogCitib29sIFNWR0dyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNo
U2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1
cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmdyYWRpZW50VW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0dyYWRp
ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdT
dHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VW5p
dHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1
ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3Ry
aW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAg
ICAgICAgICBzZXRHcmFkaWVudFVuaXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikgewogICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0
IG5ld0xpc3Q7CiAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1B
dHRyaWJ1dGUobmV3TGlzdCwgYXR0ci0+dmFsdWUoKSkpCiAgICAgICAgICAgICBuZXdMaXN0LmNs
ZWFyKCk7CiAKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRHcmFkaWVudFRyYW5zZm9ybUxpc3RXcmFw
cGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldEdyYWRpZW50VHJhbnNmb3JtQmFzZVZh
bHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
cHJlYWRNZXRob2RBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKSB7CiAgICAgICAgIFNWR1Nw
cmVhZE1ldGhvZFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1NwcmVh
ZE1ldGhvZFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJv
cGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUocHJv
cGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHls
ZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIFJlbmRlck9i
amVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIW9iamVjdCkKKyAgICBpZiAoIWlz
U3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIKLSAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cgotICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cgotICAgICAgICB8fCBT
VkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0g
ICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3Vh
cmQodGhpcyk7CisgICAgCisgICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIo
KSkKICAgICAgICAgb2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdH
cmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUdyYWRpZW50VW5pdHMoKTsKICAgICAgICAgc3luY2hyb25pemVHcmFkaWVudFRy
YW5zZm9ybSgpOwogICAgICAgICBzeW5jaHJvbml6ZVNwcmVhZE1ldGhvZCgpOwogICAgICAgICBz
eW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25p
emVIcmVmKCk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKQorICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVHcmFkaWVudFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omdy
YWRpZW50VHJhbnNmb3JtQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplR3JhZGllbnRUcmFuc2Zvcm0oKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVNwcmVhZE1ldGhvZCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6ZmlsbFBhc3NlZEF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwKEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVt
ZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBTVkdHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05h
bWVzLmgiCkBAIC02MCw0NCArNjEsODIgQEAgUGFzc1JlZlB0cjxTVkdJbWFnZUVsZW1lbnQ+IFNW
R0ltYWdlRWxlbQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHSW1hZ2VFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHSW1hZ2VFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZH
VGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNl
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7
CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+
dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
SGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9B
dHRyKSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3Bl
Y3RSYXRpbyh0aGlzLCBhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdp
ZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
ICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaWR0aCwgYXR0ci0+dmFs
dWUoKSk7CiAgICAgICAgIGlmICh3aWR0aEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgaW1hZ2UgYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFs
bG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKICAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlIZWlnaHQsIGF0dHItPnZhbHVlKCkpOwogICAgICAg
ICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZl
IHZhbHVlIGZvciBpbWFnZSBhdHRyaWJ1dGUgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB2b2lkIFNWR0ltYWdlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0KLSAgICBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKLSAgICAgICAgbV9pbWFnZUxvYWRlci51
cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJvcigpOworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9
IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgpAQCAtMTA5LDYgKzE0OCwxMSBAQCB2
b2lkIFNWR0ltYWdlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlCiAgICAgaWYgKFNWR1Rlc3Rz
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBtX2ltYWdlTG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91
c0Vycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMjEsMTQgKzE2NSwxNiBAQCB2b2lkIFNWR0ltYWdlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlCiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNw
ZWN0UmF0aW9BdHRyCiAgICAgICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVy
ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9
PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZVkoKTsKQEAgLTEzOCwyNSArMTg0LDU2IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnQKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3lu
Y2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7
CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhl
aWdodCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVj
dFJhdGlvQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdVUklS
ZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9u
aXplSHJlZigpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJv
cGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R0ltYWdlRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xhbmdTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdT
cGFjZS5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdT
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDIxIEBAIGJvb2wgU1ZHTGFuZ1Nw
YWNlOjppc0tub3duQXR0cmlidXRlKGNvbnMKIHsKICAgICByZXR1cm4gYXR0ck5hbWUubWF0Y2hl
cyhYTUxOYW1lczo6bGFuZ0F0dHIpIHx8IGF0dHJOYW1lLm1hdGNoZXMoWE1MTmFtZXM6OnNwYWNl
QXR0cik7CiB9CisgICAgCit2b2lkIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB4bWxQcmVmaXgsICgieG1sIikpOworCisg
ICAgUXVhbGlmaWVkTmFtZSBsYW5nV2l0aFByZWZpeCA9IFhNTE5hbWVzOjpsYW5nQXR0cjsKKyAg
ICBsYW5nV2l0aFByZWZpeC5zZXRQcmVmaXgoeG1sUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChsYW5nV2l0aFByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
WE1MTmFtZXM6OmxhbmdBdHRyKTsKKworICAgIFF1YWxpZmllZE5hbWUgc3BhY2VXaXRoUHJlZml4
ID0gWE1MTmFtZXM6OnNwYWNlQXR0cjsKKyAgICBzcGFjZVdpdGhQcmVmaXguc2V0UHJlZml4KHht
bFByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoc3BhY2VXaXRoUHJlZml4KTsK
KyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChYTUxOYW1lczo6c3BhY2VBdHRyKTsKK30KIAog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMYW5nU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CisgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4m
KTsKIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9sYW5nOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApA
QCAtNTQsMzEgKzU1LDY3IEBAIFBhc3NSZWZQdHI8U1ZHTGluZUVsZW1lbnQ+IFNWR0xpbmVFbGVt
ZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0xpbmVFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTGluZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFu
Z1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAg
ICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6eDFBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OngyQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5
MUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eTJBdHRy
KTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5h
bWUpOworfQorCiB2b2lkIFNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRy
KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAg
ICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp4MUF0dHIpIHsKICAgICAgICAgc2V0WDFCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0
aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eTFBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKSB7CiAgICAgICAgIHNldFkxQmFzZVZhbHVl
KFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIpIHsKICAgICAg
ICAgc2V0WDJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUo
KSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eTJBdHRyKSB7CiAgICAgICAgIHNldFkyQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVp
Z2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZH
TGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05hbWVz
Ojp4MUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnkxQXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eDJBdHRyCkBAIC0xMDAsMTUgKzEzNywxNiBAQCB2b2lkIFNWR0xpbmVFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoU1ZH
TGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBp
ZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fCBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxp
ZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0xpbmVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlm
IChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWDEoKTsKICAg
ICAgICAgc3luY2hyb25pemVZMSgpOwpAQCAtMTE2LDIxICsxNTQsNDYgQEAgdm9pZCBTVkdMaW5l
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eQogICAgICAgICBzeW5jaHJvbml6ZVkyKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBT
VkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MUF0dHIpCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp4MUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYMSgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkxQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVkxKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngyQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eDJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWDIoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eTJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZ
MigpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVs
c2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0xpbmVFbGVtZW50OjphdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1l
bnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQo
KTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJMaW5lYXJHcmFkaWVudEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKQEAgLTYxLDU4ICs2
MiwxMDAgQEAgUGFzc1JlZlB0cjxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+IFNWRwogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OngxQXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4MkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6eTFBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnkyQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpIHsKICAgICAgICAgc2V0WDFCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKSB7CiAg
ICAgICAgIHNldFkxQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52
YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp4MkF0dHIpIHsKICAgICAgICAgc2V0WDJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1v
ZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eTJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKSB7CiAgICAgICAgIHNldFkyQmFzZVZhbHVlKFNW
R0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZQotICAg
ICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eDFBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5
MUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngyQXR0cgotICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTJBdHRyKSB7Ci0gICAgICAgIHVwZGF0ZVJlbGF0aXZl
TGVuZ3Roc0luZm9ybWF0aW9uKCk7Ci0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBy
ZW5kZXJlcigpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJk
KHRoaXMpOworICAgIAorICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CiAK
KyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmpl
Y3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgIH0KIH0KIAogdm9pZCBTVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCi17Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAg
ICAgICBzeW5jaHJvbml6ZVgxKCk7CiAgICAgICAgIHN5bmNocm9uaXplWTEoKTsKICAgICAgICAg
c3luY2hyb25pemVYMigpOwogICAgICAgICBzeW5jaHJvbml6ZVkyKCk7CisgICAgICAgIFNWR0dy
YWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0cikKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdHcmFk
aWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MUF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVYMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnkxQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkxKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplWDIoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTJBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp5MkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZMigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwJiBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjcgKzQzLDUzIEBAIFBhc3NSZWZQdHI8
U1ZHTVBhdGhFbGVtZW50PiBTVkdNUGF0aEVsZW0KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R01QYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR01QYXRoRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2
b2lkIFNWR01QYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAg
ICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQogICAgICAgICByZXR1cm47Ci0gICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55
UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQo
KTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVIcmVmKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR01QYXRoRWxl
bWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01QYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdNUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTVBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDkgQEAgcHVibGlj
OgogICAgIAogcHJpdmF0ZToKICAgICBTVkdNUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7Ci0gICAgCisKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdl
ZCBtaXNzaW5nLgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudElu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBAIC03OCw3MSArNzksOTkgQEAgQWZm
aW5lVHJhbnNmb3JtIFNWR01hcmtlckVsZW1lbnQ6OnZpZXdCbwogICAgIHJldHVybiBTVkdGaXRU
b1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld0JveCgpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCksIHZpZXdXaWR0aCwgdmlld0hlaWdodCk7CiB9CiAKK2Jvb2wgU1ZHTWFya2VyRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
Rml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VyVW5pdHNB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlZlhBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlZllBdHRyKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXJrZXJIZWln
aHRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9yaWVu
dEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhh
dHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlclVu
aXRzQXR0cikgewogICAgICAgICBTVkdNYXJrZXJVbml0c1R5cGUgcHJvcGVydHlWYWx1ZSA9IFNW
R1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwog
ICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRNYXJrZXJVbml0
c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cmVmWEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZYQXR0cikgewogICAgICAgICBzZXRSZWZYQmFz
ZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZZQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKSB7CiAgICAg
ICAgIHNldFJlZllCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjptYXJrZXJXaWR0aEF0dHIpIHsKICAgICAgICAgc2V0TWFya2VyV2lkdGhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRy
KSB7CiAgICAgICAgIHNldE1hcmtlckhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
Om9yaWVudEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpIHsKICAgICAgICAgU1ZHQW5nbGUgYW5nbGU7
CiAgICAgICAgIFNWR01hcmtlck9yaWVudFR5cGUgb3JpZW50VHlwZSA9IFNWR1Byb3BlcnR5VHJh
aXRzPFNWR01hcmtlck9yaWVudFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlLCBhbmdsZSk7CiAgICAg
ICAgIGlmIChvcmllbnRUeXBlID4gMCkKICAgICAgICAgICAgIHNldE9yaWVudFR5cGVCYXNlVmFs
dWUob3JpZW50VHlwZSk7CiAgICAgICAgIGlmIChvcmllbnRUeXBlID09IFNWR19NQVJLRVJfT1JJ
RU5UX0FOR0xFKQogICAgICAgICAgICAgc2V0T3JpZW50QW5nbGVCYXNlVmFsdWUoYW5nbGUpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGRvY3VtZW50KCksIGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHTWFya2VyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGJvb2wgaW52YWxpZGF0ZUNsaWVudHMg
PSBmYWxzZTsKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFs
aWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cmVmWEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlZllBdHRyCiAgICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpIHsKLSAgICAgICAgaW52YWxp
ZGF0ZUNsaWVudHMgPSB0cnVlOworICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFy
a2VySGVpZ2h0QXR0cikKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24o
KTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChpbnZhbGlkYXRlQ2xpZW50
cwotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyCi0gICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpvcmllbnRBdHRyCi0gICAgICAgIHx8IFNWR0xh
bmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAg
fHwgU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8
fCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAo
UmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5l
ZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVk
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1hcmtlclVuaXRzKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplUmVmWCgpOwpAQCAtMTUyLDMwICsxODEsNTggQEAgdm9pZCBTVkdN
YXJrZXJFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcgogICAgICAgICBzeW5jaHJvbml6ZU9yaWVu
dEFuZ2xlKCk7CiAgICAgICAgIHN5bmNocm9uaXplT3JpZW50VHlwZSgpOwogICAgICAgICBzeW5j
aHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICAgICAgc3luY2hyb25pemVW
aWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworICAg
ICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7Cisg
ICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om1hcmtlclVuaXRzQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om1hcmtlclVuaXRzQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZU1hcmtlclVuaXRzKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyZWZYQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVJlZlgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cmVmWUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUmVmWSgp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1h
cmtlcldpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZU1hcmtlcldpZHRoKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlckhl
aWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVNYXJrZXJIZWlnaHQoKTsKLSAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JpZW50QXR0cikgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcmllbnRBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplT3JpZW50QW5nbGUoKTsKICAgICAgICAgc3luY2hyb25pemVPcmll
bnRUeXBlKCk7Ci0gICAgfSBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsK
LSAgICBlbHNlIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVBy
ZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChT
VkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTWFya2VyRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9v
bCBuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIK
KyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIK
QEAgLTYzLDg4ICs2NCwxNTQgQEAgUGFzc1JlZlB0cjxTVkdNYXNrRWxlbWVudD4gU1ZHTWFza0Vs
ZW1lbgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTWFza0VsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAorYm9vbCBTVkdNYXNrRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAg
aWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdM
YW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjptYXNrVW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR01hc2tFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFza1VuaXRzQXR0cikgewogICAgICAgICBTVkdV
bml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAg
ICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0TWFza1VuaXRzQmFz
ZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFza0NvbnRlbnRVbml0c0F0dHIp
IHsKICAgICAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZH
UHJvcGVydHlUcmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0
ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAg
IHNldE1hc2tDb250ZW50VW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgp
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlB
dHRyKSB7CiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQs
IGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewog
ICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0
dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR01hc2tFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0
eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgYm9vbCBpbnZhbGlkYXRlQ2xpZW50cyA9IGZhbHNlOworICAgIFNWR0VsZW1lbnRJbnN0
YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRo
QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewotICAg
ICAgICBpbnZhbGlkYXRlQ2xpZW50cyA9IHRydWU7CisgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1h
dGlvbigpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsK
LSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGludmFsaWRhdGVD
bGllbnRzCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNrVW5pdHNBdHRyCi0g
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cgotICAg
ICAgICB8fCBTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwg
U1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAg
ICAgICB8fCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3Qt
PnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lkIFNWR01hc2tFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0
eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0
dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVNYXNrVW5pdHMoKTsK
ICAgICAgICAgc3luY2hyb25pemVNYXNrQ29udGVudFVuaXRzKCk7CiAgICAgICAgIHN5bmNocm9u
aXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKKyAgICAgICAgc3luY2hyb25pemVXaWR0
aCgpOworICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXpl
UHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5
bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIp
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNrVW5pdHNBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplTWFza1VuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZU1hc2tDb250ZW50VW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgeworICAgICAgICBzeW5j
aHJvbml6ZVdpZHRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAgICAgc3luY2hyb25pemVIZWlnaHQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdNYXNrRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5
cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wg
bmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
KyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmly
dHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdQYXRoUGFyc2VyRmFjdG9yeS5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdBcmMuaCIKQEAgLTE4
MiwzMSArMTgzLDU5IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW8K
ICAgICByZXR1cm4gU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OmNyZWF0ZSh0
aGlzLCByb2xlLCB4LCB5KTsKIH0KIAorYm9vbCBTVkdQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAg
ICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmli
dXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRl
ZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjpkQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdQYXRoRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkQXR0cikg
ewogICAgICAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJG
YWN0b3J5OjpzZWxmKCk7CiAgICAgICAgIGlmICghZmFjdG9yeS0+YnVpbGRTVkdQYXRoQnl0ZVN0
cmVhbUZyb21TdHJpbmcoYXR0ci0+dmFsdWUoKSwgbV9wYXRoQnl0ZVN0cmVhbSwgVW5hbHRlcmVk
UGFyc2luZykpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgZD1cIiIgKyBhdHRyLT52YWx1ZSgpICsgIlwi
Iik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhB
dHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cikgewogICAgICAgICBzZXRQYXRoTGVuZ3RoQmFzZVZh
bHVlKGF0dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKLSAgICAgICAgaWYgKHBhdGhMZW5ndGhCYXNl
VmFsdWUoKSA8IDAuMGYpCisgICAgICAgIGlmIChwYXRoTGVuZ3RoQmFzZVZhbHVlKCkgPCAwKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0aCBhdHRyaWJ1dGUgPHBhdGhMZW5ndGg+IGlzIG5v
dCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdQYXRoRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
ICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwLDQzICsyNDksNTEgQEAgdm9pZCBTVkdQYXRoRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAgICAgICAgICAgbV9wYXRoU2VnTGlzdC52YWx1
ZSA9IG5ld0xpc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsK
LSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihyZW5kZXJlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHJl
bmRlcmVyKQorICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwogICAg
IH0KIAotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNl
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAocmVuZGVy
ZXIpCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVz
b3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCiB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRCgpOwogICAgICAgICBzeW5jaHJvbml6ZVBhdGhMZW5ndGgoKTsKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpz
eW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRBdHRy
KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVBhdGhMZW5ndGgoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN5bmNo
cm9uaXplRCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDYgKzEwMSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wg
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQYXR0ZXJuQXR0cmlidXRlcy5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnQuaCIKQEAgLTcxLDg1ICs3MiwxMTYgQEAgUGFzc1JlZlB0cjxTVkdQYXR0ZXJuRWxlbWVu
dD4gU1ZHUGF0dGVybgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUGF0dGVybkVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdQYXR0ZXJuRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9y
dGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAg
ICAgICAgU1ZHRml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0
dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cGF0
dGVyblVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp3aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6aGVpZ2h0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldFBhdHRl
cm5Vbml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5D
b250ZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJv
cGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+
Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+
IDApCiAgICAgICAgICAgICBzZXRQYXR0ZXJuQ29udGVudFVuaXRzQmFzZVZhbHVlKHByb3BlcnR5
VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXR0ZXJu
VHJhbnNmb3JtQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgU1ZH
VHJhbnNmb3JtTGlzdCBuZXdMaXN0OwogICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlVHJhbnNmb3JtQXR0cmlidXRlKG5ld0xpc3QsIGF0dHItPnZhbHVlKCkpKQogICAgICAgICAg
ICAgbmV3TGlzdC5jbGVhcigpOwogCiAgICAgICAgIGRldGFjaEFuaW1hdGVkUGF0dGVyblRyYW5z
Zm9ybUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldFBhdHRlcm5UcmFu
c2Zvcm1CYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdM
ZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHNldFlC
YXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lk
dGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
V2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkudmFs
dWUodGhpcykgPCAwLjApCisgICAgICAgIGlmICh3aWR0aEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMp
IDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVw
b3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHBhdHRlcm4gYXR0cmlidXRlIDx3aWR0aD4g
aXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAg
ICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAo
aGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBm
b3IgcGF0dGVybiBhdHRyaWJ1dGUgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdG
aXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0dHIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdQ
YXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGJvb2wgaW52YWxpZGF0ZUNsaWVudHMgPSBmYWxz
ZTsKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlv
bkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIK
ICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyCiAgICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpIHsKLSAgICAgICAgaW52YWxpZGF0ZUNsaWVudHMgPSB0cnVlOworICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKICAgICAgICAgdXBkYXRl
UmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdCA9IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybjsK
IAotICAgIGlmIChpbnZhbGlkYXRlQ2xpZW50cwotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cGF0dGVyblVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cGF0dGVybkNvbnRlbnRVbml0c0F0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnBhdHRlcm5UcmFuc2Zvcm1BdHRyCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRml0VG9WaWV3Qm94Ojppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5k
ZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lk
IFNWR1BhdHRlcm5FbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQotewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkoYXR0ck5hbWUpOwotCit7ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplUGF0dGVyblVuaXRzKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
UGF0dGVybkNvbnRlbnRVbml0cygpOwpAQCAtMTU5LDM3ICsxOTEsNzQgQEAgdm9pZCBTVkdQYXR0
ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZQogICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7
CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAg
ICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CiAgICAgICAgIHN5bmNocm9u
aXplSHJlZigpOworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGll
cyhhdHRyTmFtZSk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhp
cywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKQorICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVBhdHRlcm5Vbml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpw
YXR0ZXJuQ29udGVudFVuaXRzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVQYXR0ZXJuQ29udGVudFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVBhdHRlcm5UcmFuc2Zvcm0oKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp2aWV3Qm94QXR0cikKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQotICAg
ICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKLSAgICBlbHNlIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVy
ZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVI
cmVmKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0
aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHUGF0
dGVybkVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAgICAgdmlydHVhbCBib29sIG5lZWRzUGVuZGluZ1Jl
c291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgpAQCAtNDIsOCArNDMsMjUgQEAgU1ZH
UG9seUVsZW1lbnQ6OlNWR1BvbHlFbGVtZW50KGNvbnN0IFF1YQogewogfQogCitib29sIFNWR1Bv
bHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4s
IHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3Vw
cG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBvaW50c0F0dHIpOwor
ICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7
Cit9CisKIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cG9pbnRzQXR0cikgewogICAgICAgICBTVkdQb2ludExpc3QgbmV3TGlzdDsKQEAg
LTU0LDIxICs3MiwyOCBAQCB2b2lkIFNWR1BvbHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
CiAgICAgICAgICAgICBsaXN0LT5kZXRhY2hMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwog
CiAgICAgICAgIG1fcG9pbnRzLnZhbHVlID0gbmV3TGlzdDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRh
dGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRl
Q2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04Miw5ICsxMDcs
MTIgQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdQ
b2x5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5oCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7IAogICAgIHZpcnR1YWwg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdG9w
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgpAQCAtNjMsNjYgKzY0LDExNCBA
QCBQYXNzUmVmUHRyPFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudD4gU1ZHCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAorYm9vbCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Y3hBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OmN5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpmeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6ZnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnJBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFp
bnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHIt
Pm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBzZXRDeEJhc2VWYWx1ZShTVkdMZW5n
dGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpIHsKICAgICAgICAgc2V0Q3lC
YXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyQXR0cikg
ewogICAgICAgICBzZXRSQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlT3RoZXIsIGF0dHIt
PnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKHJCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkK
KyAgICAgICAgaWYgKHJCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZl
IHZhbHVlIGZvciByYWRpYWwgZ3JhZGllbnQgcmFkaXVzIDxyPiBpcyBub3QgYWxsb3dlZCIpOwot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmeEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmeEF0
dHIpIHsKICAgICAgICAgc2V0RnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwg
YXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
ZnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6ZnlBdHRyKSB7CiAgICAgICAgIHNldEZ5QmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdH
cmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6Y3hBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIKLSAg
ICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ4QXR0cgotICAgICAgICB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6ZnlBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpy
QXR0cikgewotICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQo
dGhpcyk7CisgICAgCisgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKICAg
ICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAgICAg
ICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KKyAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0
KHRydWUpOwotICAgIH0KIH0KIAogdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
R3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlm
IChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3goKTsKICAg
ICAgICAgc3luY2hyb25pemVDeSgpOwogICAgICAgICBzeW5jaHJvbml6ZUZ4KCk7CiAgICAgICAg
IHN5bmNocm9uaXplRnkoKTsKICAgICAgICAgc3luY2hyb25pemVSKCk7CisgICAgICAgIFNWR0dy
YWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpjeEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjeEF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVDeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpjeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmN5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRngoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnlBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpm
eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVGeSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
QXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAt
NTcsNDMgKzU4LDg3IEBAIFBhc3NSZWZQdHI8U1ZHUmVjdEVsZW1lbnQ+IFNWR1JlY3RFbGVtZW4K
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1JlY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKK2Jvb2wgU1ZHUmVjdEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1Nw
YWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAg
ICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnhBdHRyKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJ5QXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdSZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4
QXR0cikgewogICAgICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgs
IGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVu
Z3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cnhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAgc2V0UnhCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAg
ICBpZiAocnhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHJ4QmFz
ZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcmVjdCA8
cng+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnJ5QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAgICAgICAgIHNldFJ5QmFzZVZhbHVlKFNW
R0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmIChy
eUJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAocnlCYXNlVmFsdWUo
KS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0IDxyeT4gaXMg
bm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAo
d2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHdpZHRoQmFz
ZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcmVjdCA8
d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVp
Z2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7
Ci0gICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAg
ICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUg
dmFsdWUgZm9yIHJlY3QgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAo
U1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGlu
dmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUg
PSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIKQEAgLTExNywxNSArMTYyLDE2IEBA
IHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpIAotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1JlY3RF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKQEAgLTEzNSwyNSAr
MTgxLDU2IEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkKICAgICAg
ICAgc3luY2hyb25pemVSeSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlz
LCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5j
aHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVdp
ZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omhl
aWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVSeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeUF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJ5QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ5KCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3Rz
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hy
b25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCYgU1ZHUmVjdEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKICNpbmNsdWRlICJTTUlMVGltZUNvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCkBAIC0yOTksOSArMzAwLDcgQEAg
c3RhdGljIHZvaWQgdXBkYXRlQ1NTRm9yQXR0cmlidXRlKFNWR1NWRwogfQogCiB2b2lkIFNWR1NW
R0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCi17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7Ci0KK3sgCiAgICAgLy8gRklYTUU6IFVnbHksIHVnbHkgaGFjayB0byBhcm91bmQgdGhhdCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZSBpcyBub3QgY2FsbGVkCiAgICAgLy8gd2hlbiBzdmcud2lkdGgu
YmFzZVZhbHVlID0gMTAwIGlzIGV2YWx1YXRlZC4KICAgICAvLyBUaHVzIHRoZSBDU1MgbGVuZ3Ro
IHZhbHVlIGZvciB3aWR0aCBpcyBub3QgdXBkYXRlZCwgYW5kIHdpZHRoKCkgY29tcHV0ZUxvZ2lj
YWxXaWR0aCgpCkBAIC0zMjQsMzMgKzMyMywzMyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9u
KCk7CiAgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0
ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcmVu
ZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHVwZGF0ZVJlbGF0aXZlTGVuZ3Ro
cwogICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCiAg
ICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1pvb21BbmRQYW46OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKCkpOworICAgICAgICB8fCBT
Vkdab29tQW5kUGFuOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBpZiAo
cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFO
YW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgp
OwogICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0
KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAg
ICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFz
cGVjdFJhdGlvKCk7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0
aWVzKGF0dHJOYW1lKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0
aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNjQsMTIgKzM2
MywxMiBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoCiAgICAgICAg
IHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCiAgICAgICAgIHN5bmNocm9uaXpl
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp2aWV3Qm94QXR0cikKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQot
ICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICBlbHNlIGlmIChT
VkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSAKKyAgICAgICAgU1ZH
Rml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOwogICAgIGVsc2Ug
aWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKICAgICAgICAgU1ZHVGVz
dHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgZWxzZQorICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKIH0K
IAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1NWR0VsZW1lbnQ6OmF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAKQEAgLTQ5LDMxICs1MCw2MSBAQCBQYXNz
UmVmUHRyPFNWR1NjcmlwdEVsZW1lbnQ+IFNWR1NjcmlwdEVsCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTVkdTY3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBpbnNlcnRlZEJ5UGFyc2Vy
LCBmYWxzZSkpOwogfQogCitib29sIFNWR1NjcmlwdEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOwor
ICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklS
ZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKEhU
TUxOYW1lczo6b25lcnJvckF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKICAgICAgICAgc2V0VHlwZShhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpvbmVycm9yQXR0cikKLSAgICAgICAgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3JlYXRlQXR0
cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6Om9uZXJyb3JBdHRyKSB7
CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJk
KHRoaXMpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0ciB8fCBhdHRy
TmFtZSA9PSBIVE1MTmFtZXM6Om9uZXJyb3JBdHRyKQorICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAo
U1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBo
YW5kbGVTb3VyY2VBdHRyaWJ1dGUoaHJlZigpKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIC8vIEhhbmRsZSBkeW5hbWljIHVw
ZGF0ZXMgb2YgdGhlICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyBhdHRyaWJ1dGUuIE9ubHkg
cG9zc2libGUgY2FzZTogY2hhbmdpbmcgZnJvbSAndHJ1ZScgdG8gJ2ZhbHNlJwogICAgICAgICAv
LyBjYXVzZXMgYW4gaW1tZWRpYXRlIGRpc3BhdGNoIG9mIHRoZSBTVkdMb2FkIGV2ZW50LiBJZiB0
aGUgYXR0cmlidXRlIHZhbHVlIHdhcyAnZmFsc2UnIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHNjcmlw
dCBlbGVtZW50CiAgICAgICAgIC8vIGluIHRoZSBkb2N1bWVudCwgdGhlIFNWR0xvYWQgZXZlbnQg
aGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkLgpAQCAtODMsMjMgKzExNCwzNyBAQCB2b2lkIFNW
R1NjcmlwdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nCiAKICAgICAgICAgICAgIHNlbmRTVkdM
b2FkRXZlbnRJZlBvc3NpYmxlKCk7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfSAgIAorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCYgU1ZHU2NyaXB0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdTY3JpcHRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwg
Ym9vbCBhbHJlYWR5U3RhcnRlZCk7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdHcmFkaWVudFN0
b3AuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKQEAgLTQ3LDM1ICs0OCw3MiBAQCBQYXNzUmVmUHRyPFNWR1N0b3BFbGVt
ZW50PiBTVkdTdG9wRWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTdG9wRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1N0b3BFbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpvZmZzZXRBdHRyKTsKKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
U3RvcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpvZmZzZXRBdHRy
KSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgICAg
ICBpZiAodmFsdWUuZW5kc1dpdGgoIiUiKSkKICAgICAgICAgICAgIHNldE9mZnNldEJhc2VWYWx1
ZSh2YWx1ZS5sZWZ0KHZhbHVlLmxlbmd0aCgpIC0gMSkudG9GbG9hdCgpIC8gMTAwLjBmKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQo
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU3RvcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwog
CiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTdG9w
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgeworICAgICAgICBzeW5jaHJvbml6
ZU9mZnNldCgpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9
PSBhbnlRTmFtZSgpIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKQorICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R1N0b3BFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1N0b3BFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTUgKzg2LDMzIEBAIHZvaWQgU1ZHU3R5bGVFbGVt
ZW50OjpzZXRUaXRsZShjb25zdCBBdG8KICAgICBzZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRpdGxl
QXR0ciwgdGl0bGUsIGVjKTsKIH0KIAorYm9vbCBTVkdTdHlsZUVsZW1lbnQ6OmlzU3VwcG9ydGVk
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywg
KCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBT
VkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0aXRsZUF0dHIpOwor
ICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7
Cit9CisKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGl0bGVBdHRy
ICYmIG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOwot
ICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp0aXRsZUF0dHIpIHsKKyAgICAgICAgaWYgKG1fc2hlZXQpCisgICAg
ICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDks
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKKyAgICBib29sIGlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlz
aW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTcsMTAgKzI5Nyw5IEBAIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6
bWFwVG9FbnRyeShjb25zdCAKIAogdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUgPSBhdHRyLT5uYW1lKCk7CiAgICAgLy8gTk9URTogQW55IHN1YmNsYXNzIHdoaWNoIG92
ZXJyaWRlcyBwYXJzZU1hcHBlZEF0dHJpYnV0ZSBmb3IgYSBwcm9wZXJ0eSBoYW5kbGVkIGJ5CiAg
ICAgLy8gY3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUgd2lsbCBhbHNvIGhhdmUgdG8g
b3ZlcnJpZGUgbWFwVG9FbnRyeSB0byBkaXNhYmxlIHRoZSBkZWZhdWx0IGVTVkcgbWFwcGluZwot
ICAgIGludCBwcm9wSWQgPSBTVkdTdHlsZWRFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0
cmlidXRlTmFtZShhdHRyTmFtZSk7CisgICAgaW50IHByb3BJZCA9IFNWR1N0eWxlZEVsZW1lbnQ6
OmNzc1Byb3BlcnR5SWRGb3JTVkdBdHRyaWJ1dGVOYW1lKGF0dHItPm5hbWUoKSk7CiAgICAgaWYg
KHByb3BJZCA+IDApIHsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgcHJvcElkLCBhdHRy
LT52YWx1ZSgpKTsKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwpAQCAtMzExLDExICsz
MTAsMTMgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIC8v
IHRoZSBjbGFzc05hbWUgaGVyZS4gIHN2Z0F0dHJpYnV0ZUNoYW5nZWQgYWN0dWFsbHkgY2F1c2Vz
IHRoZSByZXN1bHRpbmcKICAgICAvLyBzdHlsZSB1cGRhdGVzIChpbnN0ZWFkIG9mIFN0eWxlZEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKS4gV2UgZG9uJ3QKICAgICAvLyB0ZWxsIFN0eWxl
ZEVsZW1lbnQgYWJvdXQgdGhlIGNoYW5nZSB0byBhdm9pZCBwYXJzaW5nIHRoZSBjbGFzcyBsaXN0
IHR3aWNlCi0gICAgaWYgKGF0dHJOYW1lLm1hdGNoZXMoSFRNTE5hbWVzOjpjbGFzc0F0dHIpKQor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIpIHsKICAgICAgICAg
c2V0Q2xhc3NOYW1lQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UKLSAgICAgICAg
Ly8gaWQgaXMgaGFuZGxlZCBieSBTdHlsZWRFbGVtZW50IHdoaWNoIFNWR0VsZW1lbnQgaW5oZXJp
dHMgZnJvbQotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGlkIGlzIGhhbmRsZWQgYnkgU3R5bGVk
RWxlbWVudCB3aGljaCBTVkdFbGVtZW50IGluaGVyaXRzIGZyb20KKyAgICBTVkdFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAogYm9vbCBTVkdTdHlsZWRFbGVtZW50Ojpp
c0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMzI1LDI4
ICszMjYsMzEgQEAgYm9vbCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKAogCiB2
b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaW50IHByb3BJZCA9IFNWR1N0eWxlZEVsZW1lbnQ6OmNzc1Byb3BlcnR5
SWRGb3JTVkdBdHRyaWJ1dGVOYW1lKGF0dHJOYW1lKTsKKyAgICBpZiAocHJvcElkID4gMCkgewor
ICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1l
bnQodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUubWF0
Y2hlcyhIVE1MTmFtZXM6OmNsYXNzQXR0cikpCisgICAgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1l
czo6Y2xhc3NBdHRyKSB7CiAgICAgICAgIGNsYXNzQXR0cmlidXRlQ2hhbmdlZChjbGFzc05hbWUo
KSk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7CisgICAgICAgIFNW
R0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVudCh0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwogICAg
ICAgICAvLyBOb3RpZnkgcmVzb3VyY2VzIGFib3V0IGlkIGNoYW5nZXMsIHRoaXMgaXMgaW1wb3J0
YW50IGFzIHdlIGNhY2hlIHJlc291cmNlcyBieSBpZCBpbiBTVkdEb2N1bWVudEV4dGVuc2lvbnMK
ICAgICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkK
ICAgICAgICAgICAgIG9iamVjdC0+dG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpLT5pZENo
YW5nZWQoKTsKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW5zdGFu
Y2VzT2ZFbGVtZW50KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgLy8gSW52
YWxpZGF0ZSBhbGwgU1ZHRWxlbWVudEluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdXMKLSAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQodGhpcyk7
CiB9CiAKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpIHx8IGF0
dHJOYW1lLm1hdGNoZXMoSFRNTE5hbWVzOjpjbGFzc0F0dHIpKQorICAgIGlmIChhdHRyTmFtZSA9
PSBhbnlRTmFtZSgpIHx8IGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y2xhc3NBdHRyKQogICAgICAg
ICBzeW5jaHJvbml6ZUNsYXNzTmFtZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY5LDQ0ICs3MCw3NCBAQCBBZmZpbmVU
cmFuc2Zvcm0qIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFCiAgICAgcmV0dXJuIG1fc3VwcGxlbWVu
dGFsVHJhbnNmb3JtLmdldCgpOwogfQogCitib29sIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBv
cnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5
KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0cmFuc2Zvcm1B
dHRyKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7
Cit9CisKIHZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoU1ZHVHJhbnNmb3JtYWJsZTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikgewogICAgICAg
ICBTVkdUcmFuc2Zvcm1MaXN0IG5ld0xpc3Q7CiAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJs
ZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobmV3TGlzdCwgYXR0ci0+dmFsdWUoKSkpCiAgICAg
ICAgICAgICBuZXdMaXN0LmNsZWFyKCk7CiAgICAgICAgIGRldGFjaEFuaW1hdGVkVHJhbnNmb3Jt
TGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VHJhbnNmb3JtQmFzZVZh
bHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSAKLSAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIGlmICghU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKIAogICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKICAgICBp
ZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgb2JqZWN0LT5zZXROZWVkc1RyYW5z
Zm9ybVVwZGF0ZSgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ob2JqZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKKyAgICAgICAgb2JqZWN0LT5zZXROZWVkc1RyYW5zZm9y
bVVwZGF0ZSgpOworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKG9iamVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgeworICAg
ICAgICBzeW5jaHJvbml6ZVRyYW5zZm9ybSgpOworICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpIHx8IFNWR1RyYW5zZm9ybWFi
bGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplVHJhbnNmb3JtKCk7Ci19CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLWJvb2wg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBTVkdFbGVtZW50KiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6bmVhcmVzdFZpZXdw
b3J0RWxlbWVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsOCArNDcsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRC
Qm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKIAotICAg
IGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0KICAgICAvLyAi
YmFzZSBjbGFzcyIgbWV0aG9kcyBmb3IgYWxsIHRoZSBlbGVtZW50cyB3aGljaCByZW5kZXIgYXMg
cGF0aHMKICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3QgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIGNvbnN0OwpAQCAtNTcsNiArNTUsNyBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3ltYm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBA
CiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdTeW1ib2xFbGVtZW50LmgiCiAKKyNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NCw4ICs0NSwyNCBAQCBQYXNzUmVmUHRyPFNW
R1N5bWJvbEVsZW1lbnQ+IFNWR1N5bWJvbEVsCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdT
eW1ib2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHU3ltYm9sRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
Rml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChTVkdMYW5nU3BhY2U6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAt
NTMsNDAgKzcwLDQ4IEBAIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIK
ICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgp
LCBhdHRyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52
YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKKyAgICAvLyBFdmVyeSBv
dGhlciBwcm9wZXJ0eSBjaGFuZ2UgaXMgaWdub3JlZC4KICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1h
dGlvbigpOwogfQogCiB2b2lkIFNWR1N5bWJvbEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55
UU5hbWUoKSkgewotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKLSAg
ICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAg
ICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAgICAgIFNWR0ZpdFRvVmll
d0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0
aW9BdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIpCi0gICAgICAgIHN5bmNo
cm9uaXplVmlld0JveCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVs
c2UgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAg
ICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVB
c3BlY3RSYXRpbygpOwotICAgIH0gCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
U1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1N5bWJvbEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZH
U3ltYm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAiU1ZH
RWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgpAQCAtNTYsMzMgKzU3LDY4IEBAIHZvaWQgU1ZH
VFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXgKICAgICBzZXRUZXh0Q29udGVudCh0ZXh0
Q29udGVudCwgaWdub3JlKTsKIH0KIAorYm9vbCBTVkdUUmVmRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBTVkdV
UklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQor
CiB2b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgdXBkYXRlUmVmZXJlbmNlZFRl
eHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB2b2lkIFNWR1RSZWZFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25H
dWFyZCh0aGlzKTsKIAogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RSZWZFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgIGlmIChh
dHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAg
ICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVFJlZkVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5oCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHVFJlZkVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1Rlc3RzLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVz
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDEzIEBAIGJvb2wgU1ZHVGVzdHM6
OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZShjb24KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBT
VkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBz
dXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjpyZXF1aXJlZEZlYXR1cmVzQXR0cik7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OnJlcXVpcmVkRXh0ZW5zaW9uc0F0dHIpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpzeXN0ZW1MYW5ndWFnZUF0dHIpOworfQorCiB2b2lkIFNWR1Rlc3Rz
OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFt
ZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAg
ICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCisgICAgdm9p
ZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKICAgICBi
b29sIGhhbmRsZUF0dHJpYnV0ZUNoYW5nZShjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKFNWR0VsZW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2UuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1RleHRRdWVyeS5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCkBAIC0xNzksNjIgKzE4MCwxMDgg
QEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogICAgIHNlbGVjdGlv
bi0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCkpOwogfQogCitib29s
IFNWR1RleHRDb250ZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVk
QXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjps
ZW5ndGhBZGp1c3RBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnRleHRMZW5ndGhBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpIHsKICAg
ICAgICAgU1ZHTGVuZ3RoQWRqdXN0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFp
dHM8U1ZHTGVuZ3RoQWRqdXN0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAg
ICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldExlbmd0aEFkanVzdEJh
c2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6dGV4dExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKSB7CiAgICAgICAg
IG1fdGV4dExlbmd0aC52YWx1ZSA9IFNWR0xlbmd0aChMZW5ndGhNb2RlT3RoZXIsIGF0dHItPnZh
bHVlKCkpOwogICAgICAgICBpZiAobV90ZXh0TGVuZ3RoLnZhbHVlLnZhbHVlKHRoaXMpIDwgMCkK
ICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJy
b3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHRleHQgYXR0cmlidXRlIDx0ZXh0TGVuZ3RoPiBpcyBu
b3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChT
VkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7Ci0gICAgICAgICAgICBp
ZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMoWE1MTmFtZXM6OnNwYWNlQXR0cikpIHsKLSAgICAgICAg
ICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcHJlc2VydmVT
dHJpbmcsICgicHJlc2VydmUiKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXR0ci0+dmFsdWUo
KSA9PSBwcmVzZXJ2ZVN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1ZVByZSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9w
ZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlTm93cmFwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKKyAgICAgICAgaWYgKGF0dHItPm5hbWUoKS5t
YXRjaGVzKFhNTE5hbWVzOjpzcGFjZUF0dHIpKSB7CisgICAgICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcHJlc2VydmVTdHJpbmcsICgicHJlc2VydmUiKSk7
CisKKyAgICAgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09IHByZXNlcnZlU3RyaW5nKQorICAg
ICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2hpdGVTcGFjZSwg
Q1NTVmFsdWVQcmUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVOb3dyYXApOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RleHRDb250ZW50
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9u
aXplTGVuZ3RoQWRqdXN0KCk7CiAgICAgICAgIHN5bmNocm9uaXplVGV4dExlbmd0aCgpOwogICAg
ICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgU1ZH
VGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Omxlbmd0aEFkanVzdEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsZW5n
dGhBZGp1c3RBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTGVuZ3RoQWRqdXN0KCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0ZXh0TGVuZ3Ro
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVRleHRMZW5ndGgoKTsKLSAgICBlbHNlIGlmIChT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6
ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rl
c3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlk
YXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGlmIChTVkdUZXN0czo6
aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjQyLDEyICsyODksNyBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmli
dXRlCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikKICAgICAg
ICAgbV9zcGVjaWZpZWRUZXh0TGVuZ3RoID0gbV90ZXh0TGVuZ3RoLnZhbHVlOwogCi0gICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0ZXh0
TGVuZ3RoQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGVuZ3RoQWRqdXN0
QXR0cikKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkp
CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3Vy
Y2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiAr
NjUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiU1ZHVFNwYW5FbGVtZW50LmgiCkBAIC00OCwxNyArNDksMzIgQEAgUGFzc1JlZlB0cjxTVkdU
ZXh0RWxlbWVudD4gU1ZHVGV4dEVsZW1lbgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVGV4
dEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdUZXh0RWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHJhbnNmb3JtQXR0cik7
CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQor
CiB2b2lkIFNWR1RleHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7Ci0gICAgaWYgKFNWR1RyYW5zZm9ybWFibGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ci0+
bmFtZSgpKSkgeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkg
eworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCBu
ZXdMaXN0OwogICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0
cmlidXRlKG5ld0xpc3QsIGF0dHItPnZhbHVlKCkpKQogICAgICAgICAgICAgbmV3TGlzdC5jbGVh
cigpOwogCiAgICAgICAgIGRldGFjaEFuaW1hdGVkVHJhbnNmb3JtTGlzdFdyYXBwZXJzKG5ld0xp
c3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VHJhbnNmb3JtQmFzZVZhbHVlKG5ld0xpc3QpOwotICAg
IH0gZWxzZQotICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiBTVkdFbGVtZW50KiBTVkdUZXh0RWxlbWVudDo6bmVhcmVzdFZpZXdw
b3J0RWxlbWVudCgpIGNvbnN0CkBAIC0xMjQsMjQgKzE0MCw0NSBAQCBib29sIFNWR1RleHRFbGVt
ZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAKIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKFNWR1RyYW5zZm9ybWFibGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7CiAgICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJl
bmRlcmVyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB2b2lkIFNWR1RleHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplVHJhbnNmb3JtKCk7CisgICAgICAgIFNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkg
fHwgU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVUcmFuc2Zvcm0oKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3Bl
cnR5VHlwZU1hcCYgU1ZHVGV4dEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHVGV4dEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSogc3Vw
cGxlbWVudGFsVHJhbnNmb3JtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBh
dGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBh
dGhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw2
MSArNTEsMTA0IEBAIFBhc3NSZWZQdHI8U1ZHVGV4dFBhdGhFbGVtZW50PiBTVkdUZXh0UGEKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1RleHRQYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkpOwogfQogCitib29sIFNWR1RleHRQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAg
aWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVy
ZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptZXRob2RBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwYWNpbmdBdHRyKTsKKyAg
ICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOwor
fQorCiB2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwot
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cikKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cikg
ewogICAgICAgICBzZXRTdGFydE9mZnNldEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZU90
aGVyLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWV0
aG9kQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6bWV0aG9kQXR0cikgewogICAgICAgICBTVkdUZXh0UGF0aE1ldGhvZFR5
cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1RleHRQYXRoTWV0aG9kVHlw
ZT46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAg
ICAgICAgICAgICBzZXRNZXRob2RCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwYWNpbmdBdHRyKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGFjaW5n
QXR0cikgewogICAgICAgICBTVkdUZXh0UGF0aFNwYWNpbmdUeXBlIHByb3BlcnR5VmFsdWUgPSBT
VkdQcm9wZXJ0eVRyYWl0czxTVkdUZXh0UGF0aFNwYWNpbmdUeXBlPjo6ZnJvbVN0cmluZyh2YWx1
ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldFNwYWNp
bmdCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R1RleHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQg
aW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0YXJ0T2Zmc2V0QXR0cikKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRp
b24oKTsKIAotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGFydE9mZnNldEF0dHIKLSAgICAgICAgfHwgU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKLSAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5k
ZXJlcigpKTsKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQorICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52
YWxpZGF0aW9uKG9iamVjdCk7CiB9CiAKIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBp
ZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVN0YXJ0T2Zm
c2V0KCk7CiAgICAgICAgIHN5bmNocm9uaXplTWV0aG9kKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
U3BhY2luZygpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRB
dHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0
YXJ0T2Zmc2V0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVN0YXJ0T2Zmc2V0KCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1ldGhvZEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptZXRob2RBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplTWV0aG9kKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnNwYWNpbmdBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BhY2luZ0F0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVTcGFjaW5nKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVGV4
dFBhdGhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgpAQCAtNDQsMzUgKzQ1LDY3IEBAIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3NpdGkKIHsKIH0KIAorYm9vbCBTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR4QXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkeUF0dHIpOworICAg
ICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cm90YXRlQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5u
YW1lKCkpKSB7CisgICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBTVkdMZW5ndGhMaXN0IG5ld0xpc3Q7
CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+dmFsdWUoKSwgTGVuZ3RoTW9kZVdpZHRoKTsK
ICAgICAgICAgZGV0YWNoQW5pbWF0ZWRYTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAg
ICAgICAgc2V0WEJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIFNWR0xlbmd0aExp
c3QgbmV3TGlzdDsKICAgICAgICAgbmV3TGlzdC5wYXJzZShhdHRyLT52YWx1ZSgpLCBMZW5ndGhN
b2RlSGVpZ2h0KTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRZTGlzdFdyYXBwZXJzKG5ld0xpc3Qu
c2l6ZSgpKTsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsKICAgICAg
ICAgU1ZHTGVuZ3RoTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHItPnZh
bHVlKCksIExlbmd0aE1vZGVXaWR0aCk7CiAgICAgICAgIGRldGFjaEFuaW1hdGVkRHhMaXN0V3Jh
cHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXREeEJhc2VWYWx1ZShuZXdMaXN0KTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpk
eUF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3RoTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0
LnBhcnNlKGF0dHItPnZhbHVlKCksIExlbmd0aE1vZGVIZWlnaHQpOwogICAgICAgICBkZXRhY2hB
bmltYXRlZER5TGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0RHlCYXNl
VmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnJvdGF0ZUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBu
ZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBk
ZXRhY2hBbmltYXRlZFJvdGF0ZUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAg
IHNldFJvdGF0ZUJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgdXBkYXRlUG9zaXRpb25pbmdWYWx1ZXNJblJlbmRlcmVyKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCkBAIC0xMDEsNyArMTM0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVQ
b3NpdGlvbmluZ1ZhbHUKIAogdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBib29sIHVwZGF0ZVJlbGF0aXZlTGVuZ3RocyA9
IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyCkBAIC0xMjAsNiArMTU4LDggQEAgdm9p
ZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzdmdBdHRyaQogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5n
ZSwgaW50IGNoaWxkQ291bnREZWx0YSkKQEAgLTEzNSwyNyArMTc1LDQ3IEBAIHZvaWQgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2hpbGRyZW4KIAogdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5j
aHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
RHgoKTsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVJvdGF0
ZSgpOworICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cm90YXRlQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cm90YXRlQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVJvdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudDo6ZmlsbFBhc3NlZEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBm
YWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQg
Y2hpbGRDb3VudERlbHRhID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMSArMjA2LDYgQEAgYm9v
bCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dAogICAgIHJldHVybiAhZGVsaW1Q
YXJzZWQ7CiB9CiAKLWJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICByZXR1cm4gYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnRyYW5zZm9ybUF0dHI7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsOCArNDgsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25z
dCB7IHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7IH0KICAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QgPSAwOwotCi0gICAgYm9v
bCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxNSBAQCBTdHJpbmcgU1ZHVVJJUmVmZXJl
bmNlOjpnZXRUYXJnZXQoY29uc3QgCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCit2b2lkIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5h
bWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCB4bGlua1ByZWZpeCwgKCJ4bGluayIpKTsKKyAgICBRdWFsaWZpZWROYW1lIGhy
ZWZXaXRoUHJlZml4ID0gWExpbmtOYW1lczo6aHJlZkF0dHI7CisgICAgaHJlZldpdGhQcmVmaXgu
c2V0UHJlZml4KHhsaW5rUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChocmVm
V2l0aFByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoWExpbmtOYW1lczo6aHJl
ZkF0dHIpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVUklSZWZlcmVuY2UuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAg
ICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQg
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CiAKICAgICBz
dGF0aWMgU3RyaW5nIGdldFRhcmdldChjb25zdCBTdHJpbmcmIHVybCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwzMSArOTgs
NjMgQEAgU1ZHRWxlbWVudEluc3RhbmNlKiBTVkdVc2VFbGVtZW50OjphbmltYQogICAgIHJldHVy
biAwOwogfQogIAorYm9vbCBTVkdVc2VFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAo
c3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdT
cGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0
ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmhlaWdodEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHVXNlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRYQmFzZVZhbHVlKFNW
R0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0
WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3
aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1v
ZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52
YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhp
cykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5y
ZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdXNlIGF0dHJpYnV0ZSA8d2lkdGg+IGlz
IG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAg
IGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKGhl
aWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9y
IHVzZSBhdHRyaWJ1dGUgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNXZWxsRm9ybWVkRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAt
MTQ4LDcgKzE4MCwxMiBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
CiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25H
dWFyZCh0aGlzKTsKIAogICAgIGJvb2wgaXNYWUF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05h
bWVzOjp4QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHI7CiAgICAgYm9vbCBpc1dp
ZHRoSGVpZ2h0QXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0ciB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cjsKQEAgLTE5OCwxNSArMjM1LDE2IEBAIHZv
aWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCgKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
Ci0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CiAgICAgICAgIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdV
c2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKQEAgLTIxNSwy
MyArMjUzLDUxIEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSgKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5
bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2Ug
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdVc2VFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURv
Y3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCwzNyArNDgsNjggQEAgUGFzc1JlZlB0cjxTVkdWaWV3RWxlbWVudD4gU1ZHVmlld0VsZW1l
bgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVmlld0VsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAotdm9pZCBTVkdWaWV3RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQorYm9vbCBTVkdWaWV3RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dmlld1RhcmdldEF0dHIpCi0gICAgICAgIHZpZXdUYXJnZXQoKS5yZXNldChh
dHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpCi0gICAgICAgICAgIHx8IFNW
R0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikKLSAg
ICAgICAgICAgfHwgU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAg
IFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHWm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnZpZXdUYXJnZXRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQogCit2b2lkIFNWR1ZpZXdFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmlld1RhcmdldEF0dHIpIHsKKyAgICAgICAgdmll
d1RhcmdldCgpLnJlc2V0KGF0dHItPnZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1ZpZXdF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25p
emVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0Jv
eCgpOwotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAg
U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAg
ICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dmlld1RhcmdldEF0dHIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsK
LSAgICBlbHNlIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVBy
ZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChT
VkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVmlld0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5oCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHVmlld0VsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICAvLyBGSVhNRTogc3Zn
QXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAko
cmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDExIEBAIGJvb2wgU1ZHWm9vbUFuZFBhbjo6aXNL
bm93bkF0dHJpYnV0ZShjb24KICAgICByZXR1cm4gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Onpvb21B
bmRQYW5BdHRyOwogfQogCit2b2lkIFNWR1pvb21BbmRQYW46OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3sKKyAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6em9vbUFuZFBhbkF0dHIpOworfQorCiBz
dGF0aWMgY29uc3QgVUNoYXIgZGlzYWJsZVtdID0gIHsnZCcsICdpJywgJ3MnLCAnYScsICdiJywg
J2wnLCAnZSd9Owogc3RhdGljIGNvbnN0IFVDaGFyIG1hZ25pZnlbXSA9ICB7J20nLCAnYScsICdn
JywgJ24nLCAnaScsICdmJywgJ3knfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBh
bi5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRl
cyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CiAKICAgICBib29sIHBhcnNlWm9vbUFuZFBhbihj
b25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKTsKIAo=
</data>
<flag name="commit-queue"
          id="87477"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94217</attachid>
            <date>2011-05-20 07:24:59 -0700</date>
            <delta_ts>2011-05-20 08:39:20 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>PerfPatch-v2.diff</filename>
            <type>text/plain</type>
            <size>317837</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAwIEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBzdmdBdHRyaWJ1dGVDaGFuZ2VkL3N5bmNo
cm9uaXplUHJvcGVydHkvcGFyc2VNYXBwZWRBdHRyaWJ1dGUgc2hvdWxkIGJlIG9wdGltaXplZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExODMKKwor
ICAgICAgICBFeGFtcGxlOiByZWN0LnguYmFzZVZhbC52YWx1ZSA9IDEwMDsKKyAgICAgICAgV2hh
dCBoYXBwZW5zOiBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgaXMgaW52b2tlZCB3aXRoICJTVkdOYW1lczo6cmVjdEF0dHIi
IGFzIHBhcmFtZXRlci4KKworICAgICAgICB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorICAgICAgICB7CisgICAg
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgICAgICAvLyBIYW5kbGUgbXkgb3duIGF0dHJpYnV0ZSBjaGFu
Z2VzLi4uCisgICAgICAgIH0KKworICAgICAgICBXZSBhbHdheXMgdHJhdmVyc2UgdGhlIGJhc2Ug
Y2xhc3MgaGllYXJjaHksIHdoZW4gaW52b2tpbmcgc3ZnQXR0cmlidXRlQ2hhbmdlZCAodGhpcyBo
YXMgYSByZWFzb24sIGV4cGxhaW5lZCBiZWxvdyAoKikgKS4KKyAgICAgICAgU3dpdGNoIHRvIGEg
bW9yZSBlZmZpY2llbnQgcGF0dGVybiwgYnkgcHJvdmlkaW5nIGEgImJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOyIgZnVuY3Rpb24gZm9yIGFsbCBTVkcqRWxl
bWVudHMuCisgICAgICAgIEl0IGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHRoZSBwYXJ0aWN1bGFy
IFNWRypFbGVtZW50IGNsYXNzIGhhbmRsZXMgKGJ1dCBub3QgaXRzIHBhcmVudCBjbGFzc2VzIGF0
dHJpYnV0ZXMpLiBGb3IgZXhhbXBsZSBTVkdSZWN0RWxlbWVudAorICAgICAgICBjb250YWlucyB4
L3kvd2lkdGgvaGVpZ2h0L3J4L3J5IGF0dHJpYnV0ZXMsIGFuZCB0aGUgb25lcyBmcm9tIFNWR1Rl
c3RzL1NWR0xhbmdTcGFjZS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICh4bWw6c3BhY2Uv
bGFuZywgZXRjLiksCisgICAgICAgIGJ1dCBub3QgZWcuIHRyYW5zZm9ybSBhcyB0aGF0J3MgaGFu
ZGxlZCBieSB0aGUgcGFyZW50IGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lgor
CisgICAgICAgIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUuY29udGFpbnMoYXR0ck5hbWUpKSB7CisgICAgICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2Uga25vdyBmb3Igc3VyZSBpdCdzIG9uZSBvZiBvdXIg
YXR0cmlidXRlcyB0aGF0IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgLy8gTm90ZSBmb3IgZWcu
IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCB0aGUgY2FsbCBmcm9tIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkLCB3b3VsZCBiZSBpbW1lZGlhdGVseSBmb3J3YXJkZWQgdG8gdGhl
IGJhc2UgY2xhc3MsIHdoaWNoIGhhbmRsZXMgdHJhbnNmb3JtQXR0ciBjaGFuZ2VzKQorCisgICAg
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7IGRvX3dvcmsoKTsgcmV0
dXJuOyB9CisgICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7IGRv
X3dvcmsoKTsgcmV0dXJuOyB9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vIEFzc3Vy
ZSB0aGF0IHdlIGhhbmRsZWQgYWxsIHByb3BlcnRpZXMgd2UgY2xhaW0gc3VwcG9ydCBmb3IgaW4g
ImlzU3VwcG9ydGVkQXR0cmlidXRlKCkiLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICBFeGFjdGx5IHRoZSBzYW1lIHBhdHRlcm4gY2FuIGJl
IGFwcGxpZWQgdG8gc3luY2hyb25pemVQcm9wZXJ0eSBhbmQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUg
dG8gc3BlZWQgdGhlbSB1cCBhcyB3ZWxsLgorCisgICAgICAgIE5vdGUgKCopOgorICAgICAgICBF
dmVyeSBzdmdBdHRyaWJ1dGVDaGFuZ2VkIGNhbGwgZnJvbSBhIGNsYXNzIGxpa2UgU1ZHUmVjdEVs
ZW1lbnQgaGFzIHRvIHJlYWNoIHRoZSBiYXNlIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQsIGFzIGl0IGhhbmRsZXMKKyAgICAgICAgaW52YWxpZGF0aW9uIG9mIHRo
ZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudC4gU2F5IHRoYXQgYSA8cmVjdD4gaXMgcmVmZXJlbmNl
ZCBieSBhIDx1c2U+IGFuZCB3ZSBjaGFuZ2UgdGhlICd4JyBhdHRyaWJ1dGUgb2YgdGhlIDxyZWN0
PiwgdGhlbgorICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkLCBj
YWxscyBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQo
dGhpcyksIHNvIHRoYXQgdGhlIDx1c2U+IGNhbiByZWJ1aWxkIGl0cyBzaGFkb3cgdHJlZS4uLgor
ICAgICAgICBUaGF0J3MgdGhlIG9ubHkgcmVhc29uIHdlIGRvIHRoZSBiYXNlLWNsYXNzIGRhbmNl
LCBhbmQgY2FuIGVhc2lseSBiZSBhdm9pZGVkLgorCisgICAgICAgIEFkZCAiU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBndWFyZCh0aGlzKSIgc3RhdG1lbnRzIGluIGFsbCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIGltcGxlbWVudGF0aW9ucywgdGhhdCBjYWxscyBpbnZhbGlkYXRl
QWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpCisgICAgICAgIHVwb24gZGVzdHJ1Y3Rpb24sIGFm
dGVyIHdlJ3ZlIHJlYWN0ZWQgdG8gdGhlIHN2ZyBhdHRyaWJ1dGUgY2hhbmdlLiBUaGlzIGFzc3Vy
ZXMgd2UgbmV2ZXIgZm9yZ2V0IHRvIGNhbGwgdGhlIGludmFsaWRhdGlvbiBtZXRob2QgYW55d2hl
cmUsIGFuZCBkb24ndAorICAgICAgICBuZWVkIHRvIHJlbHkgb24gdGhlIGJhc2UgY2xhc3Mgc3Zn
QXR0cmlidXRlQ2hhbmdlZCgpIGNhbGwgdG8gZG8gaXQuCisgICAgICAgCisgICAgICAgIE9ubHkg
YWZmZWN0cyBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBz
dmcvU1ZHQUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Np
cmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q2lyY2xlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0N1cnNvckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkOjpJbnZhbGlkYXRpb25HdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkOjp+SW52YWxpZGF0aW9uR3VhcmQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNl
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TWVyZ2VOb2RlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZz
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAg
ICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJv
bml6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdHRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KToKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHTGFu
Z1NwYWNlLmg6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xpbmVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAg
ICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNYXJrZXJFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01hc2tFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkpOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
dGVybkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR1BhdHRlcm5FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
Y3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1JlY3RF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0b3BFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdTdG9wRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHVGVzdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5oOgorICAgICAg
ICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyk6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5oOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVmlld0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1ZpZXdFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR1pv
b21BbmRQYW4uaDoKKwogMjAxMS0wNS0yMCAgVG9uaXMgVGlpZ2kgIDx0b25pc3RpaWdpQGdtYWls
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTc0LDI2ICs3NSw1
MSBAQCBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKICAgICByZXR1cm4gU1ZHU3R5
bGVkRWxlbWVudDo6dGl0bGUoKTsKIH0KIAorYm9vbCBTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0
cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhcmdldEF0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKQotICAgICAgICBz
ZXRTVkdUYXJnZXRCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKSB7CisgICAgICAgIHNl
dFNWR1RhcmdldEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdBRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3Rh
bmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIC8v
IFVubGlrZSBvdGhlciBTVkcqRWxlbWVudCBjbGFzc2VzLCBTVkdBRWxlbWVudCBvbmx5IGxpc3Rl
bnMgdG8gU1ZHVVJJUmVmZXJlbmNlIGNoYW5nZXMKICAgICAvLyBhcyBub25lIG9mIHRoZSBvdGhl
ciBwcm9wZXJ0aWVzIGNoYW5nZXMgdGhlIGxpbmtpbmcgYmVoYXZpb3VyIGZvciBvdXIgPGE+IGVs
ZW1lbnQuCkBAIC0xMjMsMjQgKzE0OSw0MSBAQCB2b2lkIFNWR0FFbGVtZW50OjpmaWxsQXR0cmli
dXRlVG9Qcm9wZXJ0CiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTVkdUYXJnZXQoKTsKICAg
ICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVNWR1RhcmdldCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHQUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIHN2Z1RhcmdldCgpOyB9CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNCArODksMjkgQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6cGF0aEF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhBdHRyKSB7CiAgICAgICAgIG1fcGF0
aCA9IFBhdGgoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQ
YXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9t
U3RyaW5nKGF0dHItPnZhbHVlKCksIG1fcGF0aCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAgICAgCiBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Um90YXRlTW9kZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cm90
YXRlTW9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjQgKzgxLDM5IEBAIEFuaW1hdGVk
QXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3IKICAgICByZXR1cm4gQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0OwogfQogCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgcmV0dXJu
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInRyYW5zbGF0ZSIp
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICBpZiAodmFsdWUgPT0gInRyYW5zbGF0ZSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgICAgICBlbHNlIGlmIChhdHRy
LT52YWx1ZSgpID09ICJzY2FsZSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJzY2FsZSIp
CiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU7
Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJvdGF0ZSIpCisgICAgICAgIGVs
c2UgaWYgKHZhbHVlID09ICJyb3RhdGUiKQogICAgICAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUo
KSA9PSAic2tld1giKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAic2tld1giKQogICAgICAg
ICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAg
ICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJza2V3WSIpCisgICAgICAgIGVsc2UgaWYgKHZh
bHVlID09ICJza2V3WSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1k7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLSAgICAKIHN0YXRpYyBTVkdUcmFuc2Zvcm1M
aXN0KiB0cmFuc2Zvcm1MaXN0Rm9yKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Q7CiAgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50KikgY29uc3Q7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShj
b25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMjUgKzEzNiw1NyBAQCBzdGF0
aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogfQogCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
a2V5VGltZXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmtleVBvaW50c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisgICAgIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewogICAgICAgICBhdHRyLT52YWx1
ZSgpLnN0cmluZygpLnNwbGl0KCc7JywgbV92YWx1ZXMpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7CiAgICAg
ICAgIHBhcnNlS2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlUaW1lcywgdHJ1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyICYmIGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
c3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9ubHkgYnV0IGl0IGlz
IHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCi0gICAgICAgIC8vIHdoZXJlIHRoZSBvdGhlciB0aW1p
bmcgY2FsY3VsYXRhdGlvbnMgYXJlLgotICAgICAgICBwYXJzZUtleVRpbWVzKGF0dHItPnZhbHVl
KCksIG1fa2V5UG9pbnRzLCBmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgeworICAgICAgICBp
ZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgc3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9u
bHkgYnV0IGl0IGlzIHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCisgICAgICAgICAgICAvLyB3aGVy
ZSB0aGUgb3RoZXIgdGltaW5nIGNhbGN1bGF0YXRpb25zIGFyZS4KKyAgICAgICAgICAgIHBhcnNl
S2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlQb2ludHMsIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpIHsKICAgICAgICAgcGFyc2VLZXlTcGxpbmVzKGF0dHItPnZhbHVl
KCksIG1fa2V5U3BsaW5lcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0
dHIsIGJvb2wgcHJlc2VydmVEZWNscykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogCiAgICAgZW51bSBDYWxjTW9kZSB7IENhbGNNb2RlRGlzY3JldGUsIENhbGNN
b2RlTGluZWFyLCBDYWxjTW9kZVBhY2VkLCBDYWxjTW9kZVNwbGluZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKIApAQCAtNTIsMzAgKzUzLDYyIEBAIFBhc3NSZWZQdHI8U1ZHQ2lyY2xlRWxlbWVudD4g
U1ZHQ2lyY2xlRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0NpcmNsZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdDaXJjbGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6ckF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExl
bmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOyAgICAgICAKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKSB7CisgICAgICAgIHNl
dEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikgewogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CiAgICAgICAgIHNldFJCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBpZiAockJh
c2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgY2ly
Y2xlIDxyPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpjeUF0dHIKQEAgLTk3LDM0ICsxMzAsNTcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNW
R0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
aWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3goKTsK
ICAgICAgICAgc3luY2hyb25pemVDeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rl
c3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplQ3koKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUigpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdU
ZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0NpcmNsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIApAQCAtNDksNTYgKzUwLDg2IEBAIFBhc3NSZWZQdHI8
U1ZHQ2xpcFBhdGhFbGVtZW50PiBTVkdDbGlwUGEKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0NsaXBQYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0NsaXBQ
YXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjbGlwUGF0aFVuaXRz
QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0
dHJOYW1lKTsKK30KKwogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldENsaXBQ
YXRoVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChT
VkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmNs
aXBQYXRoVW5pdHNBdHRyCi0gICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwog
fQogCiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUNsaXBQYXRoVW5pdHMoKTsKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmNsaXBQYXRoVW5pdHNBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVDbGlwUGF0aFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHQ2xpcFBhdGhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVk
c1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDM2ICs0OCw3NCBAQCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dDo6U1ZHCiB7CiB9CiAKK2Jvb2wgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFibGVWYWx1ZXNBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNsb3BlQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbnRlcmNlcHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmFtcGxpdHVkZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZXhwb25lbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9mZnNldEF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0eXBlQXR0cikgewogICAgICAgICBDb21wb25lbnRUcmFuc2ZlclR5cGUgcHJvcGVydHlWYWx1
ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvbmVudFRyYW5zZmVyVHlwZT46OmZyb21TdHJpbmco
dmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRU
eXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cikgewog
ICAgICAgICBTVkdOdW1iZXJMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UodmFs
dWUpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFRhYmxlVmFsdWVzTGlzdFdyYXBwZXJzKG5ld0xp
c3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VGFibGVWYWx1ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNsb3BlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNs
b3BlQXR0cikgewogICAgICAgICBzZXRTbG9wZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW50ZXJjZXB0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmludGVyY2VwdEF0dHIpIHsKICAgICAgICAgc2V0SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphbXBsaXR1
ZGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YW1wbGl0dWRlQXR0cikgewogICAgICAgICBzZXRBbXBsaXR1ZGVCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmV4cG9uZW50QXR0cikgewogICAgICAgICBzZXRFeHBvbmVu
dEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAgICAgICAgc2V0T2Zm
c2V0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsKQEAgLTg2
LDIzICsxMjQsNTEgQEAgdm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudAog
ICAgICAgICBzeW5jaHJvbml6ZUFtcGxpdHVkZSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4cG9u
ZW50KCk7CiAgICAgICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIFNWR0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVU
eXBlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dGFibGVWYWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzbG9wZUF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVTbG9wZSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSW50ZXJjZXB0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmFt
cGxpdHVkZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVBbXBsaXR1
ZGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZXhwb25lbnRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpl
eHBvbmVudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVFeHBvbmVudCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDIyICs1Niw0NCBAQCBTVkdDdXJzb3JFbGVtZW50
Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiAgICAgICAgICgqaXQpLT5jdXJzb3JFbGVtZW50UmVtb3Zl
ZCgpOwogfQogCitib29sIFNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0
aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWln
aHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgeworICAg
ICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0N1cnNvckVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKQEAgLTEwOSw0NCArMTMyLDY0IEBAIHZvaWQgU1ZHQ3Vy
c29yRWxlbWVudDo6cmVtb3ZlUmVmZXJlbmNlZEUKIAogdm9pZCBTVkdDdXJzb3JFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eUF0dHIKLSAgICAgICAgfHwgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxl
bWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
IAotICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9CisgICAgLy8gQW55IGNoYW5nZSBvZiBhIGN1cnNv
ciBzcGVjaWZpYyBhdHRyaWJ1dGUgdHJpZ2dlcnMgdGhpcyByZWNhbGMuCisgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7CisgICAg
SGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQo
KTsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6
ZVkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWSgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAg
IGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBl
bHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ3Vyc29yRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDdXJzb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVz
dHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTUgQEAgcHVibGljOgogCiAg
ICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgPyBt
X2VsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSA6IDA7IH0KIAorICAgIGNsYXNzIEludmFsaWRhdGlv
bkd1YXJkIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW52YWxpZGF0aW9uR3VhcmQp
OworICAgIHB1YmxpYzogICAgCisgICAgICAgIEludmFsaWRhdGlvbkd1YXJkKFNWR0VsZW1lbnQq
IGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQorICAgICAgICB+SW52YWxpZGF0aW9u
R3VhcmQoKSB7IFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxl
bWVudChtX2VsZW1lbnQpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHRWxlbWVudCogbV9l
bGVtZW50OworICAgIH07CisKICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWxsSW5zdGFuY2Vz
T2ZFbGVtZW50KFNWR0VsZW1lbnQqKTsKIAogICAgIHVzaW5nIFRyZWVTaGFyZWQ8U1ZHRWxlbWVu
dEluc3RhbmNlPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNTQsMzQgKzU1LDcw
IEBAIFBhc3NSZWZQdHI8U1ZHRWxsaXBzZUVsZW1lbnQ+IFNWR0VsbGlwc2UKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0VsbGlwc2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K2Jvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
Y3hBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN5QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeEF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnlBdHRyKTsKKyAgICB9
CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQor
CiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpjeEF0dHIpIHsKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVX
aWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Y3lBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xl
bmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBz
ZXRSeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7
CiAgICAgICAgIGlmIChyeEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cng+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAg
ICAgICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52
YWx1ZSgpKSk7CiAgICAgICAgIGlmIChyeUJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cnk+IGlzIG5vdCBhbGxvd2VkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZh
bGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5n
dGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIKQEAgLTEwNCwxNSAr
MTQxLDE2IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRWxsaXBzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1l
KCkpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7
CkBAIC0xMjAsMjEgKzE1OCw0NiBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplUnkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVSeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnJ5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ5KCk7Ci0gICAgZWxzZSBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0
czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHRWxsaXBzZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBA
QCBib29sIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vCiAgICAgcmV0dXJuIGF0
dHJOYW1lID09IFNWR05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQXR0cjsKIH0KIAor
dm9pZCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRB
dHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw4IEBACiAjZGVmaW5lIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWRfaAogCiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKQEAgLTM4
LDYgKzQwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OworICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+
Jik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEJhc2VWYWx1ZShjb25zdCBib29sJikgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1
aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NywxOSArNDgsNDMgQEAgUGFz
c1JlZlB0cjxTVkdGRUJsZW5kRWxlbWVudD4gU1ZHRkVCbGVuZAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHRkVCbGVuZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBT
VkdGRUJsZW5kRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJp
YnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjptb2RlQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW4y
QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0
dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bW9kZUF0dHIpIHsKICAgICAgICAgQmxlbmRNb2RlVHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8QmxlbmRNb2RlVHlwZT46OmZyb21TdHJpbmcodmFsdWUp
OwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRNb2RlQmFz
ZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZh
bHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjppbjJBdHRyKSB7CiAgICAgICAgIHNldEluMkJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQot
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVCbGVuZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCkBAIC03NCwzMyArOTksNTcgQEAgYm9vbCBTVkdGRUJsZW5kRWxlbWVudDo6c2V0Rmls
dGVyRWZmZWN0QQogCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bW9kZUF0dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
bW9kZUF0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmluQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW4yQXR0cikKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW4yQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUJsZW5kRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAg
ICAgICAgc3luY2hyb25pemVNb2RlKCk7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplSW4yKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1vZGVBdHRyKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om1vZGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTW9kZSgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpp
bjJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4yKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0ZFQmxlbmRFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFQmxlbmRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRG
aWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
KyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNDcsMjIgKzQ4LDQ2IEBAIFBhc3NS
ZWZQdHI8U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ+IFNWR0YKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jv
b2wgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6dmFsdWVzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjppbkF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIENvbG9y
TWF0cml4VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8Q29sb3JNYXRyaXhU
eXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFs
dWUgPiAwKQogICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRy
KSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CiAgICAg
ICAgIFNWR051bWJlckxpc3QgbmV3TGlzdDsKICAgICAgICAgbmV3TGlzdC5wYXJzZSh2YWx1ZSk7
CiAgICAgICAgIGRldGFjaEFuaW1hdGVkVmFsdWVzTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgp
KTsKICAgICAgICAgc2V0VmFsdWVzQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZQotICAg
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCkBAIC03OSwzMiArMTA0LDU3IEBAIGJvb2wgU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQ6OnNldEZpbHRlckUKIAogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5
cGVBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CiAgICAgICAgIHBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwogICAgICAgICBz
eW5jaHJvbml6ZUluMSgpOwogICAgICAgICBzeW5jaHJvbml6ZVZhbHVlcygpOworICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJO
YW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVR5cGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpp
bkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVZhbHVlcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMjEgKzQ4LDQ5IEBAIFBhc3NSZWZQdHI8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwg
c3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0
cik7CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOwor
fQorCiB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAg
ICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgeworICAg
ICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkg
eworICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVJbjEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdl
ZCBtaXNzaW5nLgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCkBAIC01MSwyNyArNTIsNjcgQEAgUGFzc1JlZlB0cjxTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ+IFNWR0ZFQwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVDb21wb3NpdGVF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBv
cnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjprMUF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6azJBdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmszQXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjprNEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3Vw
cG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0g
ICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIp
IHsKICAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJv
cGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwog
ICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRfb3BlcmF0b3JC
YXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUo
dmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmluMkF0dHIpIHsKICAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmsxQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmsxQXR0cikgewogICAg
ICAgICBzZXRLMUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6azJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azJBdHRyKSB7CiAgICAgICAgIHNldEsy
QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjprM0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjprM0F0dHIpIHsKICAgICAgICAgc2V0SzNCYXNlVmFsdWUo
dmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
Oms0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Oms0QXR0cikgewogICAgICAgICBzZXRLNEJhc2VWYWx1ZSh2YWx1ZS50b0Zs
b2F0KCkpOwotICAgIGVsc2UKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBib29sIFNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTk1LDI0ICsxMzYsMzIgQEAgYm9vbCBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZgogCiB2b2lkIFNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1
YXJkKHRoaXMpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIK
ICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0cgogICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6azJBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjprM0F0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0cikKKyAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0cikgewogICAgICAgICBwcmltaXRpdmVB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjppbjJBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRy
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYg
KGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVfb3BlcmF0b3Io
KTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKQEAgLTEyMSwyMyArMTcwLDUxIEBAIHZvaWQg
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVAKICAgICAgICAgc3luY2hyb25pemVL
MigpOwogICAgICAgICBzeW5jaHJvbml6ZUszKCk7CiAgICAgICAgIHN5bmNocm9uaXplSzQoKTsK
KyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZV9vcGVyYXRvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7
CiAgICAgICAgIHN5bmNocm9uaXplSW4yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmsxQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azFBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSzEoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azJBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMkF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVLMigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprM0F0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmszQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUszKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SzQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFQ29tcG9zaXRlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5j
cHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJV
dGlsaXRpZXMuaCIKQEAgLTgzLDQ3ICs4NCw5OSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNWR0ZF
Q29udm9sdmVNYXRyaXhFCiAgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKIH0KIAorYm9vbCBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6b3JkZXJBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6Omtlcm5lbE1hdHJpeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6ZWRnZU1vZGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmRpdmlzb3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmJpYXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnRhcmdldFhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnRhcmdldFlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNl
dEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpvcmRlckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yZGVyQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5Owog
ICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAg
ICAgICAgICAgIHNldE9yZGVyWEJhc2VWYWx1ZSh4KTsKICAgICAgICAgICAgIHNldE9yZGVyWUJh
c2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjplZGdlTW9kZUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgewogICAgICAgICBFZGdl
TW9kZVR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEVkZ2VNb2RlVHlwZT46
OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4g
MCkKICAgICAgICAgICAgIHNldEVkZ2VNb2RlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxNYXRyaXhBdHRyKSB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjprZXJuZWxNYXRyaXhBdHRyKSB7CiAgICAgICAgIFNWR051bWJlckxpc3QgbmV3TGlzdDsK
ICAgICAgICAgbmV3TGlzdC5wYXJzZSh2YWx1ZSk7CiAgICAgICAgIGRldGFjaEFuaW1hdGVkS2Vy
bmVsTWF0cml4TGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0S2VybmVs
TWF0cml4QmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpkaXZpc29yQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSB7CiAgICAgICAgIHNldERp
dmlzb3JCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmJpYXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmJpYXNBdHRyKSB7CiAgICAgICAgIHNl
dEJpYXNCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQotICAgICAgICBzZXRUYXJnZXRYQmFzZVZhbHVl
KHZhbHVlLnRvVUludFN0cmljdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnRhcmdldFlBdHRyKQotICAgICAgICBzZXRUYXJnZXRZQmFzZVZhbHVlKHZhbHVlLnRv
VUludFN0cmljdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtl
cm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cikgeworICAgICAgICBzZXRUYXJn
ZXRYQmFzZVZhbHVlKHZhbHVlLnN0cmluZygpLnRvVUludFN0cmljdCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhcmdldFlB
dHRyKSB7CisgICAgICAgIHNldFRhcmdldFlCYXNlVmFsdWUodmFsdWUuc3RyaW5nKCkudG9VSW50
U3RyaWN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAgICAgZmxvYXQgeCwg
eTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7
CiAgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZSh4KTsKICAgICAgICAg
ICAgIHNldEtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpwcmVzZXJ2ZUFscGhhQXR0cikgewogICAgICAgICBpZiAodmFsdWUgPT0gInRydWUiKQogICAg
ICAgICAgICAgc2V0UHJlc2VydmVBbHBoYUJhc2VWYWx1ZSh0cnVlKTsKICAgICAgICAgZWxzZSBp
ZiAodmFsdWUgPT0gImZhbHNlIikKICAgICAgICAgICAgIHNldFByZXNlcnZlQWxwaGFCYXNlVmFs
dWUoZmFsc2UpOwotICAgIH0gZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
IGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xNjQsNyArMjE3LDEy
IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEtlcm4KIAogdm9pZCBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJk
IGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjplZGdlTW9kZUF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JB
dHRyCkBAIC0xNzIsMTkgKzIzMCwyMyBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpzdmdBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cgog
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIKICAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhhQXR0cikKKyAgICAgICAgfHwgYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6Om9yZGVyQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2Vy
bmVsTWF0cml4QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbE1h
dHJpeEF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFt
ZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRWRnZU1vZGUoKTsKICAgICAgICAgc3luY2hyb25p
emVEaXZpc29yKCk7CkBAIC0xOTQsMjQgKzI1Niw1MiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpzeW5jaHJvCiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgo
KTsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWSgpOwogICAgICAgICBzeW5j
aHJvbml6ZVByZXNlcnZlQWxwaGEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRy
KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUVkZ2VNb2RlKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaXZpc29y
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZURpdmlzb3IoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJpYXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplQmlhcygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRYQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dGFyZ2V0WEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVUYXJnZXRYKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVRhcmdldFkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplUHJlc2VydmVBbHBoYSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3Iu
aCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgpAQCAtNjYsMjMgKzY3LDUyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVEaWZm
dXNlTGlnaHRpbmcKICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6ZGlmZnVzZUNvbnN0YW50QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cik7IC8vIEV2ZW4gdGhv
dWdoIGl0J3MgYSBTVkctQ1NTIHByb3BlcnR5LCB3ZSBvdmVycmlkZSBpdHMgaGFuZGxpbmcgaGVy
ZS4KKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5h
bWUpOworfQorCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkgfHwgYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0
cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0
dHIpIHsKICAgICAgICAgc2V0U3VyZmFjZVNjYWxlQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikgewogICAgICAgICBzZXREaWZmdXNlQ29uc3Rh
bnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3Ro
QXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5n
dGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFlCYXNlVmFs
dWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBib29sIFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTEzMiwx
NiArMTYyLDI3IEBAIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWwKIAog
dm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlk
YXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjpsaWdodGluZ19jb2xvckF0dHIpCisgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjpsaWdodGluZ19jb2xvckF0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodEVsZW1l
bnQqIGxpZ2h0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xNTUs
MjcgKzE5Niw0NiBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFCiAK
IHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBp
ZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwog
ICAgICAgICBzeW5jaHJvbml6ZVN1cmZhY2VTY2FsZSgpOwogICAgICAgICBzeW5jaHJvbml6ZURp
ZmZ1c2VDb25zdGFudCgpOwogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhYKCk7
CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFkoKTsKKyAgICAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVJbjEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFj
ZVNjYWxlQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVN1cmZh
Y2VTY2FsZSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNlQ29u
c3RhbnRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRGlm
ZnVzZUNvbnN0YW50KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5l
bFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0
TGVuZ3RoWSgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgJKHJldmlzaW9u
IDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSop
OwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
IApAQCAtNDksMjUgKzUwLDU3IEBAIFBhc3NSZWZQdHI8U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50PiAKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW4yQXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9y
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5Q2hhbm5l
bFNlbGVjdG9yQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpzY2FsZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikgewogICAg
ICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0
czxDaGFubmVsU2VsZWN0b3JUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChw
cm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldFhDaGFubmVsU2VsZWN0b3JCYXNlVmFs
dWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cikgewog
ICAgICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxDaGFubmVsU2VsZWN0b3JUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlm
IChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldFlDaGFubmVsU2VsZWN0b3JCYXNl
VmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFs
dWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluMkF0dHIpIHsKICAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikgewog
ICAgICAgICBzZXRTY2FsZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UKLSAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiBib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKQEAgLTg2LDM3ICsxMTksNjkgQEAgYm9vbCBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQ6OnNldEZpbAogCiB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c2NhbGVBdHRyKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp4Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5uZWxT
ZWxlY3RvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikgewogICAgICAg
ICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgaW52
YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJv
bml6ZVhDaGFubmVsU2VsZWN0b3IoKTsKICAgICAgICAgc3luY2hyb25pemVZQ2hhbm5lbFNlbGVj
dG9yKCk7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAgICAgIHN5bmNocm9uaXplSW4y
KCk7CiAgICAgICAgIHN5bmNocm9uaXplU2NhbGUoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENo
YW5uZWxTZWxlY3RvckF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYQ2hhbm5lbFNlbGVjdG9yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVlDaGFubmVsU2VsZWN0b3IoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVJbjEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW4yQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW4y
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpzY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZVNjYWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqKTsKICAgICAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkBAIC03Miw1OCArNzMsMTEyIEBA
IHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2aWEKICAgICBpbnZhbGlkYXRl
KCk7CiB9CiAKK2Jvb2wgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBj
b25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIp
IHsKICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAgICBzZXRTdGREZXZpYXRpb25YQmFzZVZh
bHVlKHgpOwogICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWUJhc2VWYWx1ZSh5KTsKICAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR4QXR0cikgewogICAgICAg
ICBzZXREeEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAg
c2V0RHlCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKS50b0Zsb2F0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNl
OjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKICAgICAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZHhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotICAgIAog
ICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3Rk
RGV2aWF0aW9uWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlhdGlvblkoKTsKICAgICAg
ICAgc3luY2hyb25pemVEeCgpOwogICAgICAgICBzeW5jaHJvbml6ZUR5KCk7CiAgICAgICAgIHN5
bmNocm9uaXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgCisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgewor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplU3RkRGV2aWF0aW9uWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlhdGlvblkoKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpkeEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmR4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyKiBm
aWx0ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAgICAgCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCkBAIC02Niw0NiArNjcsODUgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQ6OnNldFN0ZERldgogICAgIGludmFsaWRhdGUoKTsKIH0KIAorYm9vbCBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1l
Piwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN0ZERl
dmlhdGlvbkF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2
YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
LT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CiAgICAgICAgIGZs
b2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4
LCB5KSkgewogICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWEJhc2VWYWx1ZSh4KTsKICAgICAg
ICAgICAgIHNldFN0ZERldmlhdGlvbllCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAg
ICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9u
R3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgaW52
YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6
ZVN0ZERldmlhdGlvblgoKTsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25ZKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplU3RkRGV2aWF0aW9uWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlhdGlvblko
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFw
JiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdJbWFn
ZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgiCkBAIC03Nyw1MCArNzgsOTYgQEAgdm9pZCBTVkdGRUltYWdlRWxl
bWVudDo6cmVxdWVzdEltYWdlUmVzbwogICAgICAgICBtX2NhY2hlZEltYWdlLT5hZGRDbGllbnQo
dGhpcyk7CiB9CiAKK2Jvb2wgU1ZHRkVJbWFnZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklSZWZl
cmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR0ZFSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpCisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
ID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVz
ZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewogICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpw
YXJzZVByZXNlcnZlQXNwZWN0UmF0aW8odGhpcywgdmFsdWUpOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewotICAg
ICAgICAgICAgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgaWYg
KFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKKyAgICAgICAg
cmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlm
IChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICgh
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBy
ZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0
aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewogICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4n
dCBiZSBjb3JyZWN0LCBJJ20ganVzdCBwcmVzZXJ2aW5nIGV4aXN0aW5nIGNvZGUuIDxmZUltYWdl
PiArIFNWRyBET00gJ2hyZWYnIGNoYW5nZXMgbmVlZCB0ZXN0aW5nLgorICAgIGlmIChTVkdMYW5n
U3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR1VSSVJlZmVyZW5jZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJv
bml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOworICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFz
cGVjdFJhdGlvQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8o
KTsKLSAgICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7
Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFSW1hZ2VFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNW
R0ZFSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAg
Ym9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKQEAgLTczLDM3ICs3NCw5NCBAQCBQYXNzUmVmUHRy
PExpZ2h0U291cmNlPiBTVkdGRUxpZ2h0RWxlbWVuCiAgICAgcmV0dXJuIGxpZ2h0Tm9kZS0+bGln
aHRTb3VyY2UoKTsKIH0KIAorYm9vbCBTVkdGRUxpZ2h0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7
CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjphemltdXRoQXR0cik7CisgICAgICAgIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjplbGV2YXRpb25BdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnpBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6cG9pbnRzQXRZQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwotICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKQorICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKSB7CiAgICAgICAgIHNldEF6aW11dGhC
YXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKSB7CiAgICAgICAgIHNl
dEVsZXZhdGlvbkJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRYQmFz
ZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHNldFlCYXNlVmFsdWUodmFsdWUu
dG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnpBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ekF0dHIpIHsKICAgICAgICAgc2V0WkJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnBvaW50c0F0WEF0dHIpIHsKICAgICAgICAgc2V0UG9pbnRzQXRYQmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikgewogICAgICAgICBzZXRQb2ludHNBdFlCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKSB7CiAgICAgICAgIHNldFBvaW50
c0F0WkJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50
QXR0cikgewogICAgICAgICBzZXRTcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKHZhbHVlLnRvRmxv
YXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsaW1pdGluZ0Nv
bmVBbmdsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpIHsKICAgICAgICAgc2V0TGlt
aXRpbmdDb25lQW5nbGVCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVM
aWdodEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFs
aWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
YXppbXV0aEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0
dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCkBAIC0xMzIsMTIgKzE5
MCwxMiBAQCB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplQXppbXV0aCgpOwogICAgICAgICBzeW5jaHJvbml6ZUVsZXZh
dGlvbigpOwpAQCAtMTQ5LDI5ICsyMDcsNjYgQEAgdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZQogICAgICAgICBzeW5jaHJvbml6ZVBvaW50c0F0WigpOwogICAgICAgICBz
eW5jaHJvbml6ZVNwZWN1bGFyRXhwb25lbnQoKTsKICAgICAgICAgc3luY2hyb25pemVMaW1pdGlu
Z0NvbmVBbmdsZSgpOworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjphemltdXRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUF6aW11dGgoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9u
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUVsZXZhdGlvbigpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVY
KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ekF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnpBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWigpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplUG9pbnRzQXRYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVQb2ludHNBdFkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9p
bnRzQXRaQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVBvaW50c0F0
WigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxh
ckV4cG9uZW50KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5n
Q29uZUFuZ2xlQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplTGltaXRpbmdDb25lQW5nbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZH
RkVMaWdodEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2
ICszOSw3IEBAIHByb3RlY3RlZDoKICAgICBTVkdGRUxpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogcHJpdmF0ZToKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKIApAQCAtNDUsMzEgKzQ2LDUyIEBAIFBhc3NSZWZQdHI8U1ZHRkVNZXJn
ZU5vZGVFbGVtZW50PiBTVkdGRU0KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFTWVyZ2VO
b2RlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRy
KTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9
CisKIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBzZXRJ
bjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKKyAgICAgICAgc2V0SW4xQmFzZVZhbHVlKGF0dHIt
PnZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgaWYgKGF0dHJOYW1lICE9IFNWR05h
bWVzOjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnRO
b2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBTVkdFbGVtZW50
SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAg
IAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CisgICAgICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKCFwYXJlbnQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHBh
cmVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlz
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBwYXJlbnQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSkKKyAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJl
bmRlcmVyKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6YXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAoKQpAQCAtODUsMTAgKzEwNywyMyBAQCB2b2lkIFNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudDo6ZmlsbEF0dHJpYnV0CiAKIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIFNW
R0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0gICAKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTY3LDIzICs2OCw0NyBAQCB2b2lk
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmCiAgICAgaW52YWxpZGF0ZSgpOwog
fQogCitib29sIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpyYWRpdXNBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBj
b25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewog
ICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0
eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAg
ICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VW
YWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1
ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJz
ZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAgc2V0UmFk
aXVzWEJhc2VWYWx1ZSh4KTsKICAgICAgICAgICAgIHNldFJhZGl1c1lCYXNlVmFsdWUoeSk7CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBib29sIFNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVj
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xMDAsMzYgKzEyNSw1OSBAQCBi
b29sIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldEZpbHRlckVmCiAKIHZvaWQgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cgotICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikKKyAgICBTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0
dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAg
ICAgICAgc3luY2hyb25pemVfb3BlcmF0b3IoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsK
ICAgICAgICAgc3luY2hyb25pemVSYWRpdXNYKCk7CiAgICAgICAgIHN5bmNocm9uaXplUmFkaXVz
WSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplX29wZXJhdG9yKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cmFkaXVzQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJhZGl1c1goKTsKICAgICAgICAgc3lu
Y2hyb25pemVSYWRpdXNZKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKQEAgLTQ2LDQ2ICs0Nyw5MSBAQCBQYXNzUmVmUHRyPFNWR0ZFT2Zmc2V0
RWxlbWVudD4gU1ZHRkVPZmZzCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRU9mZnNldEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRU9mZnNldEVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR4QXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkeUF0dHIpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHNl
dER4QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc2V0RHlCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUp
OwotICAgIGVsc2UKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZHhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpCisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0
dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZUR4KCk7CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKICAgICAgICAgc3lu
Y2hyb25pemVJbjEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVP
ZmZzZXRFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFT2Zmc2V0RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0NvbG9yLmgiCisj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKQEAgLTY5LDI1ICs3MCw1NyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNWR0ZFU3BlY3VsYXJM
aWdodGluCiAgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKIH0KIAorYm9vbCBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpz
cGVjdWxhckNvbnN0YW50QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKLXsgICAgCi0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQoreworICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxl
QXR0cikgewogICAgICAgICBzZXRTdXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgp
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3Rh
bnRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpIHsKICAgICAgICAgc2V0U3BlY3VsYXJD
b25zdGFudEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9u
ZW50QXR0cikgewogICAgICAgICBzZXRTcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxV
bml0TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAgICAgZmxv
YXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgs
IHkpKSB7CiAgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZSh4KTsKICAg
ICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0g
ICAgfSBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMTM5LDE2ICsxNzIsMjcgQEAgYm9vbCBT
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaQogCiB2b2lkIFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlk
YXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1
cmZhY2VTY2FsZUF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFy
Q29uc3RhbnRBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4
cG9uZW50QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIpCisgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVu
Z3RoQXR0cikgewogICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAg
IGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0
RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xNjIsOCArMjA2LDYgQEAg
dm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodAogCiB2b2lkIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9
PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplU3VyZmFjZVNjYWxlKCk7CkBAIC0xNzEsMjEgKzIxMyw0MiBAQCB2b2lkIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OnN5bmNoCiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJF
eHBvbmVudCgpOwogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhYKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFkoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNl
U2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3VyZmFjZVNjYWxlKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxh
ckNvbnN0YW50QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVNwZWN1bGFyQ29uc3RhbnQoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJFeHBv
bmVudCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVu
Z3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUtl
cm5lbFVuaXRMZW5ndGhYKCk7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFko
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBT
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogICAgIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAg
LTQ1LDI5ICs0Niw2NSBAQCBQYXNzUmVmUHRyPFNWR0ZFVGlsZUVsZW1lbnQ+IFNWR0ZFVGlsZUVs
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRVRpbGVFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVUaWxlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAg
aWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKLSAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CiAgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjppbkF0dHIpIHsKKyAgICAgICAgc2V0SW4xQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotICAgIAotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRh
dGlvbkd1YXJkKHRoaXMpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIp
IHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAg
ICAgICBzeW5jaHJvbml6ZUluMSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgeworICAgICAgICBzeW5jaHJvbml6ZUlu
MSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRVRpbGVFbGVtZW50OjphdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFNWR0ZFVGlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk
ZSAiU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKIApAQCAtNjMsMjkgKzY0LDYxIEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgU1ZHRkVUdXJidWxlbmNlRWxlbWUKICAgICByZXR1cm4gc19pZGVudGlm
aWVyOwogfQogCitib29sIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOwor
ICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c2VlZEF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnR5cGVBdHRyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2
b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnR5cGVBdHRyKSB7CiAgICAgICAgIFR1cmJ1bGVuY2VUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQ
cm9wZXJ0eVRyYWl0czxUdXJidWxlbmNlVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAg
ICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKHBy
b3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
dGl0Y2hUaWxlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikgewogICAgICAgICBTVkdTdGl0
Y2hPcHRpb25zIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdTdGl0Y2hPcHRp
b25zPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkK
ICAgICAgICAgICAgIHNldFN0aXRjaFRpbGVzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAg
aWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAg
ICBzZXRCYXNlRnJlcXVlbmN5WEJhc2VWYWx1ZSh4KTsKICAgICAgICAgICAgIHNldEJhc2VGcmVx
dWVuY3lZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnNlZWRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpIHsKICAgICAgICAgc2V0U2Vl
ZEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpCi0gICAgICAgIHNldE51bU9jdGF2ZXNCYXNlVmFs
dWUodmFsdWUudG9VSW50U3RyaWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
Om51bU9jdGF2ZXNBdHRyKSB7CisgICAgICAgIHNldE51bU9jdGF2ZXNCYXNlVmFsdWUodmFsdWUu
c3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTEwOCwyMCArMTQxLDI3IEBAIGJvb2wgU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWYKIAogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNW
R0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhp
cyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0
cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIKICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNlZWRBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0
dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9p
ZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVR5cGUoKTsKICAgICAgICAg
c3luY2hyb25pemVTdGl0Y2hUaWxlcygpOwpAQCAtMTI5LDIwICsxNjksNDIgQEAgdm9pZCBTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzeW5jaHJvbml6ZQogICAgICAgICBzeW5jaHJvbml6ZUJhc2VG
cmVxdWVuY3lZKCk7CiAgICAgICAgIHN5bmNocm9uaXplU2VlZCgpOwogICAgICAgICBzeW5jaHJv
bml6ZU51bU9jdGF2ZXMoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
dHlwZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVUeXBlKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplU3RpdGNoVGlsZXMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVCYXNlRnJlcXVlbmN5WCgpOwogICAgICAgICBzeW5jaHJvbml6ZUJh
c2VGcmVxdWVuY3lZKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2Vl
ZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnNlZWRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU2VlZCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVOdW1PY3RhdmVzKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHRkVUdXJidWxlbmNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC05MCw3NSArOTEsMTA2IEBAIHZv
aWQgU1ZHRmlsdGVyRWxlbWVudDo6c2V0RmlsdGVyUmVzKHVuc2kKICAgICAgICAgb2JqZWN0LT5z
ZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAorYm9vbCBTVkdGaWx0ZXJFbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJp
YnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3Vw
cG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHRmlsdGVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQog
ewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cikgewogICAgICAgICBT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0
czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAg
IGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldEZpbHRlclVuaXRzQmFzZVZh
bHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpwcmltaXRpdmVVbml0c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0cikgewogICAg
ICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0
eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAg
ICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldFByaW1pdGl2ZVVu
aXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAg
ICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZmlsdGVyUmVzQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cikgewogICAgICAgICBmbG9h
dCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwg
eSkpIHsKICAgICAgICAgICAgIHNldEZpbHRlclJlc1hCYXNlVmFsdWUoeCk7CiAgICAgICAgICAg
ICBzZXRGaWx0ZXJSZXNZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgYm9vbCBp
bnZhbGlkYXRlQ2xpZW50cyA9IGZhbHNlOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxp
ZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eUF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgotICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewotICAgICAgICBpbnZhbGlk
YXRlQ2xpZW50cyA9IHRydWU7CisgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwotICAg
IH0KLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGludmFsaWRhdGVDbGllbnRzCi0gICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0cgotICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cgotICAgICAgICB8fCBTVkdTdHlsZWRFbGVt
ZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdVUklSZWZlcmVu
Y2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0xhbmdTcGFjZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFJlbmRlck9i
amVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAgICAgb2JqZWN0LT5zZXROZWVkc0xheW91
dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFu
eVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
WSgpOwpAQCAtMTcwLDI4ICsyMDIsNjIgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcgogICAgICAgICBzeW5jaHJvbml6ZUZpbHRlclJlc1koKTsKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
SHJlZigpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0ZXJVbml0
c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmZpbHRlclVuaXRzQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUZpbHRlclVuaXRz
KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6cHJpbWl0aXZlVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUHJpbWl0aXZlVW5p
dHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cikg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpmaWx0ZXJSZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRmlsdGVyUmVzWCgpOwogICAg
ICAgICBzeW5jaHJvbml6ZUZpbHRlclJlc1koKTsKLSAgICB9IGVsc2UgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
U1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRmlsdGVy
RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5n
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgorI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNTMsMjEgKzU0LDUzIEBA
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6U1YKICAgICAvLyBTcGVjOiBJ
ZiB0aGUgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0
IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdlcmUgc3BlY2lmaWVkLgogfQogCitib29sIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAg
aWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp3aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6aGVpZ2h0QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpyZXN1bHRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBT
VkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAg
ICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6cmVzdWx0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlc3VsdEF0dHIpIHsKICAgICAgICAgc2V0UmVzdWx0QmFz
ZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBTVkdTdHlsZWRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBib29sIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKQpAQCAtNzksMzkgKzExMiw1OCBAQCBib29sIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlCiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4
QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6aGVpZ2h0QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVz
dWx0QXR0cikKLSAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7ICAgIAorICAgIGludmFs
aWRhdGUoKTsKIH0KIAogdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KK3sg
ICAgCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25p
emVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwogICAgICAgICBzeW5jaHJvbml6ZVdpZHRo
KCk7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgICAgIHN5bmNocm9uaXplUmVz
dWx0KCk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlc3VsdEF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJlc3VsdEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSZXN1bHQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQg
Y2hpbGRDb3VudERlbHRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRv
Vmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmll
d0JveC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRv
Vmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDExICs5MiwxMCBAQCBib29sIFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dmlld0JveEF0dHIpIHsKICAgICAgICAgRmxvYXRSZWN0IHZpZXdCb3g7Ci0g
ICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKCFw
YXJzZVZpZXdCb3goZG9jdW1lbnQsIGF0dHItPnZhbHVlKCksIHZpZXdCb3gpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmICghYXR0ci0+dmFsdWUo
KS5pc051bGwoKSkKKyAgICAgICAgICAgIHBhcnNlVmlld0JveChkb2N1bWVudCwgYXR0ci0+dmFs
dWUoKSwgdmlld0JveCk7CiAgICAgICAgIHNldFZpZXdCb3hCYXNlVmFsdWUodmlld0JveCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewogICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvOjpwYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8odGhpcywgYXR0ci0+dmFsdWUoKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA1LDExICsxMDQsMzEgQEAgYm9vbCBTVkdGaXRUb1Zp
ZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBT
VkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgeworICAgICAg
ICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKKyAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVj
dFJhdGlvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnZpZXdCb3hBdHRyKQorICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKKyAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIp
CisgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworfQorCiBib29sIFNW
R0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKICAgICByZXR1cm4gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZpZXdCb3hBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cjsKIH0KIAordm9p
ZCBTVkdGaXRUb1ZpZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZp
ZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3sKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6dmlld0JveEF0dHIpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cik7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBBdHRyaWJ1dGU7CiBjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIFF1YWxpZmllZE5hbWU7CitjbGFzcyBTVkdF
bGVtZW50OwogY2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKIAogY2xhc3MgU1ZHRml0VG9W
aWV3Qm94IHsKQEAgLTQyLDEwICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNlTWFw
cGVkQXR0cmlidXRlKERvY3VtZW50KiwgQXR0cmlidXRlKik7CiAgICAgYm9vbCBpc0tub3duQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lkIGFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOworICAgIHZvaWQgc3luY2hyb25pemVQcm9w
ZXJ0aWVzKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3
Qm94QmFzZVZhbHVlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZShjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
JikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplVmlld0JveCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgPSAwOworCiBw
cml2YXRlOgogICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwg
RmxvYXRSZWN0Jik7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWln
bk9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDMyICs1
Niw2OCBAQCBQYXNzUmVmUHRyPFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50PiBTVkdGCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdGb3JlaWduT2JqZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkpOwogfQogCitib29sIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsK
KyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVz
dHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAg
IFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpoZWlnaHRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29u
dGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwot
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBz
ZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
SGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZvcmVp
Z25PYmplY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOworICAgIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eEF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnlBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjp3aWR0aEF0dHIKQEAgLTkzLDIwICsxMjksMTIgQEAgdm9pZCBTVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRl
Q2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlCi0gICAgICAgIHx8IFNW
R0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
aWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKIH0KIAogdm9pZCBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6
ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBAIC0xMTUsMjEgKzE0Myw0NiBAQCB2b2lk
IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpzeW5jaHJvbml6CiAgICAgICAgIHN5bmNocm9uaXpl
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsK
ICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7
CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3
aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJv
bml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwJiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgcHJpdmF0ZToKICAgICBT
VkdGb3JlaWduT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6Omlz
VmFsaWQoKTsgfQorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw4ICs0
NSwyNCBAQCBQYXNzUmVmUHRyPFNWR0dFbGVtZW50PiBTVkdHRWxlbWVudDo6Y3JlCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiti
b29sIFNWR0dFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR0dFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1l
KCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKQEAgLTUzLDM5ICs3
MCw1MCBAQCB2b2lkIFNWR0dFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBCiAgICAgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVB
dHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlm
ICghcmVuZGVyZXIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0
dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcik7CiB9CiAKIHZvaWQgU1ZHR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAg
aWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2Ug
aWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0dFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuaAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisg
ICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCkBAIC01MSw3MyArNTIsMTE0IEBA
IFNWR0dyYWRpZW50RWxlbWVudDo6U1ZHR3JhZGllbnRFbGVtZW50KGMKIHsKIH0KIAorYm9vbCBT
VkdHcmFkaWVudEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZp
ZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRl
ZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRl
cyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpncmFkaWVudFVu
aXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpncmFk
aWVudFRyYW5zZm9ybUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6c3ByZWFkTWV0aG9kQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0cikgewog
ICAgICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9w
ZXJ0eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52
YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0
R3JhZGllbnRVbml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpncmFk
aWVudFRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCBuZXdMaXN0Owog
ICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKG5l
d0xpc3QsIGF0dHItPnZhbHVlKCkpKQogICAgICAgICAgICAgbmV3TGlzdC5jbGVhcigpOwogCiAg
ICAgICAgIGRldGFjaEFuaW1hdGVkR3JhZGllbnRUcmFuc2Zvcm1MaXN0V3JhcHBlcnMobmV3TGlz
dC5zaXplKCkpOwogICAgICAgICBzZXRHcmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZShuZXdMaXN0
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9k
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikgewogICAgICAgICBTVkdTcHJlYWRNZXRob2RU
eXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdTcHJlYWRNZXRob2RUeXBl
Pjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUg
PiAwKQogICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVj
dCA9IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFvYmplY3QpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIKLSAgICAgICAgfHwgYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIKLSAgICAgICAgfHwgU1ZHVVJJUmVmZXJl
bmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBT
VkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwor
ICAgIAorICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAg
IG9iamVjdC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKIHZvaWQgU1ZHR3JhZGllbnRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwot
CiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVH
cmFkaWVudFVuaXRzKCk7CiAgICAgICAgIHN5bmNocm9uaXplR3JhZGllbnRUcmFuc2Zvcm0oKTsK
ICAgICAgICAgc3luY2hyb25pemVTcHJlYWRNZXRob2QoKTsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwor
ICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplR3JhZGllbnRV
bml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpncmFkaWVudFRyYW5z
Zm9ybUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUdy
YWRpZW50VHJhbnNmb3JtKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNw
cmVhZE1ldGhvZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVT
cHJlYWRNZXRob2QoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQo
KTsKLSAgICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OmZpbGxQYXNzZWRBdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcChBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5
cGVNYXApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAg
U1ZHR3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisg
ICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdlUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgpAQCAt
NjAsNDQgKzYxLDgyIEBAIFBhc3NSZWZQdHI8U1ZHSW1hZ2VFbGVtZW50PiBTVkdJbWFnZUVsZW0K
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkpOwogfQogCitib29sIFNWR0ltYWdlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChI
YXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYg
KHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5n
U3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
c3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ltYWdlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBz
ZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIp
IHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0
ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJl
c2VydmVBc3BlY3RSYXRpb0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewogICAg
ICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8odGhp
cywgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp3aWR0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1
ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7CiAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2lkdGgsIGF0dHItPnZhbHVlKCkpOwogICAg
ICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKICAgICAgICAgICAg
IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRp
dmUgdmFsdWUgZm9yIGltYWdlIGF0dHJpYnV0ZSA8d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU1Byb3BlcnR5SGVpZ2h0LCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKGhlaWdo
dEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3Ig
aW1hZ2UgYXR0cmlidXRlIDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdJbWFnZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCi0gICAgICAgIG1faW1hZ2VMb2FkZXIudXBkYXRlRnJvbUVs
ZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3IoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
KyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1
YXJkKHRoaXMpOworICAgIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eEF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnlBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjp3aWR0aEF0dHIKQEAgLTEwOSw2ICsxNDgsMTEgQEAgdm9pZCBTVkdJbWFn
ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0
cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYg
KFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
bV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJvcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwpAQCAt
MTIxLDE0ICsxNjUsMTYgQEAgdm9pZCBTVkdJbWFnZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZQogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0
cgogICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0g
ICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKQorICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFy
a0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR0ltYWdlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUo
KSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBA
IC0xMzgsMjUgKzE4NCw1NiBAQCB2b2lkIFNWR0ltYWdlRWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAg
ICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJv
cGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omhl
aWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVB
c3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
OwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsK
LSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhp
cywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdJbWFnZUVsZW1l
bnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
SW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0
czo6aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMYW5nU3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMYW5nU3BhY2UuY3BwCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMYW5nU3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwyMSBAQCBib29sIFNWR0xhbmdTcGFjZTo6aXNLbm93
bkF0dHJpYnV0ZShjb25zCiB7CiAgICAgcmV0dXJuIGF0dHJOYW1lLm1hdGNoZXMoWE1MTmFtZXM6
OmxhbmdBdHRyKSB8fCBhdHRyTmFtZS5tYXRjaGVzKFhNTE5hbWVzOjpzcGFjZUF0dHIpOwogfQor
ICAgIAordm9pZCBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgeG1sUHJlZml4LCAoInhtbCIpKTsKKworICAgIFF1YWxpZmll
ZE5hbWUgbGFuZ1dpdGhQcmVmaXggPSBYTUxOYW1lczo6bGFuZ0F0dHI7CisgICAgbGFuZ1dpdGhQ
cmVmaXguc2V0UHJlZml4KHhtbFByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
bGFuZ1dpdGhQcmVmaXgpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFhNTE5hbWVzOjps
YW5nQXR0cik7CisKKyAgICBRdWFsaWZpZWROYW1lIHNwYWNlV2l0aFByZWZpeCA9IFhNTE5hbWVz
OjpzcGFjZUF0dHI7CisgICAgc3BhY2VXaXRoUHJlZml4LnNldFByZWZpeCh4bWxQcmVmaXgpOwor
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHNwYWNlV2l0aFByZWZpeCk7CisgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoWE1MTmFtZXM6OnNwYWNlQXR0cik7Cit9CiAKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMYW5nU3BhY2UuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAK
ICNkZWZpbmUgU1ZHTGFuZ1NwYWNlX2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzksNiArNDAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9s
YW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNTQsMzEgKzU1LDY3IEBAIFBhc3NSZWZQdHI8U1ZHTGlu
ZUVsZW1lbnQ+IFNWR0xpbmVFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0xpbmVF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTGluZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eDFBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OngyQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjp5MUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6eTJBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0xpbmVFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eDFBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpIHsKICAgICAgICAgc2V0WDFCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKSB7CiAg
ICAgICAgIHNldFkxQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52
YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp4MkF0dHIpIHsKICAgICAgICAgc2V0WDJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1v
ZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eTJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKSB7CiAgICAgICAgIHNldFkyQmFzZVZhbHVlKFNW
R0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChT
VkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9
IGF0dHJOYW1lID09IFNWR05hbWVzOjp4MUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkxQXR0cgogICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyCkBAIC0xMDAsMTUgKzEzNywxNiBAQCB2
b2lkIFNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0xpbmVFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAg
IHN5bmNocm9uaXplWDEoKTsKICAgICAgICAgc3luY2hyb25pemVZMSgpOwpAQCAtMTE2LDIxICsx
NTQsNDYgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eQogICAgICAg
ICBzeW5jaHJvbml6ZVkyKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMs
IGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MUF0
dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MUF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVYMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnkxQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkxKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OngyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWDIo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTJBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MkF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVZMigpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXpl
UHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAm
IFNWR0xpbmVFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9w
ZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJM
aW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdUcmFu
c2Zvcm0uaCIKQEAgLTYxLDU4ICs2MiwxMDAgQEAgUGFzc1JlZlB0cjxTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ+IFNWRwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1
cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OngxQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4MkF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eTFBdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnkyQXR0cik7CisgICAgfQorICAg
IHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9p
ZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpCisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNW
R0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIp
IHsKICAgICAgICAgc2V0WDFCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0
ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eTFBdHRyKSB7CiAgICAgICAgIHNldFkxQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp4MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIpIHsKICAgICAgICAgc2V0WDJCYXNlVmFs
dWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKSB7CiAgICAg
ICAgIHNldFkyQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0dy
YWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDFBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjp5MUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OngyQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTJBdHRyKSB7Ci0g
ICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7Ci0KLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAorICAgIHVwZGF0ZVJlbGF0aXZlTGVu
Z3Roc0luZm9ybWF0aW9uKCk7CiAKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5k
ZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgIH0KIH0K
IAogdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgxKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplWTEoKTsKICAgICAgICAgc3luY2hyb25pemVYMigpOwogICAgICAgICBzeW5jaHJvbml6
ZVkyKCk7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OngxQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4MUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYMSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkxQXR0cikgewogICAgICAgICBzeW5j
aHJvbml6ZVkxKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngyQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eDJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWDIoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eTJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp5MkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZMigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6
OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjcg
KzQzLDUzIEBAIFBhc3NSZWZQdHI8U1ZHTVBhdGhFbGVtZW50PiBTVkdNUGF0aEVsZW0KICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNWR01QYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwog
fQogCitib29sIFNWR01QYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBv
cnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFp
bnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR01QYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICByZXR1cm47Ci0gICAgU1ZH
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdNUGF0aEVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAg
ICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR01QYXRoRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDkgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICBTVkdNUGF0aEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgCisKKyAgICAvLyBGSVhN
RTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9w
ZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtl
ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBA
IC03OCw3MSArNzksOTkgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR01hcmtlckVsZW1lbnQ6OnZpZXdC
bwogICAgIHJldHVybiBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmll
d0JveCgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHZpZXdXaWR0aCwgdmlld0hlaWdodCk7CiB9
CiAKK2Jvb2wgU1ZHTWFya2VyRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBv
cnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6bWFya2VyVW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OnJlZlhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OnJlZllBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Om1hcmtlcldpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6Om9yaWVudEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVk
QXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHTWFya2VyRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Om1hcmtlclVuaXRzQXR0cikgewogICAgICAgICBTVkdNYXJrZXJVbml0c1R5
cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46
OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAg
ICAgICAgICBzZXRNYXJrZXJVbml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVmWEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZYQXR0cikg
ewogICAgICAgICBzZXRSZWZYQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZZQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnJlZllBdHRyKSB7CiAgICAgICAgIHNldFJlZllCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0
aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjptYXJrZXJXaWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIpIHsKICAgICAgICAgc2V0
TWFya2VyV2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjptYXJrZXJIZWlnaHRBdHRyKSB7CiAgICAgICAgIHNldE1hcmtlckhlaWdodEJhc2VWYWx1
ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpIHsKICAg
ICAgICAgU1ZHQW5nbGUgYW5nbGU7CiAgICAgICAgIFNWR01hcmtlck9yaWVudFR5cGUgb3JpZW50
VHlwZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5cGU+Ojpmcm9tU3RyaW5n
KHZhbHVlLCBhbmdsZSk7CiAgICAgICAgIGlmIChvcmllbnRUeXBlID4gMCkKICAgICAgICAgICAg
IHNldE9yaWVudFR5cGVCYXNlVmFsdWUob3JpZW50VHlwZSk7CiAgICAgICAgIGlmIChvcmllbnRU
eXBlID09IFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKQogICAgICAgICAgICAgc2V0T3JpZW50QW5n
bGVCYXNlVmFsdWUoYW5nbGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdMYW5nU3Bh
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0dHIpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGJv
b2wgaW52YWxpZGF0ZUNsaWVudHMgPSBmYWxzZTsKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6Oklu
dmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnJlZllBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJX
aWR0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0
dHIpIHsKLSAgICAgICAgaW52YWxpZGF0ZUNsaWVudHMgPSB0cnVlOworICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikKICAgICAgICAgdXBkYXRlUmVsYXRp
dmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVj
dCA9IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybjsKIAotICAg
IGlmIChpbnZhbGlkYXRlQ2xpZW50cwotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
bWFya2VyVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpvcmllbnRB
dHRyCi0gICAgICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkK
LSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQog
ICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lkIFNWR01hcmtl
ckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJv
bml6ZU1hcmtlclVuaXRzKCk7CiAgICAgICAgIHN5bmNocm9uaXplUmVmWCgpOwpAQCAtMTUyLDMw
ICsxODEsNTggQEAgdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcgogICAg
ICAgICBzeW5jaHJvbml6ZU9yaWVudEFuZ2xlKCk7CiAgICAgICAgIHN5bmNocm9uaXplT3JpZW50
VHlwZSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsK
LSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2Vy
dmVBc3BlY3RSYXRpbygpOworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJv
cGVydGllcyhhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlclVuaXRzQXR0cikKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlclVuaXRzQXR0cikgewogICAgICAgICBzeW5j
aHJvbml6ZU1hcmtlclVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJlZlhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpyZWZYQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJlZlgoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWUF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUmVmWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjptYXJrZXJXaWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZU1hcmtlcldpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtl
ckhlaWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVNYXJr
ZXJIZWlnaHQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JpZW50QXR0
cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpvcmllbnRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplT3JpZW50QW5nbGUoKTsKICAg
ICAgICAgc3luY2hyb25pemVPcmllbnRUeXBlKCk7Ci0gICAgfSBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwot
ICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KKworICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTWFya2VyRWxlbWVu
dDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01hcmtlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TWFya2VyRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdNYXJrZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1l
bnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNs
dWRlICJTVkdVbml0VHlwZXMuaCIKQEAgLTYzLDg4ICs2NCwxNTQgQEAgUGFzc1JlZlB0cjxTVkdN
YXNrRWxlbWVudD4gU1ZHTWFza0VsZW1lbgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTWFz
a0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdNYXNrRWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7
CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJp
YnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3Vw
cG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXNrVW5pdHNBdHRyKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICB9CisgICAgcmV0
dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNW
R01hc2tFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Cisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFza1VuaXRz
QXR0cikgewogICAgICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUg
PSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmlu
ZyhhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAg
ICAgICAgc2V0TWFza1VuaXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cikgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
bWFza0NvbnRlbnRVbml0c0F0dHIpIHsKICAgICAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZh
bHVlID4gMCkKICAgICAgICAgICAgIHNldE1hc2tDb250ZW50VW5pdHNCYXNlVmFsdWUocHJvcGVy
dHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAg
ICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1
ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R01hc2tFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgYm9vbCBpbnZhbGlkYXRlQ2xpZW50cyA9IGZhbHNl
OworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9u
R3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgog
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgfHwgYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aGVpZ2h0QXR0cikgewotICAgICAgICBpbnZhbGlkYXRlQ2xpZW50cyA9IHRydWU7CisgICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQogICAgICAgICB1cGRhdGVS
ZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCog
b2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGludmFsaWRhdGVDbGllbnRzCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjptYXNrVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNr
Q29udGVudFVuaXRzQXR0cgotICAgICAgICB8fCBTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJl
cigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lkIFNW
R01hc2tFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVNYXNrVW5pdHMoKTsKICAgICAgICAgc3luY2hyb25pemVNYXNrQ29udGVudFVuaXRz
KCk7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKKyAg
ICAgICAgc3luY2hyb25pemVXaWR0aCgpOworICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAg
U1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAg
IFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om1hc2tVbml0c0F0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNr
VW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFza1VuaXRzKCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNrQ29udGVu
dFVuaXRzQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZU1hc2tDb250ZW50VW5pdHMoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRo
QXR0cikgeworICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAg
ICAgc3luY2hyb25pemVIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAg
ICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywg
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdNYXNrRWxlbWVudDo6
YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tF
bGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5kbGluZygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyRmFjdG9yeS5oIgogI2luY2x1ZGUgIlNW
R1BhdGhTZWdBcmMuaCIKQEAgLTE4MiwzMSArMTgzLDU5IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW8KICAgICByZXR1cm4gU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhSZWw6OmNyZWF0ZSh0aGlzLCByb2xlLCB4LCB5KTsKIH0KIAorYm9vbCBTVkdQYXRo
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkQXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpkQXR0cikgewogICAgICAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeSogZmFj
dG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7CiAgICAgICAgIGlmICghZmFjdG9y
eS0+YnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcoYXR0ci0+dmFsdWUoKSwgbV9wYXRo
Qnl0ZVN0cmVhbSwgVW5hbHRlcmVkUGFyc2luZykpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgZD1cIiIg
KyBhdHRyLT52YWx1ZSgpICsgIlwiIik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cikgewogICAgICAg
ICBzZXRQYXRoTGVuZ3RoQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKLSAgICAg
ICAgaWYgKHBhdGhMZW5ndGhCYXNlVmFsdWUoKSA8IDAuMGYpCisgICAgICAgIGlmIChwYXRoTGVu
Z3RoQmFzZVZhbHVlKCkgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0aCBhdHRyaWJ1
dGUgPHBhdGhMZW5ndGg+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChT
VkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNo
YW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwLDQzICsyNDks
NTEgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAgICAgICAg
ICAgbV9wYXRoU2VnTGlzdC52YWx1ZSA9IG5ld0xpc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJlbmRlcmVyLT5z
ZXROZWVkc1BhdGhVcGRhdGUoKTsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKHJlbmRlcmVyKQorICAgICAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOwogICAgIH0KIAotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIKLSAg
ICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAg
ICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKKyAgICBpZiAocmVuZGVyZXIpCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCiB2
b2lkIFNWR1BhdGhFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFt
ZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRCgpOwogICAgICAgICBzeW5jaHJvbml6ZVBhdGhM
ZW5ndGgoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUp
OworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmRBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXRo
TGVuZ3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVBhdGhMZW5ndGgoKTsKLSAgICBlbHNl
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5j
aHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0
czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAg
IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHUGF0aEVsZW1lbnQ6OnN5bmNocm9uaXplRCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw3IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1Zh
bGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQYXR0ZXJu
QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5j
ZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTcxLDg1ICs3MiwxMTYgQEAgUGFzc1Jl
ZlB0cjxTVkdQYXR0ZXJuRWxlbWVudD4gU1ZHUGF0dGVybgogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU1ZHUGF0dGVybkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdQ
YXR0ZXJuRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5h
bWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBv
cnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFj
ZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp3aWR0aEF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aGVpZ2h0QXR0cik7CisgICAgfQorICAgIHJl
dHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBT
VkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQog
eworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAg
ICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRl
cm5Vbml0c0F0dHIpIHsKICAgICAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0
eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZy
b21TdHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkK
ICAgICAgICAgICAgIHNldFBhdHRlcm5Vbml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0
c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAg
ICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRQYXR0ZXJuQ29udGVudFVu
aXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9y
bUF0dHIpIHsKICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCBuZXdMaXN0OwogICAgICAgICBpZiAo
IVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKG5ld0xpc3QsIGF0dHIt
PnZhbHVlKCkpKQogICAgICAgICAgICAgbmV3TGlzdC5jbGVhcigpOwogCiAgICAgICAgIGRldGFj
aEFuaW1hdGVkUGF0dGVyblRyYW5zZm9ybUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAg
ICAgICAgIHNldFBhdHRlcm5UcmFuc2Zvcm1CYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgp
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlB
dHRyKSB7CiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQs
IGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OndpZHRoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVl
KFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYg
KHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlmICh3aWR0aEJh
c2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHBhdHRl
cm4gYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewog
ICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0
dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMp
IDwgMC4wKQorICAgICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0dGVybiBhdHRyaWJ1dGUgPGhlaWdodD4gaXMgbm90
IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9j
dW1lbnQoKSwgYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRv
Y3VtZW50KCksIGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGJvb2wgaW52
YWxpZGF0ZUNsaWVudHMgPSBmYWxzZTsKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRh
dGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIKLSAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKLSAgICAgICAgaW52YWxpZGF0
ZUNsaWVudHMgPSB0cnVlOworICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0
QXR0cikKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKLSAgICB9
Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFvYmpl
Y3QpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChpbnZhbGlkYXRlQ2xpZW50cwotICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cgotICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyCi0gICAgICAgIHx8IFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZH
VGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0xhbmdTcGFj
ZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZH
Rml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdT
dHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVy
T2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5
b3V0KHRydWUpOwogfQogCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIFNWR1N0eWxlZEVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCit7ICAgIAogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplUGF0dGVyblVuaXRzKCk7
CiAgICAgICAgIHN5bmNocm9uaXplUGF0dGVybkNvbnRlbnRVbml0cygpOwpAQCAtMTU5LDM3ICsx
OTEsNzQgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZQogICAgICAg
ICBzeW5jaHJvbml6ZVdpZHRoKCk7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAg
ICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5j
aHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlv
KCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6
OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJu
VW5pdHNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVBhdHRlcm5Vbml0cygpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVybkNvbnRl
bnRVbml0c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQYXR0ZXJuQ29udGVudFVuaXRzKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVBhdHRlcm5UcmFu
c2Zvcm0oKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgp
OwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikKLSAgICAgICAgc3luY2hyb25p
emVWaWV3Qm94KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8o
KTsKLSAgICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94Ojpz
eW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
ICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0
czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHUGF0dGVybkVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAgICAgdmlydHVh
bCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHJldmlzaW9u
IDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNp
bmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2lu
Y2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgpA
QCAtNDIsOCArNDMsMjUgQEAgU1ZHUG9seUVsZW1lbnQ6OlNWR1BvbHlFbGVtZW50KGNvbnN0IFF1
YQogewogfQogCitib29sIFNWR1BvbHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAo
c3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdT
cGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnBvaW50c0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewogICAgICAgICBTVkdQ
b2ludExpc3QgbmV3TGlzdDsKQEAgLTU0LDIxICs3MiwyOCBAQCB2b2lkIFNWR1BvbHlFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAgICAgICAgICAgICBsaXN0LT5kZXRhY2hMaXN0V3JhcHBl
cnMobmV3TGlzdC5zaXplKCkpOwogCiAgICAgICAgIG1fcG9pbnRzLnZhbHVlID0gbmV3TGlzdDsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFs
aWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChTVkdU
ZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC04Miw5ICsxMDcsMTIgQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNWR0xhbmdTcGFj
ZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFNWR0xh
bmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgUmVuZGVy
U1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihy
ZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdQb2x5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
b2x5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxl
bWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6
aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKik7IAogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJSYWRpYWxHcmFkaWVu
dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5o
IgpAQCAtNjMsNjYgKzY0LDExNCBAQCBQYXNzUmVmUHRyPFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dD4gU1ZHCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Y3hBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN5QXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpmeEF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewot
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBz
ZXRDeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0
dHIpIHsKICAgICAgICAgc2V0Q3lCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQs
IGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnJBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpyQXR0cikgewogICAgICAgICBzZXRSQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlT3RoZXIsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKHJCYXNlVmFsdWUo
KS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHJCYXNlVmFsdWUoKS52YWx1ZSh0aGlz
KSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
cG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByYWRpYWwgZ3JhZGllbnQgcmFkaXVzIDxy
PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpmeEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpmeEF0dHIpIHsKICAgICAgICAgc2V0RnhCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZnlBdHRyKSB7CiAgICAgICAgIHNldEZ5
QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0g
ICAgZWxzZQotICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0dyYWRpZW50RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3hBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjpjeUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ4QXR0
cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnlBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjpyQXR0cikgewotICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0
aHNJbmZvcm1hdGlvbigpOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3Vh
cmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgdXBkYXRlUmVsYXRpdmVMZW5n
dGhzSW5mb3JtYXRpb24oKTsKICAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0
ID0gcmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm47
Ci0KKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBv
YmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgIH0KIH0KIAogdm9pZCBTVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAg
IHN5bmNocm9uaXplQ3goKTsKICAgICAgICAgc3luY2hyb25pemVDeSgpOwogICAgICAgICBzeW5j
aHJvbml6ZUZ4KCk7CiAgICAgICAgIHN5bmNocm9uaXplRnkoKTsKICAgICAgICAgc3luY2hyb25p
emVSKCk7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpjeEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpjeEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZUN5KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnhB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRngoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6ZnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpmeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVGeSgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyQXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVSKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAg
dmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKIApAQCAtNTcsNDMgKzU4LDg3IEBAIFBhc3NSZWZQdHI8U1ZHUmVjdEVs
ZW1lbnQ+IFNWR1JlY3RFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1JlY3RFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHUmVjdEVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmli
dXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAg
ICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6cnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnJ5QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNv
bnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdSZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRYQmFzZVZhbHVlKFNWR0xl
bmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIp
IHsKICAgICAgICAgc2V0UnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0
ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAocnhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAu
MCkKKyAgICAgICAgaWYgKHJ4QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgcmVjdCA8cng+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAgICAg
ICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7Ci0gICAgICAgIGlmIChyeUJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAg
ICAgICBpZiAocnlCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZh
bHVlIGZvciByZWN0IDxyeT4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAg
ICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFs
dWUoKSkpOwotICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkK
KyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgcmVjdCA8d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVp
Z2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1
ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMp
IDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVw
b3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJlY3QgPGhlaWdodD4gaXMgbm90IGFsbG93
ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAg
ICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6
OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGJv
b2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIK
QEAgLTExNywxNSArMTYyLDE2IEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIAotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIFNWR1JlY3RFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9
PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZVkoKTsKQEAgLTEzNSwyNSArMTgxLDU2IEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkKICAgICAgICAgc3luY2hyb25pemVSeSgpOwogICAgICAgICBzeW5jaHJv
bml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNo
cm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWln
aHQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVSeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpyeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ5KCk7Ci0gICAg
ZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAg
c3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZH
VGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAg
ICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHUmVjdEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKICNp
bmNsdWRlICJTTUlMVGltZUNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgi
CkBAIC0yOTksOSArMzAwLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ1NTRm9yQXR0cmlidXRlKFNW
R1NWRwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0KK3sgCiAgICAgLy8gRklYTUU6IFVnbHksIHVnbHkg
aGFjayB0byBhcm91bmQgdGhhdCBwYXJzZU1hcHBlZEF0dHJpYnV0ZSBpcyBub3QgY2FsbGVkCiAg
ICAgLy8gd2hlbiBzdmcud2lkdGguYmFzZVZhbHVlID0gMTAwIGlzIGV2YWx1YXRlZC4KICAgICAv
LyBUaHVzIHRoZSBDU1MgbGVuZ3RoIHZhbHVlIGZvciB3aWR0aCBpcyBub3QgdXBkYXRlZCwgYW5k
IHdpZHRoKCkgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpCkBAIC0zMjQsMzMgKzMyMywzMyBAQCB2b2lk
IFNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoCiAgICAgICAgIHVwZGF0ZVJlbGF0
aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CiAgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNl
OjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKICAgICBpZiAoU1ZH
VGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYg
KHVwZGF0ZVJlbGF0aXZlTGVuZ3RocwogICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpCiAgICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1pvb21BbmRQYW46
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQotICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKCkpOworICAgICAgICB8fCBTVkdab29tQW5kUGFuOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVy
ZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdTdHlsZWRFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAg
aWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplWSgpOwogICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAg
c3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAgICAgIFNWR0ZpdFRvVmlld0Jv
eDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zNjQsMTIgKzM2MywxMiBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoCiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgZWxzZSBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikKLSAgICAgICAgc3luY2hy
b25pemVWaWV3Qm94KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNl
cnZlQXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0
aW8oKTsKKyAgICBlbHNlIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSAKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMo
YXR0ck5hbWUpOwogICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRy
TmFtZSk7CisgICAgZWxzZQorICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1NW
R0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAKQEAg
LTQ5LDMxICs1MCw2MSBAQCBQYXNzUmVmUHRyPFNWR1NjcmlwdEVsZW1lbnQ+IFNWR1NjcmlwdEVs
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50LCBpbnNlcnRlZEJ5UGFyc2VyLCBmYWxzZSkpOwogfQogCitib29sIFNWR1NjcmlwdEVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9y
dGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHko
KSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3Vw
cG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgICAgIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuYWRkKEhUTUxOYW1lczo6b25lcnJvckF0dHIpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHU2NyaXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQog
ewotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgc2V0VHlwZShhdHRy
LT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpvbmVy
cm9yQXR0cikKLSAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
ZXJyb3JFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgU1ZHRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1M
TmFtZXM6Om9uZXJyb3JBdHRyKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhp
cywgYXR0cikpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVy
ZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2
b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp0eXBlQXR0ciB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6Om9uZXJyb3JBdHRyKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoaHJlZigpKTsKLSAgICBl
bHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAg
IC8vIEhhbmRsZSBkeW5hbWljIHVwZGF0ZXMgb2YgdGhlICdleHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkJyBhdHRyaWJ1dGUuIE9ubHkgcG9zc2libGUgY2FzZTogY2hhbmdpbmcgZnJvbSAndHJ1ZScg
dG8gJ2ZhbHNlJwogICAgICAgICAvLyBjYXVzZXMgYW4gaW1tZWRpYXRlIGRpc3BhdGNoIG9mIHRo
ZSBTVkdMb2FkIGV2ZW50LiBJZiB0aGUgYXR0cmlidXRlIHZhbHVlIHdhcyAnZmFsc2UnIGJlZm9y
ZSBpbnNlcnRpbmcgdGhlIHNjcmlwdCBlbGVtZW50CiAgICAgICAgIC8vIGluIHRoZSBkb2N1bWVu
dCwgdGhlIFNWR0xvYWQgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkLgpAQCAtODMs
MjMgKzExNCwzNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nCiAK
ICAgICAgICAgICAgIHNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKCk7CiAgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2
b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25p
emVIcmVmKCk7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfSAgIAorCisgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwot
ICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHU2NyaXB0RWxlbWVudDo6YXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5o
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wg
d2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCBhbHJlYWR5U3RhcnRlZCk7CiAKKyAgICBib29sIGlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTQ3LDM1ICs0OCw3MiBAQCBQ
YXNzUmVmUHRyPFNWR1N0b3BFbGVtZW50PiBTVkdTdG9wRWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTVkdTdG9wRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNW
R1N0b3BFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRl
cy5pc0VtcHR5KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpv
ZmZzZXRBdHRyKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHU3RvcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5h
bWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoIiUiKSkKICAgICAgICAg
ICAgIHNldE9mZnNldEJhc2VWYWx1ZSh2YWx1ZS5sZWZ0KHZhbHVlLmxlbmd0aCgpIC0gMSkudG9G
bG9hdCgpIC8gMTAwLjBmKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0T2Zmc2V0QmFz
ZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU3RvcEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFs
aWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVy
ZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdTdG9wRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkg
eworICAgICAgICBzeW5jaHJvbml6ZU9mZnNldCgpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjpvZmZzZXRBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1N0b3BFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1N0b3BFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTUgKzg2LDMz
IEBAIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRUaXRsZShjb25zdCBBdG8KICAgICBzZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnRpdGxlQXR0ciwgdGl0bGUsIGVjKTsKIH0KIAorYm9vbCBTVkdTdHls
ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwg
c3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlz
RW1wdHkoKSkgeworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
c3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjp0aXRsZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dGl0bGVBdHRyICYmIG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQtPnNldFRp
dGxlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNl
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0aXRsZUF0dHIpIHsKKyAgICAg
ICAgaWYgKG1fc2hlZXQpCisgICAgICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1N0eWxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBh
cnNlcik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTAgKzI5Nyw5IEBAIGJv
b2wgU1ZHU3R5bGVkRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCAKIAogdm9pZCBTVkdTdHlsZWRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CiAgICAgLy8gTk9URTog
QW55IHN1YmNsYXNzIHdoaWNoIG92ZXJyaWRlcyBwYXJzZU1hcHBlZEF0dHJpYnV0ZSBmb3IgYSBw
cm9wZXJ0eSBoYW5kbGVkIGJ5CiAgICAgLy8gY3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5h
bWUgd2lsbCBhbHNvIGhhdmUgdG8gb3ZlcnJpZGUgbWFwVG9FbnRyeSB0byBkaXNhYmxlIHRoZSBk
ZWZhdWx0IGVTVkcgbWFwcGluZwotICAgIGludCBwcm9wSWQgPSBTVkdTdHlsZWRFbGVtZW50Ojpj
c3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShhdHRyTmFtZSk7CisgICAgaW50IHByb3BJ
ZCA9IFNWR1N0eWxlZEVsZW1lbnQ6OmNzc1Byb3BlcnR5SWRGb3JTVkdBdHRyaWJ1dGVOYW1lKGF0
dHItPm5hbWUoKSk7CiAgICAgaWYgKHByb3BJZCA+IDApIHsKICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgcHJvcElkLCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwpAQCAtMzExLDExICszMTAsMTMgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYgogICAgIC8vIHRoZSBjbGFzc05hbWUgaGVyZS4gIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQgYWN0dWFsbHkgY2F1c2VzIHRoZSByZXN1bHRpbmcKICAgICAvLyBzdHlsZSB1cGRhdGVz
IChpbnN0ZWFkIG9mIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKS4gV2UgZG9u
J3QKICAgICAvLyB0ZWxsIFN0eWxlZEVsZW1lbnQgYWJvdXQgdGhlIGNoYW5nZSB0byBhdm9pZCBw
YXJzaW5nIHRoZSBjbGFzcyBsaXN0IHR3aWNlCi0gICAgaWYgKGF0dHJOYW1lLm1hdGNoZXMoSFRN
TE5hbWVzOjpjbGFzc0F0dHIpKQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpj
bGFzc0F0dHIpIHsKICAgICAgICAgc2V0Q2xhc3NOYW1lQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkp
OwotICAgIGVsc2UKLSAgICAgICAgLy8gaWQgaXMgaGFuZGxlZCBieSBTdHlsZWRFbGVtZW50IHdo
aWNoIFNWR0VsZW1lbnQgaW5oZXJpdHMgZnJvbQotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGlk
IGlzIGhhbmRsZWQgYnkgU3R5bGVkRWxlbWVudCB3aGljaCBTVkdFbGVtZW50IGluaGVyaXRzIGZy
b20KKyAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAogYm9v
bCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQpAQCAtMzI1LDI4ICszMjYsMzEgQEAgYm9vbCBTVkdTdHlsZWRFbGVtZW50Ojpp
c0tub3duQXR0cmlidXRlKAogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaW50IHByb3BJZCA9IFNWR1N0eWxl
ZEVsZW1lbnQ6OmNzc1Byb3BlcnR5SWRGb3JTVkdBdHRyaWJ1dGVOYW1lKGF0dHJOYW1lKTsKKyAg
ICBpZiAocHJvcElkID4gMCkgeworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRh
dGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUubWF0Y2hlcyhIVE1MTmFtZXM6OmNsYXNzQXR0cikpCisgICAgaWYg
KGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y2xhc3NBdHRyKSB7CiAgICAgICAgIGNsYXNzQXR0cmli
dXRlQ2hhbmdlZChjbGFzc05hbWUoKSk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJl
bmRlcmVyKCk7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3Rh
bmNlc09mRWxlbWVudCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmIChp
c0lkQXR0cmlidXRlTmFtZShhdHRyTmFtZSkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSByZW5kZXJlcigpOwogICAgICAgICAvLyBOb3RpZnkgcmVzb3VyY2VzIGFib3V0IGlkIGNo
YW5nZXMsIHRoaXMgaXMgaW1wb3J0YW50IGFzIHdlIGNhY2hlIHJlc291cmNlcyBieSBpZCBpbiBT
VkdEb2N1bWVudEV4dGVuc2lvbnMKICAgICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzU1ZH
UmVzb3VyY2VDb250YWluZXIoKSkKICAgICAgICAgICAgIG9iamVjdC0+dG9SZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcigpLT5pZENoYW5nZWQoKTsKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNl
OjppbnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpOworICAgICAgICByZXR1cm47
CiAgICAgfQotCi0gICAgLy8gSW52YWxpZGF0ZSBhbGwgU1ZHRWxlbWVudEluc3RhbmNlcyBhc3Nv
Y2lhdGVkIHdpdGggdXMKLSAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0
YW5jZXNPZkVsZW1lbnQodGhpcyk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQotICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpIHx8IGF0dHJOYW1lLm1hdGNoZXMoSFRNTE5hbWVzOjpjbGFzc0F0dHIp
KQorICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpIHx8IGF0dHJOYW1lID09IEhUTUxOYW1l
czo6Y2xhc3NBdHRyKQogICAgICAgICBzeW5jaHJvbml6ZUNsYXNzTmFtZSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5j
ZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY5
LDQ0ICs3MCw3NCBAQCBBZmZpbmVUcmFuc2Zvcm0qIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFCiAg
ICAgcmV0dXJuIG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtLmdldCgpOwogfQogCitib29sIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9y
dGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAo
U1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHJh
bnNmb3JtQXR0cikgewogICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0IG5ld0xpc3Q7CiAgICAgICAg
IGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobmV3TGlzdCwg
YXR0ci0+dmFsdWUoKSkpCiAgICAgICAgICAgICBuZXdMaXN0LmNsZWFyKCk7CiAgICAgICAgIGRl
dGFjaEFuaW1hdGVkVHJhbnNmb3JtTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAg
ICAgc2V0VHJhbnNmb3JtQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSAKLSAgICAgICAg
U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIGlmICghU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25H
dWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIFJlbmRlck9iamVjdCogb2JqZWN0
ID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
b2JqZWN0LT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpOwotICAgIFJlbmRlclNWR1Jlc291cmNl
OjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ob2JqZWN0KTsKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKKyAgICAgICAgb2Jq
ZWN0LT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpOworICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKG9iamVjdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgeworICAgICAgICBzeW5jaHJvbml6ZVRyYW5zZm9ybSgpOworICAgICAg
ICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFt
ZSgpIHx8IFNWR1RyYW5zZm9ybWFibGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0cmFuc2Zv
cm1BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHJhbnNmb3JtKCk7Ci19CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLWJvb2wgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25v
d25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgcmV0dXJu
IFNWR1RyYW5zZm9ybWFibGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpOworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiBTVkdFbGVtZW50KiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNiBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxl
VXBkYXRlKSBjb25zdDsKIAotICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7Ci0KICAgICAvLyAiYmFzZSBjbGFzcyIgbWV0aG9kcyBmb3IgYWxsIHRoZSBlbGVt
ZW50cyB3aGljaCByZW5kZXIgYXMgcGF0aHMKICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQ
YXRoJikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIGNvbnN0
OwpAQCAtNTcsNiArNTUsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdTeW1i
b2xFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRl
ICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NCw4ICs0
NSwyNCBAQCBQYXNzUmVmUHRyPFNWR1N5bWJvbEVsZW1lbnQ+IFNWR1N5bWJvbEVsCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdTeW1ib2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKK2Jvb2wgU1ZHU3ltYm9sRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBv
cnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQpAQCAtNTMsNDAgKzcwLDQ4IEBAIHZvaWQgU1ZHU3ltYm9sRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1ZH
U3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNW
R0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhp
cyk7CiAKKyAgICAvLyBFdmVyeSBvdGhlciBwcm9wZXJ0eSBjaGFuZ2UgaXMgaWdub3JlZC4KICAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKQogICAgICAgICB1cGRhdGVS
ZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwogfQogCiB2b2lkIFNWR1N5bWJvbEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAg
ICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewotICAgICAgICBzeW5jaHJvbml6ZVByZXNl
cnZlQXNwZWN0UmF0aW8oKTsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7CiAgICAgICAg
IHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJv
bml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7
CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1l
KTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZl
QXNwZWN0UmF0aW8oKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0Jv
eEF0dHIpCi0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgIGVsc2UgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxl
ZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAg
IHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIH0gCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGll
cyhhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1N5bWJvbEVsZW1l
bnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTeW1ib2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N5bWJvbEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3ltYm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU1ZHU3ltYm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgpAQCAtNTYs
MzMgKzU3LDY4IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXgKICAg
ICBzZXRUZXh0Q29udGVudCh0ZXh0Q29udGVudCwgaWdub3JlKTsKIH0KIAorYm9vbCBTVkdUUmVm
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKQorICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
c3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29u
dGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAg
ICAgdXBkYXRlUmVmZXJlbmNlZFRleHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RSZWZFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRp
b25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGlmICghcmVuZGVyZXIoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RSZWZF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5
bmNocm9uaXplSHJlZigpOworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgU1ZH
VVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVFJlZkVsZW1lbnQ6
OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUUmVmRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVm
RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVm
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHVFJlZkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAg
dmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4
LDEzIEBAIGJvb2wgU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZShjb24KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAordm9pZCBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNo
U2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyZXF1aXJlZEZlYXR1cmVzQXR0cik7CisgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlcXVpcmVkRXh0ZW5zaW9uc0F0dHIpOwor
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzeXN0ZW1MYW5ndWFnZUF0dHIp
OworfQorCiB2b2lkIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlm
IChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VGVzdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogCisgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4mKTsKICAgICBib29sIGhhbmRsZUF0dHJpYnV0ZUNoYW5nZShjb25zdCBTVkdF
bGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc3luY2hyb25pemVQcm9w
ZXJ0aWVzKFNWR0VsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVu
c2lvbnMuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1RleHRRdWVyeS5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgi
CkBAIC0xNzksNjIgKzE4MCwxMDggQEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVj
dFN1YlN0cgogICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3Rh
cnQsIGVuZCkpOwogfQogCitib29sIFNWR1RleHRDb250ZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAg
ICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmli
dXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRl
ZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKTsKKyAgICB9CisgICAgcmV0
dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNW
R1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxl
bmd0aEFkanVzdEF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3RoQWRqdXN0VHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHTGVuZ3RoQWRqdXN0VHlwZT46OmZyb21TdHJpbmco
YXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAg
ICAgIHNldExlbmd0aEFkanVzdEJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRleHRM
ZW5ndGhBdHRyKSB7CiAgICAgICAgIG1fdGV4dExlbmd0aC52YWx1ZSA9IFNWR0xlbmd0aChMZW5n
dGhNb2RlT3RoZXIsIGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAobV90ZXh0TGVuZ3RoLnZh
bHVlLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHRleHQgYXR0cmli
dXRlIDx0ZXh0TGVuZ3RoPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMoWE1MTmFtZXM6OnNw
YWNlQXR0cikpIHsKLSAgICAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgcHJlc2VydmVTdHJpbmcsICgicHJlc2VydmUiKSk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSBwcmVzZXJ2ZVN0cmluZykKLSAgICAgICAgICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1
ZVByZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlTm93cmFwKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAg
U1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKKyAgICAg
ICAgaWYgKGF0dHItPm5hbWUoKS5tYXRjaGVzKFhNTE5hbWVzOjpzcGFjZUF0dHIpKSB7CisgICAg
ICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcHJlc2VydmVT
dHJpbmcsICgicHJlc2VydmUiKSk7CisKKyAgICAgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09
IHByZXNlcnZlU3RyaW5nKQorICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVQcmUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2hpdGVTcGFjZSwg
Q1NTVmFsdWVOb3dyYXApOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplTGVuZ3RoQWRqdXN0KCk7CiAgICAgICAgIHN5bmNocm9u
aXplVGV4dExlbmd0aCgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBh
dHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
TGVuZ3RoQWRqdXN0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRM
ZW5ndGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVRleHRMZW5n
dGgoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkg
ewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBl
bHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
IAogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1l
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQyLDEyICsyODksNyBAQCB2b2lkIFNWR1RleHRDb250
ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
ZXh0TGVuZ3RoQXR0cikKICAgICAgICAgbV9zcGVjaWZpZWRUZXh0TGVuZ3RoID0gbV90ZXh0TGVu
Z3RoLnZhbHVlOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCkpCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9y
TGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVFNwYW5FbGVtZW50LmgiCkBAIC00OCwxNyArNDks
MzIgQEAgUGFzc1JlZlB0cjxTVkdUZXh0RWxlbWVudD4gU1ZHVGV4dEVsZW1lbgogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHVGV4dEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAor
Ym9vbCBTVkdUZXh0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6dHJhbnNmb3JtQXR0cik7CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29u
dGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1RleHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKFNWR1RyYW5zZm9ybWFibGU6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAgICAg
ICAgU1ZHVHJhbnNmb3JtTGlzdCBuZXdMaXN0OwogICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFi
bGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKG5ld0xpc3QsIGF0dHItPnZhbHVlKCkpKQogICAg
ICAgICAgICAgbmV3TGlzdC5jbGVhcigpOwogCiAgICAgICAgIGRldGFjaEFuaW1hdGVkVHJhbnNm
b3JtTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VHJhbnNmb3JtQmFz
ZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZQotICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBTVkdFbGVtZW50KiBTVkdUZXh0
RWxlbWVudDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CkBAIC0xMjQsMjQgKzE0MCw0
NSBAQCBib29sIFNWR1RleHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAKIHZvaWQgU1ZH
VGV4dEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFNWR1RyYW5zZm9ybWFibGU6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
cmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0
ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJl
c291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RleHRFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwor
ICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplVHJh
bnNmb3JtKCk7CisgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IGFueVFOYW1lKCkgfHwgU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVUcmFuc2Zvcm0o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVGV4dEVsZW1lbnQ6OmF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5o
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
U1ZHVGV4dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSogc3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01MCw2MSArNTEsMTA0IEBAIFBhc3NSZWZQdHI8U1ZHVGV4dFBhdGhF
bGVtZW50PiBTVkdUZXh0UGEKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1RleHRQYXRoRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1RleHRQYXRoRWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7
CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnN0YXJ0T2Zmc2V0QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjptZXRob2RBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnNwYWNpbmdBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
Y29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0
YXJ0T2Zmc2V0QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUo
KSkpIHsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnN0YXJ0T2Zmc2V0QXR0cikgewogICAgICAgICBzZXRTdGFydE9mZnNldEJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZU90aGVyLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6bWV0aG9kQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWV0aG9kQXR0cikgewogICAgICAg
ICBTVkdUZXh0UGF0aE1ldGhvZFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PFNWR1RleHRQYXRoTWV0aG9kVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAo
cHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRNZXRob2RCYXNlVmFsdWUocHJvcGVy
dHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwYWNp
bmdBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpzcGFjaW5nQXR0cikgewogICAgICAgICBTVkdUZXh0UGF0aFNwYWNpbmdU
eXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdUZXh0UGF0aFNwYWNpbmdU
eXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkK
ICAgICAgICAgICAgIHNldFNwYWNpbmdCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisK
KyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZH
VGV4dFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cikKICAgICAgICAgdXBkYXRlUmVs
YXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKIAotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGFydE9mZnNldEF0
dHIKLSAgICAgICAgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNv
dXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSByZW5kZXJlcigpKQorICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKG9iamVjdCk7CiB9CiAKIHZvaWQgU1ZHVGV4
dFBhdGhFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZVN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHN5bmNocm9uaXplTWV0aG9kKCk7
CiAgICAgICAgIHN5bmNocm9uaXplU3BhY2luZygpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYo
KTsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZVN0YXJ0T2Zmc2V0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1ldGhv
ZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjptZXRob2RBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWV0aG9kKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwYWNpbmdBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BhY2lu
Z0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTcGFjaW5nKCk7Ci0gICAgZWxzZSBpZiAoU1ZH
VVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHVGV4dFBhdGhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2
b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgpAQCAtNDQs
MzUgKzQ1LDY3IEBAIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3NpdGkKIHsK
IH0KIAorYm9vbCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAg
ICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmR4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpkeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cm90YXRlQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNv
bnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1RleHRDb250ZW50RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBT
VkdMZW5ndGhMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+dmFsdWUo
KSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRYTGlzdFdyYXBwZXJz
KG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7
CiAgICAgICAgIFNWR0xlbmd0aExpc3QgbmV3TGlzdDsKICAgICAgICAgbmV3TGlzdC5wYXJzZShh
dHRyLT52YWx1ZSgpLCBMZW5ndGhNb2RlSGVpZ2h0KTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRZ
TGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShuZXdM
aXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpkeEF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3RoTGlzdCBuZXdMaXN0OwogICAgICAgICBu
ZXdMaXN0LnBhcnNlKGF0dHItPnZhbHVlKCksIExlbmd0aE1vZGVXaWR0aCk7CiAgICAgICAgIGRl
dGFjaEFuaW1hdGVkRHhMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRE
eEJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZHlBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3RoTGlzdCBuZXdM
aXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHItPnZhbHVlKCksIExlbmd0aE1vZGVIZWln
aHQpOwogICAgICAgICBkZXRhY2hBbmltYXRlZER5TGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgp
KTsKICAgICAgICAgc2V0RHlCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpIHsKICAg
ICAgICAgU1ZHTnVtYmVyTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHIt
PnZhbHVlKCkpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFJvdGF0ZUxpc3RXcmFwcGVycyhuZXdM
aXN0LnNpemUoKSk7CiAgICAgICAgIHNldFJvdGF0ZUJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9
IGVsc2UKLSAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlUG9zaXRpb25pbmdWYWx1ZXNJblJl
bmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC0xMDEsNyArMTM0LDEyIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCB1cGRhdGVQb3NpdGlvbmluZ1ZhbHUKIAogdm9pZCBTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBib29sIHVw
ZGF0ZVJlbGF0aXZlTGVuZ3RocyA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyCkBA
IC0xMjAsNiArMTU4LDggQEAgdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzdmdBdHRy
aQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291
cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hh
bmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKQEAgLTEzNSwyNyAr
MTc1LDQ3IEBAIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2hpbGRyZW4KIAogdm9p
ZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7
CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwogICAg
ICAgICBzeW5jaHJvbml6ZVJvdGF0ZSgpOworICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIp
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpkeEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplRHkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cm90
YXRlQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cm90YXRlQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJvdGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6ZmlsbFBhc3NlZEF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9v
bCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSog
YWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNiwxMSArMjA2LDYgQEAgYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0
dAogICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7CiB9CiAKLWJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6
aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBy
ZXR1cm4gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHI7Ci19Ci0KIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxl
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2Nh
dGFibGU6OkNUTVNjb3BlKSBjb25zdCB7IHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7
IH0KICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkg
Y29uc3QgPSAwOwotCi0gICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdVUklSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxNSBA
QCBTdHJpbmcgU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoY29uc3QgCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCit2b2lkIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB4bGlua1ByZWZpeCwgKCJ4bGluayIpKTsK
KyAgICBRdWFsaWZpZWROYW1lIGhyZWZXaXRoUHJlZml4ID0gWExpbmtOYW1lczo6aHJlZkF0dHI7
CisgICAgaHJlZldpdGhQcmVmaXguc2V0UHJlZml4KHhsaW5rUHJlZml4KTsKKyAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChocmVmV2l0aFByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoWExpbmtOYW1lczo6aHJlZkF0dHIpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuaAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOworICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+Jik7CiAKICAgICBzdGF0aWMgU3RyaW5nIGdldFRhcmdldChjb25zdCBTdHJpbmcm
IHVybCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCwzMSArOTgsNjMgQEAgU1ZHRWxlbWVudEluc3RhbmNlKiBTVkdVc2VFbGVt
ZW50OjphbmltYQogICAgIHJldHVybiAwOwogfQogIAorYm9vbCBTVkdVc2VFbGVtZW50Ojppc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJp
YnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRl
cyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJ
UmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
VXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAg
ICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVl
KCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdo
dCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFs
dWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBp
ZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHdpZHRo
QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdXNl
IGF0dHJpYnV0ZSA8d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAg
ICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRy
LT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8
IDAuMCkKKyAgICAgICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAg
ICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3Io
IkEgbmVnYXRpdmUgdmFsdWUgZm9yIHVzZSBhdHRyaWJ1dGUgPGhlaWdodD4gaXMgbm90IGFsbG93
ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5n
U3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNXZWxsRm9ybWVkRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQpAQCAtMTQ4LDcgKzE4MCwxMiBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoCiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRp
b25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgaXNYWUF0dHJpYnV0
ZSA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eUF0dHI7CiAgICAgYm9vbCBpc1dpZHRoSGVpZ2h0QXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OndpZHRoQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cjsKQEAg
LTE5OCwxNSArMjM1LDE2IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIGludmFsaWRhdGVTaGFk
b3dUcmVlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5j
aHJvbml6ZVkoKTsKQEAgLTIxNSwyMyArMjUzLDUxIEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSgKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6
c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwot
ICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAg
ICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywg
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdVc2VFbGVtZW50Ojph
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCk7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNw
cAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwzNyArNDgsNjggQEAgUGFzc1JlZlB0cjxTVkdWaWV3
RWxlbWVudD4gU1ZHVmlld0VsZW1lbgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVmlld0Vs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBTVkdWaWV3RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQorYm9vbCBTVkdWaWV3RWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmlld1RhcmdldEF0dHIpCi0gICAgICAg
IHZpZXdUYXJnZXQoKS5yZXNldChhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpCi0gICAgICAgICAgIHx8IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
ZG9jdW1lbnQoKSwgYXR0cikKLSAgICAgICAgICAgfHwgU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7
CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVk
QXR0cmlidXRlcyk7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHWm9vbUFuZFBhbjo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnZpZXdUYXJnZXRBdHRyKTsKKyAgICB9CisgICAgcmV0
dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQogCit2b2lkIFNW
R1ZpZXdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7Cisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CiAgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmlld1Rhcmdl
dEF0dHIpIHsKKyAgICAgICAgdmlld1RhcmdldCgpLnJlc2V0KGF0dHItPnZhbHVlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIFNWR1ZpZXdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkp
IHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAg
ICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNw
ZWN0UmF0aW8oKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRp
ZXMoYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld1RhcmdldEF0dHIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwot
ICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVmlld0VsZW1lbnQ6
OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3
RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHVmlld0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAgIGJvb2wg
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2
b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdab29tQW5kUGFuLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHWm9vbUFuZFBhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDExIEBAIGJv
b2wgU1ZHWm9vbUFuZFBhbjo6aXNLbm93bkF0dHJpYnV0ZShjb24KICAgICByZXR1cm4gYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6Onpvb21BbmRQYW5BdHRyOwogfQogCit2b2lkIFNWR1pvb21BbmRQYW46
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVk
QXR0cmlidXRlcykKK3sKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6em9v
bUFuZFBhbkF0dHIpOworfQorCiBzdGF0aWMgY29uc3QgVUNoYXIgZGlzYWJsZVtdID0gIHsnZCcs
ICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZSd9Owogc3RhdGljIGNvbnN0IFVDaGFyIG1hZ25p
ZnlbXSA9ICB7J20nLCAnYScsICdnJywgJ24nLCAnaScsICdmJywgJ3knfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdab29tQW5kUGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAg
ICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQg
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CiAKICAgICBi
b29sIHBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5k
KTsKIAo=
</data>
<flag name="commit-queue"
          id="87494"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94220</attachid>
            <date>2011-05-20 08:11:37 -0700</date>
            <delta_ts>2011-05-20 09:09:18 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>PerfPatch-v3.diff</filename>
            <type>text/plain</type>
            <size>318151</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAwIEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBzdmdBdHRyaWJ1dGVDaGFuZ2VkL3N5bmNo
cm9uaXplUHJvcGVydHkvcGFyc2VNYXBwZWRBdHRyaWJ1dGUgc2hvdWxkIGJlIG9wdGltaXplZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExODMKKwor
ICAgICAgICBFeGFtcGxlOiByZWN0LnguYmFzZVZhbC52YWx1ZSA9IDEwMDsKKyAgICAgICAgV2hh
dCBoYXBwZW5zOiBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgaXMgaW52b2tlZCB3aXRoICJTVkdOYW1lczo6cmVjdEF0dHIi
IGFzIHBhcmFtZXRlci4KKworICAgICAgICB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorICAgICAgICB7CisgICAg
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgICAgICAvLyBIYW5kbGUgbXkgb3duIGF0dHJpYnV0ZSBjaGFu
Z2VzLi4uCisgICAgICAgIH0KKworICAgICAgICBXZSBhbHdheXMgdHJhdmVyc2UgdGhlIGJhc2Ug
Y2xhc3MgaGllYXJjaHksIHdoZW4gaW52b2tpbmcgc3ZnQXR0cmlidXRlQ2hhbmdlZCAodGhpcyBo
YXMgYSByZWFzb24sIGV4cGxhaW5lZCBiZWxvdyAoKikgKS4KKyAgICAgICAgU3dpdGNoIHRvIGEg
bW9yZSBlZmZpY2llbnQgcGF0dGVybiwgYnkgcHJvdmlkaW5nIGEgImJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOyIgZnVuY3Rpb24gZm9yIGFsbCBTVkcqRWxl
bWVudHMuCisgICAgICAgIEl0IGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHRoZSBwYXJ0aWN1bGFy
IFNWRypFbGVtZW50IGNsYXNzIGhhbmRsZXMgKGJ1dCBub3QgaXRzIHBhcmVudCBjbGFzc2VzIGF0
dHJpYnV0ZXMpLiBGb3IgZXhhbXBsZSBTVkdSZWN0RWxlbWVudAorICAgICAgICBjb250YWlucyB4
L3kvd2lkdGgvaGVpZ2h0L3J4L3J5IGF0dHJpYnV0ZXMsIGFuZCB0aGUgb25lcyBmcm9tIFNWR1Rl
c3RzL1NWR0xhbmdTcGFjZS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICh4bWw6c3BhY2Uv
bGFuZywgZXRjLiksCisgICAgICAgIGJ1dCBub3QgZWcuIHRyYW5zZm9ybSBhcyB0aGF0J3MgaGFu
ZGxlZCBieSB0aGUgcGFyZW50IGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lgor
CisgICAgICAgIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUuY29udGFpbnMoYXR0ck5hbWUpKSB7CisgICAgICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2Uga25vdyBmb3Igc3VyZSBpdCdzIG9uZSBvZiBvdXIg
YXR0cmlidXRlcyB0aGF0IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgLy8gTm90ZSBmb3IgZWcu
IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCB0aGUgY2FsbCBmcm9tIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkLCB3b3VsZCBiZSBpbW1lZGlhdGVseSBmb3J3YXJkZWQgdG8gdGhl
IGJhc2UgY2xhc3MsIHdoaWNoIGhhbmRsZXMgdHJhbnNmb3JtQXR0ciBjaGFuZ2VzKQorCisgICAg
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7IGRvX3dvcmsoKTsgcmV0
dXJuOyB9CisgICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7IGRv
X3dvcmsoKTsgcmV0dXJuOyB9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vIEFzc3Vy
ZSB0aGF0IHdlIGhhbmRsZWQgYWxsIHByb3BlcnRpZXMgd2UgY2xhaW0gc3VwcG9ydCBmb3IgaW4g
ImlzU3VwcG9ydGVkQXR0cmlidXRlKCkiLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICBFeGFjdGx5IHRoZSBzYW1lIHBhdHRlcm4gY2FuIGJl
IGFwcGxpZWQgdG8gc3luY2hyb25pemVQcm9wZXJ0eSBhbmQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUg
dG8gc3BlZWQgdGhlbSB1cCBhcyB3ZWxsLgorCisgICAgICAgIE5vdGUgKCopOgorICAgICAgICBF
dmVyeSBzdmdBdHRyaWJ1dGVDaGFuZ2VkIGNhbGwgZnJvbSBhIGNsYXNzIGxpa2UgU1ZHUmVjdEVs
ZW1lbnQgaGFzIHRvIHJlYWNoIHRoZSBiYXNlIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQsIGFzIGl0IGhhbmRsZXMKKyAgICAgICAgaW52YWxpZGF0aW9uIG9mIHRo
ZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudC4gU2F5IHRoYXQgYSA8cmVjdD4gaXMgcmVmZXJlbmNl
ZCBieSBhIDx1c2U+IGFuZCB3ZSBjaGFuZ2UgdGhlICd4JyBhdHRyaWJ1dGUgb2YgdGhlIDxyZWN0
PiwgdGhlbgorICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkLCBj
YWxscyBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQo
dGhpcyksIHNvIHRoYXQgdGhlIDx1c2U+IGNhbiByZWJ1aWxkIGl0cyBzaGFkb3cgdHJlZS4uLgor
ICAgICAgICBUaGF0J3MgdGhlIG9ubHkgcmVhc29uIHdlIGRvIHRoZSBiYXNlLWNsYXNzIGRhbmNl
LCBhbmQgY2FuIGVhc2lseSBiZSBhdm9pZGVkLgorCisgICAgICAgIEFkZCAiU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBndWFyZCh0aGlzKSIgc3RhdG1lbnRzIGluIGFsbCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIGltcGxlbWVudGF0aW9ucywgdGhhdCBjYWxscyBpbnZhbGlkYXRl
QWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpCisgICAgICAgIHVwb24gZGVzdHJ1Y3Rpb24sIGFm
dGVyIHdlJ3ZlIHJlYWN0ZWQgdG8gdGhlIHN2ZyBhdHRyaWJ1dGUgY2hhbmdlLiBUaGlzIGFzc3Vy
ZXMgd2UgbmV2ZXIgZm9yZ2V0IHRvIGNhbGwgdGhlIGludmFsaWRhdGlvbiBtZXRob2QgYW55d2hl
cmUsIGFuZCBkb24ndAorICAgICAgICBuZWVkIHRvIHJlbHkgb24gdGhlIGJhc2UgY2xhc3Mgc3Zn
QXR0cmlidXRlQ2hhbmdlZCgpIGNhbGwgdG8gZG8gaXQuCisgICAgICAgCisgICAgICAgIE9ubHkg
YWZmZWN0cyBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBz
dmcvU1ZHQUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Np
cmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q2lyY2xlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0N1cnNvckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkOjpJbnZhbGlkYXRpb25HdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkOjp+SW52YWxpZGF0aW9uR3VhcmQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNl
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TWVyZ2VOb2RlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZz
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAg
ICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJv
bml6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdHRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KToKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHTGFu
Z1NwYWNlLmg6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xpbmVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAg
ICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNYXJrZXJFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01hc2tFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkpOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
dGVybkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR1BhdHRlcm5FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
Y3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1JlY3RF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0b3BFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdTdG9wRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHVGVzdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5oOgorICAgICAg
ICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyk6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5oOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVmlld0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1ZpZXdFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR1pv
b21BbmRQYW4uaDoKKwogMjAxMS0wNS0yMCAgVG9uaXMgVGlpZ2kgIDx0b25pc3RpaWdpQGdtYWls
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTc0LDI2ICs3NSw1
MSBAQCBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKICAgICByZXR1cm4gU1ZHU3R5
bGVkRWxlbWVudDo6dGl0bGUoKTsKIH0KIAorYm9vbCBTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0
cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhcmdldEF0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKQotICAgICAgICBz
ZXRTVkdUYXJnZXRCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKSB7CisgICAgICAgIHNl
dFNWR1RhcmdldEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdBRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3Rh
bmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIC8v
IFVubGlrZSBvdGhlciBTVkcqRWxlbWVudCBjbGFzc2VzLCBTVkdBRWxlbWVudCBvbmx5IGxpc3Rl
bnMgdG8gU1ZHVVJJUmVmZXJlbmNlIGNoYW5nZXMKICAgICAvLyBhcyBub25lIG9mIHRoZSBvdGhl
ciBwcm9wZXJ0aWVzIGNoYW5nZXMgdGhlIGxpbmtpbmcgYmVoYXZpb3VyIGZvciBvdXIgPGE+IGVs
ZW1lbnQuCkBAIC0xMjMsMjQgKzE0OSw0MSBAQCB2b2lkIFNWR0FFbGVtZW50OjpmaWxsQXR0cmli
dXRlVG9Qcm9wZXJ0CiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTVkdUYXJnZXQoKTsKICAg
ICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVNWR1RhcmdldCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHQUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIHN2Z1RhcmdldCgpOyB9CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNCArODksMjkgQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6cGF0aEF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhBdHRyKSB7CiAgICAgICAgIG1fcGF0
aCA9IFBhdGgoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQ
YXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9t
U3RyaW5nKGF0dHItPnZhbHVlKCksIG1fcGF0aCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAgICAgCiBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Um90YXRlTW9kZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cm90
YXRlTW9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjQgKzgxLDM5IEBAIEFuaW1hdGVk
QXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3IKICAgICByZXR1cm4gQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0OwogfQogCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgcmV0dXJu
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInRyYW5zbGF0ZSIp
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICBpZiAodmFsdWUgPT0gInRyYW5zbGF0ZSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgICAgICBlbHNlIGlmIChhdHRy
LT52YWx1ZSgpID09ICJzY2FsZSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJzY2FsZSIp
CiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU7
Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJvdGF0ZSIpCisgICAgICAgIGVs
c2UgaWYgKHZhbHVlID09ICJyb3RhdGUiKQogICAgICAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUo
KSA9PSAic2tld1giKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAic2tld1giKQogICAgICAg
ICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAg
ICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJza2V3WSIpCisgICAgICAgIGVsc2UgaWYgKHZh
bHVlID09ICJza2V3WSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1k7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLSAgICAKIHN0YXRpYyBTVkdUcmFuc2Zvcm1M
aXN0KiB0cmFuc2Zvcm1MaXN0Rm9yKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Q7CiAgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50KikgY29uc3Q7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShj
b25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMjUgKzEzNiw1NyBAQCBzdGF0
aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogfQogCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
a2V5VGltZXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmtleVBvaW50c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisgICAgIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewogICAgICAgICBhdHRyLT52YWx1
ZSgpLnN0cmluZygpLnNwbGl0KCc7JywgbV92YWx1ZXMpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7CiAgICAg
ICAgIHBhcnNlS2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlUaW1lcywgdHJ1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyICYmIGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
c3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9ubHkgYnV0IGl0IGlz
IHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCi0gICAgICAgIC8vIHdoZXJlIHRoZSBvdGhlciB0aW1p
bmcgY2FsY3VsYXRhdGlvbnMgYXJlLgotICAgICAgICBwYXJzZUtleVRpbWVzKGF0dHItPnZhbHVl
KCksIG1fa2V5UG9pbnRzLCBmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgeworICAgICAgICBp
ZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgc3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9u
bHkgYnV0IGl0IGlzIHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCisgICAgICAgICAgICAvLyB3aGVy
ZSB0aGUgb3RoZXIgdGltaW5nIGNhbGN1bGF0YXRpb25zIGFyZS4KKyAgICAgICAgICAgIHBhcnNl
S2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlQb2ludHMsIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpIHsKICAgICAgICAgcGFyc2VLZXlTcGxpbmVzKGF0dHItPnZhbHVl
KCksIG1fa2V5U3BsaW5lcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0
dHIsIGJvb2wgcHJlc2VydmVEZWNscykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogCiAgICAgZW51bSBDYWxjTW9kZSB7IENhbGNNb2RlRGlzY3JldGUsIENhbGNN
b2RlTGluZWFyLCBDYWxjTW9kZVBhY2VkLCBDYWxjTW9kZVNwbGluZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKIApAQCAtNTIsMzAgKzUzLDYyIEBAIFBhc3NSZWZQdHI8U1ZHQ2lyY2xlRWxlbWVudD4g
U1ZHQ2lyY2xlRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0NpcmNsZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdDaXJjbGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6ckF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExl
bmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOyAgICAgICAKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKSB7CisgICAgICAgIHNl
dEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikgewogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CiAgICAgICAgIHNldFJCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBpZiAockJh
c2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgY2ly
Y2xlIDxyPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpjeUF0dHIKQEAgLTk3LDM0ICsxMzAsNTcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNW
R0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
aWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3goKTsK
ICAgICAgICAgc3luY2hyb25pemVDeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rl
c3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplQ3koKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUigpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdU
ZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0NpcmNsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIApAQCAtNDksNTYgKzUwLDg2IEBAIFBhc3NSZWZQdHI8
U1ZHQ2xpcFBhdGhFbGVtZW50PiBTVkdDbGlwUGEKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0NsaXBQYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0NsaXBQ
YXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjbGlwUGF0aFVuaXRz
QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0
dHJOYW1lKTsKK30KKwogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldENsaXBQ
YXRoVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChT
VkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmNs
aXBQYXRoVW5pdHNBdHRyCi0gICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwog
fQogCiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUNsaXBQYXRoVW5pdHMoKTsKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmNsaXBQYXRoVW5pdHNBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVDbGlwUGF0aFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHQ2xpcFBhdGhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVk
c1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDM2ICs0OCw3NCBAQCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dDo6U1ZHCiB7CiB9CiAKK2Jvb2wgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFibGVWYWx1ZXNBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNsb3BlQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbnRlcmNlcHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmFtcGxpdHVkZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZXhwb25lbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9mZnNldEF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0eXBlQXR0cikgewogICAgICAgICBDb21wb25lbnRUcmFuc2ZlclR5cGUgcHJvcGVydHlWYWx1
ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvbmVudFRyYW5zZmVyVHlwZT46OmZyb21TdHJpbmco
dmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRU
eXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cikgewog
ICAgICAgICBTVkdOdW1iZXJMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UodmFs
dWUpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFRhYmxlVmFsdWVzTGlzdFdyYXBwZXJzKG5ld0xp
c3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VGFibGVWYWx1ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNsb3BlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNs
b3BlQXR0cikgewogICAgICAgICBzZXRTbG9wZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW50ZXJjZXB0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmludGVyY2VwdEF0dHIpIHsKICAgICAgICAgc2V0SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphbXBsaXR1
ZGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YW1wbGl0dWRlQXR0cikgewogICAgICAgICBzZXRBbXBsaXR1ZGVCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmV4cG9uZW50QXR0cikgewogICAgICAgICBzZXRFeHBvbmVu
dEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAgICAgICAgc2V0T2Zm
c2V0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsKQEAgLTg2
LDIzICsxMjQsNTEgQEAgdm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudAog
ICAgICAgICBzeW5jaHJvbml6ZUFtcGxpdHVkZSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4cG9u
ZW50KCk7CiAgICAgICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIFNWR0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVU
eXBlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dGFibGVWYWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzbG9wZUF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVTbG9wZSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSW50ZXJjZXB0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmFt
cGxpdHVkZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVBbXBsaXR1
ZGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZXhwb25lbnRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpl
eHBvbmVudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVFeHBvbmVudCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDIyICs1Niw0NCBAQCBTVkdDdXJzb3JFbGVtZW50
Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiAgICAgICAgICgqaXQpLT5jdXJzb3JFbGVtZW50UmVtb3Zl
ZCgpOwogfQogCitib29sIFNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0
aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWln
aHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgeworICAg
ICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0N1cnNvckVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKQEAgLTEwOSw0NCArMTMyLDY0IEBAIHZvaWQgU1ZHQ3Vy
c29yRWxlbWVudDo6cmVtb3ZlUmVmZXJlbmNlZEUKIAogdm9pZCBTVkdDdXJzb3JFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eUF0dHIKLSAgICAgICAgfHwgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxl
bWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
IAotICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9CisgICAgLy8gQW55IGNoYW5nZSBvZiBhIGN1cnNv
ciBzcGVjaWZpYyBhdHRyaWJ1dGUgdHJpZ2dlcnMgdGhpcyByZWNhbGMuCisgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7CisgICAg
SGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQo
KTsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6
ZVkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWSgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAg
IGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBl
bHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ3Vyc29yRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDdXJzb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVz
dHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTUgQEAgcHVibGljOgogCiAg
ICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgPyBt
X2VsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSA6IDA7IH0KIAorICAgIGNsYXNzIEludmFsaWRhdGlv
bkd1YXJkIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW52YWxpZGF0aW9uR3VhcmQp
OworICAgIHB1YmxpYzogICAgCisgICAgICAgIEludmFsaWRhdGlvbkd1YXJkKFNWR0VsZW1lbnQq
IGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQorICAgICAgICB+SW52YWxpZGF0aW9u
R3VhcmQoKSB7IFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxl
bWVudChtX2VsZW1lbnQpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHRWxlbWVudCogbV9l
bGVtZW50OworICAgIH07CisKICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWxsSW5zdGFuY2Vz
T2ZFbGVtZW50KFNWR0VsZW1lbnQqKTsKIAogICAgIHVzaW5nIFRyZWVTaGFyZWQ8U1ZHRWxlbWVu
dEluc3RhbmNlPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNTQsMzQgKzU1LDcw
IEBAIFBhc3NSZWZQdHI8U1ZHRWxsaXBzZUVsZW1lbnQ+IFNWR0VsbGlwc2UKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0VsbGlwc2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K2Jvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
Y3hBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN5QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeEF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnlBdHRyKTsKKyAgICB9
CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQor
CiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpjeEF0dHIpIHsKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVX
aWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Y3lBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xl
bmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBz
ZXRSeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7
CiAgICAgICAgIGlmIChyeEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cng+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAg
ICAgICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52
YWx1ZSgpKSk7CiAgICAgICAgIGlmIChyeUJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cnk+IGlzIG5vdCBhbGxvd2VkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZh
bGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5n
dGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIKQEAgLTEwNCwxNSAr
MTQxLDE2IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRWxsaXBzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1l
KCkpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7
CkBAIC0xMjAsMjEgKzE1OCw0NiBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplUnkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVSeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnJ5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ5KCk7Ci0gICAgZWxzZSBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0
czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHRWxsaXBzZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBA
QCBib29sIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vCiAgICAgcmV0dXJuIGF0
dHJOYW1lID09IFNWR05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQXR0cjsKIH0KIAor
dm9pZCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRB
dHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTIgQEAKICNkZWZpbmUgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZF9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNzIFF1YWxpZmllZE5hbWU7CiAKIC8vIE5vdGVz
IG9uIGEgU1ZHIDEuMSBzcGVjIGRpc2NyZXBhbmN5OgogLy8gVGhlIFNWRyBET00gZGVmaW5lcyB0
aGUgYXR0cmlidXRlIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgYXMgYmVpbmcgb2YgdHlwZSBT
VkdBbmltYXRlZEJvb2xlYW4sIHdoZXJlYXMgdGhlIApAQCAtMzgsNiArNDAsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wg
aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKGNv
bnN0IGJvb2wmKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKQEAgLTQ3LDE5ICs0OCw0MyBAQCBQYXNzUmVmUHRyPFNWR0ZFQmxlbmRF
bGVtZW50PiBTVkdGRUJsZW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUJsZW5kRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0ZFQmxlbmRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0
dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1vZGVBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptb2RlQXR0
cikgewogICAgICAgICBCbGVuZE1vZGVUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxCbGVuZE1vZGVUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9w
ZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1
ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAg
ICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
Ym9vbCBTVkdGRUJsZW5kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc0LDMzICs5
OSw1NyBAQCBib29sIFNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBCiAKIHZvaWQg
U1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikgewogICAgICAg
ICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyCi0gICAgICAgIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAg
IGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1v
ZGUoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIo
KTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVNb2RlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVJbjIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVCbGVu
ZEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVCbGVuZEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CiAgICAgdmly
dHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCkBAIC00NywyMiArNDgsNDYgQEAgUGFzc1JlZlB0cjxTVkdGRUNvbG9yTWF0
cml4RWxlbWVudD4gU1ZHRgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbG9yTWF0cml4
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBl
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2YWx1ZXNB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgQ29sb3JNYXRyaXhUeXBlIHByb3BlcnR5
VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb2xvck1hdHJpeFR5cGU+Ojpmcm9tU3RyaW5nKGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAg
ICBzZXRUeXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4x
QmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBu
ZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5p
bWF0ZWRWYWx1ZXNMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRWYWx1
ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9v
bCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc5LDMy
ICsxMDQsNTcgQEAgYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRQogCiB2
b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNB
dHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omlu
QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
ICAgICAgICAgc3luY2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRy
KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1
ZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp2YWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjphdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMSArNDgsNDkg
QEAgUGFzc1JlZlB0cjxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICByZXR1cm4gc3Vw
cG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+
bmFtZSgpKSkgewogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CisgICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAorICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTUx
LDI3ICs1Miw2NyBAQCBQYXNzUmVmUHRyPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkp
OworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluMkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6b3BlcmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmsxQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjprMkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6azNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Oms0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNv
bnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHIt
Pm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewogICAgICAgICBDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3Np
dGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0
eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShwcm9wZXJ0eVZh
bHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAg
ICAgICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFBdHRyKSB7CiAgICAgICAgIHNldEsxQmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjprMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjprMkF0dHIpIHsKICAgICAgICAgc2V0SzJCYXNlVmFsdWUodmFsdWUudG9G
bG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmszQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmszQXR0cikgewogICAgICAgICBzZXRLM0Jhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRy
KSB7CiAgICAgICAgIHNldEs0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQpAQCAtOTUsMjQgKzEzNiwzMiBAQCBib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6c2V0RmlsdGVyRWZmCiAKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0
YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cgogICAgICAgICB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azFBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpr
MkF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cgotICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6azRBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIp
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9vcGVyYXRvcigpOwogICAgICAgICBzeW5jaHJv
bml6ZUluMSgpOwpAQCAtMTIxLDIzICsxNzAsNTEgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OnN5bmNocm9uaXplUAogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplSzMoKTsKICAgICAgICAgc3luY2hyb25pemVLNCgpOworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplX29wZXJhdG9yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVJbjIoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSzMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
azRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjprNEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLNCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgU1ZHRkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpAQCAtODMs
NDcgKzg0LDk5IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJpeEUKICAg
ICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBv
cnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpvcmRlckF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjplZGdlTW9kZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZGl2aXNvckF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Ymlhc0F0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WEF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WUF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJl
c2VydmVBbHBoYUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5j
b250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVl
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yZGVyQXR0cikgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6b3JkZXJBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAgc2V0T3JkZXJY
QmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0T3JkZXJZQmFzZVZhbHVlKHkpOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0
cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CiAgICAgICAgIEVkZ2VNb2RlVHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52
YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0
RWRnZU1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0
dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBh
cnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRLZXJuZWxNYXRyaXhMaXN0V3JhcHBl
cnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRLZXJuZWxNYXRyaXhCYXNlVmFsdWUobmV3
TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpdmlzb3JB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZGl2aXNvckF0dHIpIHsKICAgICAgICAgc2V0RGl2aXNvckJhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Ymlh
c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAgICAgc2V0Qmlhc0Jhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFy
Z2V0WEF0dHIpCi0gICAgICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0
KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIp
Ci0gICAgICAgIHNldFRhcmdldFlCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0KCkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnRhcmdldFhBdHRyKSB7CisgICAgICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUu
c3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpIHsKKyAgICAgICAgc2V0
VGFyZ2V0WUJhc2VWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEtl
cm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExl
bmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRy
KSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCiAgICAgICAgICAgICBzZXRQcmVzZXJ2
ZUFscGhhQmFzZVZhbHVlKHRydWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAiZmFsc2Ui
KQogICAgICAgICAgICAgc2V0UHJlc2VydmVBbHBoYUJhc2VWYWx1ZShmYWxzZSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2NCw3ICsyMTcsMTIgQEAgdm9pZCBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6c2V0S2VybgogCiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQo
dGhpcyk7CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cgogICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIKQEAgLTE3MiwxOSArMjMw
LDIzIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHIKICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6a2VybmVsVW5pdExlbmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnByZXNlcnZlQWxwaGFBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJl
c2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JkZXJBdHRy
Ci0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxNYXRyaXhBdHRyKQorICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0cikgewogICAgICAg
ICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFZGdlTW9kZSgpOwogICAgICAgICBzeW5jaHJvbml6ZURpdmlzb3IoKTsKQEAgLTE5
NCwyNCArMjU2LDUyIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN5bmNocm8K
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBbHBo
YSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRWRnZU1vZGUoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRGl2aXNvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpi
aWFzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVCaWFzKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVRhcmdldFgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dGFyZ2V0WUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
VGFyZ2V0WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZUtlcm5lbFVuaXRMZW5ndGhYKCk7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0
aFkoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhh
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFs
cGhhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
CisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdDb2xvci5oIgorI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02NiwyMyAr
NjcsNTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRURpZmZ1c2VMaWdodGluZwogICAgIHJl
dHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VT
Y2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2Vy
bmVsVW5pdExlbmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsgLy8gRXZlbiB0aG91Z2ggaXQncyBhIFNWRy1DU1Mg
cHJvcGVydHksIHdlIG92ZXJyaWRlIGl0cyBoYW5kbGluZyBoZXJlLgorICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSB8fCBhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxp
Z2h0aW5nX2NvbG9yQXR0cikgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldElu
MUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgewogICAgICAgICBzZXRT
dXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkaWZmdXNlQ29u
c3RhbnRBdHRyKSB7CiAgICAgICAgIHNldERpZmZ1c2VDb25zdGFudEJhc2VWYWx1ZSh2YWx1ZS50
b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIGZs
b2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4
LCB5KSkgewogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFhCYXNlVmFsdWUoeCk7CiAg
ICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMTMyLDE2ICsxNjIsMjcgQEAgYm9vbCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnNldEZpbAogCiB2b2lkIFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRh
dGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNv
bnN0YW50QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9y
QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0
cikgewogICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIGludmFs
aWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE1NSwyNyArMTk2LDQ2IEBAIHZvaWQg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEUKIAogdm9pZCBTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlR
TmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
U3VyZmFjZVNjYWxlKCk7CiAgICAgICAgIHN5bmNocm9uaXplRGlmZnVzZUNvbnN0YW50KCk7CiAg
ICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25p
emVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGlnaHRpbmdfY29sb3JBdHRyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNl
U2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3VyZmFjZVNjYWxlKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VD
b25zdGFudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEaWZmdXNlQ29uc3RhbnQoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVu
Z3RoWCgpOwogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CisgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29s
IGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00OSwyNSArNTAsNTcg
QEAgUGFzc1JlZlB0cjxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ+IAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKK2Jvb2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNjYWxlQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxlY3Rv
clR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3RvclR5
cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQog
ICAgICAgICAgICAgc2V0WENoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3Rv
ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3Rv
clR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAw
KQogICAgICAgICAgICAgc2V0WUNoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVl
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAg
ICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHNldFNjYWxlQmFz
ZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJv
b2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAt
ODYsMzcgKzExOSw2OSBAQCBib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2V0Rmls
CiAKIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVs
U2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0dHIpCisgICAgU1ZH
RWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlz
KTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JB
dHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpp
bkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWENoYW5uZWxTZWxlY3Rv
cigpOwogICAgICAgICBzeW5jaHJvbml6ZVlDaGFubmVsU2VsZWN0b3IoKTsKICAgICAgICAgc3lu
Y2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIoKTsKICAgICAgICAgc3luY2hy
b25pemVTY2FsZSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVhDaGFu
bmVsU2VsZWN0b3IoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5u
ZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWUNoYW5uZWxTZWxlY3RvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplSW4yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxl
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU2NhbGUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjphdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogICAg
IAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2
aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQ
YXJzZXJVdGlsaXRpZXMuaCIKQEAgLTcyLDU4ICs3MywxMTIgQEAgdm9pZCBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpzZXRTdGREZXZpYQogICAgIGludmFsaWRhdGUoKTsKIH0KIAorYm9vbCBTVkdG
RURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0
cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpkeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN0ZERldmlh
dGlvbkF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAgICAgICBmbG9hdCB4
LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkp
IHsKICAgICAgICAgICAgIHNldFN0ZERldmlhdGlvblhCYXNlVmFsdWUoeCk7CiAgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAg
ICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZHhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHNldER4QmFzZVZhbHVlKGF0
dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBzZXREeUJhc2VWYWx1ZShhdHRy
LT52YWx1ZSgpLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJk
IGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRp
b25BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0gICAgCiAgICAgaWYgKGF0dHJOYW1lID09
IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7
CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7
CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6ZHlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIqIGZpbHRlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEcm9w
U2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTY2LDQ2
ICs2Nyw4NSBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c2V0U3RkRGV2CiAgICAg
aW52YWxpZGF0ZSgpOwogfQogCitib29sIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAg
aWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25YQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0U3RkRGV2aWF0
aW9uWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZh
bHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlhdGlvblkoKTsKICAgICAgICAgc3luY2hyb25pemVJ
bjEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25Y
KCk7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIK
QEAgLTc3LDUwICs3OCw5NiBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0SW1hZ2VS
ZXNvCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKIH0KIAorYm9vbCBT
VkdGRUltYWdlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJp
YnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRy
KSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RS
YXRpbyh0aGlzLCB2YWx1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7Ci0gICAgICAgICAgICByZXF1ZXN0SW1h
Z2VSZXNvdXJjZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgeworICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJj
ZSgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNl
cnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNhbid0IGJlIGNvcnJlY3QsIEknbSBq
dXN0IHByZXNlcnZpbmcgZXhpc3RpbmcgY29kZS4gPGZlSW1hZ2U+ICsgU1ZHIERPTSAnaHJlZicg
Y2hhbmdlcyBuZWVkIHRlc3RpbmcuCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RS
YXRpbygpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9ICAgCisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHRkVJbWFnZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVJbWFnZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxl
bWVudC5oIgpAQCAtNzMsMzcgKzc0LDk0IEBAIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZF
TGlnaHRFbGVtZW4KICAgICByZXR1cm4gbGlnaHROb2RlLT5saWdodFNvdXJjZSgpOwogfQogCiti
b29sIFNWR0ZFTGlnaHRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVk
QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmF6aW11dGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
ekF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cG9pbnRz
QXRYQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2lu
dHNBdFlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBv
aW50c0F0WkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
c3BlY3VsYXJFeHBvbmVudEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFTGlnaHRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6YXppbXV0aEF0dHIpIHsKICAgICAgICAgc2V0QXppbXV0aEJhc2VWYWx1ZSh2YWx1ZS50b0Zs
b2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZWxldmF0aW9u
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpIHsKICAgICAgICAgc2V0RWxldmF0aW9uQmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUodmFsdWUudG9GbG9h
dCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp6QXR0cikgewogICAg
ICAgICBzZXRaQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikgewog
ICAgICAgICBzZXRQb2ludHNBdFhCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFlBdHRyKSB7CiAgICAgICAgIHNldFBvaW50c0F0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WkF0dHIpIHsKICAgICAgICAgc2V0UG9pbnRzQXRaQmFzZVZhbHVlKHZhbHVl
LnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVj
dWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAgIHNl
dFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxp
bWl0aW5nQ29uZUFuZ2xlQXR0cikgewogICAgICAgICBzZXRMaW1pdGluZ0NvbmVBbmdsZUJhc2VW
YWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cgogICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cgogICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKQEAgLTEzMiwxMiArMTkwLDEyIEBAIHZvaWQgU1ZHRkVM
aWdodEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
TGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25p
emVBemltdXRoKCk7CiAgICAgICAgIHN5bmNocm9uaXplRWxldmF0aW9uKCk7CkBAIC0xNDksMjkg
KzIwNyw2NiBAQCB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlCiAgICAg
ICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJF
eHBvbmVudCgpOwogICAgICAgICBzeW5jaHJvbml6ZUxpbWl0aW5nQ29uZUFuZ2xlKCk7CisgICAg
ICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0
cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplQXppbXV0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRWxldmF0aW9uKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVaKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQ
b2ludHNBdFgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZ
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cG9pbnRzQXRZQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVBvaW50c0F0WSgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNB
dFpBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7Ci0gICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9u
ZW50QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVNwZWN1bGFyRXhwb25lbnQoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1p
dGluZ0NvbmVBbmdsZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVMaW1pdGluZ0NvbmVBbmds
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUxpZ2h0RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGln
aHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHJvdGVjdGVk
OgogICAgIFNWR0ZFTGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCiBwcml2YXRlOgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2Rl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBA
IC00NSwzMSArNDYsNTIgQEAgUGFzc1JlZlB0cjxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+IFNWR0ZF
TQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVNZXJnZU5vZGVFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgIHJldHVybiBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU1lcmdl
Tm9kZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7
Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkg
ewogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omlu
QXR0cikgeworICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgIT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBh
cmVudCkKLSAgICAgICAgcmV0dXJuOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0
aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpIHsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwor
ICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJl
ci0+aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpKQorICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVy
KTsKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9y
TGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCYgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkBA
IC04NSwxMCArMTA3LDIzIEBAIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpmaWxsQXR0cmli
dXQKIAogdm9pZCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
KyAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0Vs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
ZXJnZU5vZGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgpAQCAtNjcsMjMgKzY4LDQ3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudDo6c2V0UmFkaXVzKGYKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKK2Jvb2wgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5h
bWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3Bl
cmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJh
ZGl1c0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lP
cGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFs
dWUgPiAwKQogICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsK
ICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAgICBzZXRSYWRpdXNYQmFzZVZhbHVlKHgpOwog
ICAgICAgICAgICAgc2V0UmFkaXVzWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKQEAgLTEwMCwzNiArMTI1LDU5IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6c2V0RmlsdGVyRWYKIAogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpyYWRpdXNBdHRyKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0
dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9v
cGVyYXRvcigpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwogICAgICAgICBzeW5jaHJvbml6
ZVJhZGl1c1goKTsKICAgICAgICAgc3luY2hyb25pemVSYWRpdXNZKCk7CisgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJO
YW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVfb3BlcmF0b3IoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUmFkaXVzWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVJhZGl1c1koKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAt
NDYsNDYgKzQ3LDkxIEBAIFBhc3NSZWZQdHI8U1ZHRkVPZmZzZXRFbGVtZW50PiBTVkdGRU9mZnMK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFT2Zmc2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCitib29sIFNWR0ZFT2Zmc2V0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpkeEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsKICAgICAgICAgc2V0RHhCYXNlVmFsdWUodmFsdWUu
dG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikgewogICAgICAgICBzZXREeUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICBTVkdFbGVtZW50SW5zdGFu
Y2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAorICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsK
ICAgICAgICAgc3luY2hyb25pemVEeSgpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAg
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpk
eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRU9mZnNldEVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNjksMjUgKzcwLDU3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVTcGVjdWxhckxpZ2h0aW4KICAgICByZXR1cm4g
c19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1
cmZhY2VTY2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2VybmVsVW5pdExlbmd0aEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoteyAgICAK
LSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCit7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0
SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKSB7CiAgICAgICAgIHNl
dFN1cmZhY2VTY2FsZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxh
ckNvbnN0YW50QXR0cikgewogICAgICAgICBzZXRTcGVjdWxhckNvbnN0YW50QmFzZVZhbHVlKHZh
bHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
cGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAg
IHNldFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBp
ZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAg
IHNldEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVs
VW5pdExlbmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCkBAIC0xMzksMTYgKzE3MiwyNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OnNldEZpCiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwor
ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cgogICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIKICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyCi0gICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAg
IHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hh
bmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2Miw4ICsyMDYsNiBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OmxpZ2h0CiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAg
ICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUo
KTsKQEAgLTE3MSwyMSArMjEzLDQyIEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c3luY2gKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxhckV4cG9uZW50KCk7CiAgICAgICAg
IHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJu
ZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJDb25zdGFudCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxhckV4cG9uZW50KCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVu
aXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsK
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjphdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDUsMjkgKzQ2LDY1IEBAIFBh
c3NSZWZQdHI8U1ZHRkVUaWxlRWxlbWVudD4gU1ZHRkVUaWxlRWwKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZFVGlsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBT
VkdGRVRpbGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJO
YW1lKTsKK30KKwogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBz
ZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewor
ICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRVRpbGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0gICAgCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1l
bnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4x
KCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyKSB7CisgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAmIFNWR0ZFVGlsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVUaWxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0
aWxpdGllcy5oIgogCkBAIC02MywyOSArNjQsNjEgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdG
RVR1cmJ1bGVuY2VFbGVtZQogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpzZWVkQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVk
QXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAg
ICAgVHVyYnVsZW5jZVR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFR1cmJ1
bGVuY2VUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVl
ID4gMCkKICAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6c3RpdGNoVGlsZXNBdHRyKSB7CiAgICAgICAgIFNWR1N0aXRjaE9wdGlvbnMgcHJvcGVydHlW
YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1N0aXRjaE9wdGlvbnM+Ojpmcm9tU3RyaW5nKHZh
bHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0U3Rp
dGNoVGlsZXNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5
QXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEJhc2VGcmVxdWVuY3lY
QmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUoeSk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2Vl
ZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpzZWVkQXR0cikgewogICAgICAgICBzZXRTZWVkQmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpudW1PY3Rh
dmVzQXR0cikKLSAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS50b1VJbnRTdHJp
Y3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpIHsK
KyAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJp
Y3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQpAQCAtMTA4LDIwICsxNDEsMjcgQEAgYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRG
aWx0ZXJFZgogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJ
bnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyCiAgICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c2VlZEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRj
aFRpbGVzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisg
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAgICBwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0aXRjaFRp
bGVzKCk7CkBAIC0xMjksMjAgKzE2OSw0MiBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OnN5bmNocm9uaXplCiAgICAgICAgIHN5bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKICAgICAg
ICAgc3luY2hyb25pemVTZWVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplTnVtT2N0YXZlcygpOwor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVR5cGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3RpdGNoVGlsZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVT
dGl0Y2hUaWxlcygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJl
cXVlbmN5QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUJh
c2VGcmVxdWVuY3lYKCk7CiAgICAgICAgIHN5bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVTZWVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om51bU9jdGF2ZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZU51bU9jdGF2ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVR1cmJ1
bGVuY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKQEAgLTkwLDc1ICs5MSwxMDYgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50
OjpzZXRGaWx0ZXJSZXModW5zaQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUp
OwogfQogCitib29sIFNWR0ZpbHRlckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6ZmlsdGVyUmVzQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGaWx0ZXJFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUg
PiAwKQogICAgICAgICAgICAgc2V0RmlsdGVyVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRz
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5
VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0UHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUocHJvcGVy
dHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRy
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlm
IChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAg
c2V0RmlsdGVyUmVzWEJhc2VWYWx1ZSh4KTsKICAgICAgICAgICAgIHNldEZpbHRlclJlc1lCYXNl
VmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFj
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR0ZpbHRlckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBib29sIGludmFsaWRhdGVDbGllbnRzID0g
ZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlk
YXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhB
dHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgogICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGludmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsK
KyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCiAgICAgICAgIHVw
ZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoaW52YWxpZGF0ZUNsaWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6cHJpbWl0aXZlVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpm
aWx0ZXJSZXNBdHRyCi0gICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5k
ZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lk
IFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBAIC0xNzAsMjggKzIw
Miw2MiBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAg
IHN5bmNocm9uaXplRmlsdGVyUmVzWSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHls
ZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRmlsdGVyVW5pdHMoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmltaXRpdmVVbml0cygpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVGaWx0ZXJSZXNYKCk7CiAgICAgICAgIHN5bmNocm9uaXplRmls
dGVyUmVzWSgpOwotICAgIH0gZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGaWx0ZXJFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSop
OwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCkBAIC01MywyMSArNTQsNTMgQEAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpTVgogICAgIC8vIFNwZWM6IElmIHRoZSB3aWR0aC9oZWlnaHQg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCiB9CiAKK2Jvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlc3VsdEF0dHIp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6cmVzdWx0QXR0cikgewogICAgICAgICBzZXRSZXN1bHRCYXNlVmFsdWUodmFsdWUpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpCkBAIC03OSwzOSArMTEyLDU4IEBAIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGUKIAogdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
Ci0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQotICAgICAgICBp
bnZhbGlkYXRlKCk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsgICAgCisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2b2lk
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3lu
Y2hyb25pemVZKCk7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKICAgICAgICAgc3luY2hy
b25pemVIZWlnaHQoKTsKICAgICAgICAgc3luY2hyb25pemVSZXN1bHQoKTsKKyAgICAgICAgU1ZH
U3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVJlc3VsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUq
IGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDEwIEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1h
cHBlZEF0dHJpYnUKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94
QXR0cikgewogICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCFhdHRyLT52
YWx1ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmlld0JveChkb2N1bWVu
dCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcGFyc2VWaWV3Qm94KGRvY3VtZW50LCBhdHRyLT52YWx1ZSgpLCB2aWV3Qm94KTsKICAg
ICAgICAgc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3Qm94KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2Vy
dmVBc3BlY3RSYXRpbyh0aGlzLCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMDUsMTEgKzEwNCwzMSBAQCBib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRB
dHRyaWJ1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6c3lu
Y2hyb25pemVQcm9wZXJ0aWVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplVmlld0Jv
eCgpOworICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0
dHIpCisgICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOworICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICAgICAgc3luY2hyb25p
emVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cit9CisKIGJvb2wgU1ZHRml0VG9WaWV3Qm94Ojppc0tu
b3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHJldHVy
biBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyOwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2aWV3
Qm94QXR0cik7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBAIGNsYXNzIEF0dHJpYnV0ZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRmxvYXRS
ZWN0OwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKK2NsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOwogCiBjbGFzcyBTVkdGaXRUb1ZpZXdCb3ggewpAQCAtNDIsMTAg
KzQzLDE1IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoRG9jdW1l
bnQqLCBBdHRyaWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOworICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+Jik7CisgICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnRpZXMoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUoY29uc3Qg
RmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlv
QmFzZVZhbHVlKGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mKSA9IDA7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVWaWV3Qm94KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKSA9IDA7CisKIHByaXZhdGU6CiAgICAgYm9vbCBw
YXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMzIgKzU2LDY4IEBAIFBhc3NSZWZQdHI8
U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+IFNWR0YKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFs
aWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0
dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAg
IH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9
CisKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5h
bWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRo
LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
SGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNW
R0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBz
ZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
KworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgYm9v
bCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgpA
QCAtOTMsMjAgKzEyOSwxMiBAQCB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpzdmdBdHRy
aWJ1CiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5h
bWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjpt
YXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQog
CiB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5j
aHJvbml6ZVkoKTsKQEAgLTExNSwyMSArMTQzLDQ2IEBAIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQ6OnN5bmNocm9uaXoKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6
c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwot
ICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlz
LCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwcml2YXRlOgogICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDggKzQ1LDI0IEBAIFBhc3NSZWZQdHI8
U1ZHR0VsZW1lbnQ+IFNWR0dFbGVtZW50OjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0dFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHR0VsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChTVkdMYW5nU3BhY2U6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtNTMsMzkgKzcwLDUwIEBAIHZvaWQgU1ZHR0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEEKICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdHRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7Ci0KLSAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlz
LCBhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOworICAgIAorICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMs
IGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsK
IH0KIAogdm9pZCBTVkdHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55
UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQo
KTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFt
ZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0
czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHR0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVk
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1RyYW5zZm9ybUxpc3QuaCIKQEAgLTUxLDczICs1MiwxMTQgQEAgU1ZHR3JhZGllbnRFbGVtZW50
OjpTVkdHcmFkaWVudEVsZW1lbnQoYwogewogfQogCitib29sIFNWR0dyYWRpZW50RWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7
CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzcHJlYWRNZXRob2RB
dHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBp
ZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRHcmFkaWVudFVuaXRzQmFzZVZh
bHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikg
ewogICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0IG5ld0xpc3Q7CiAgICAgICAgIGlmICghU1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobmV3TGlzdCwgYXR0ci0+dmFsdWUo
KSkpCiAgICAgICAgICAgICBuZXdMaXN0LmNsZWFyKCk7CiAKICAgICAgICAgZGV0YWNoQW5pbWF0
ZWRHcmFkaWVudFRyYW5zZm9ybUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAg
IHNldEdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcHJlYWRN
ZXRob2RBdHRyKSB7CiAgICAgICAgIFNWR1NwcmVhZE1ldGhvZFR5cGUgcHJvcGVydHlWYWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1NwcmVhZE1ldGhvZFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHIt
PnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBz
ZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAg
ICBpZiAoIW9iamVjdCkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6Z3JhZGllbnRVbml0c0F0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omdy
YWRpZW50VHJhbnNmb3JtQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3By
ZWFkTWV0aG9kQXR0cgotICAgICAgICB8fCBTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxp
ZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKFJlbmRl
ck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAgICAgb2JqZWN0LT5zZXROZWVkc0xh
eW91dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUdyYWRpZW50VW5pdHMoKTsKICAg
ICAgICAgc3luY2hyb25pemVHcmFkaWVudFRyYW5zZm9ybSgpOwogICAgICAgICBzeW5jaHJvbml6
ZVNwcmVhZE1ldGhvZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmdyYWRp
ZW50VW5pdHNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0
c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVHcmFkaWVudFVuaXRzKCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRU
cmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplR3JhZGllbnRUcmFuc2Zvcm0oKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3By
ZWFkTWV0aG9kQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVNwcmVhZE1ldGhvZCgpOwotICAg
IGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAg
IHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0dyYWRpZW50
RWxlbWVudDo6ZmlsbFBhc3NlZEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdHcmFkaWVudEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVk
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lt
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVt
ZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCkBAIC02MCw0NCArNjEsODIgQEAgUGFz
c1JlZlB0cjxTVkdJbWFnZUVsZW1lbnQ+IFNWR0ltYWdlRWxlbQogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHSW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZH
SW1hZ2VFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRl
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
c3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJlc2VydmVBc3Bl
Y3RSYXRpb0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFz
ZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh0aGlzLCBhdHRyLT52YWx1ZSgpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhN
b2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTUHJvcGVydHlXaWR0aCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmICh3aWR0aEJhc2VW
YWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgaW1hZ2Ug
YXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHIt
PnZhbHVlKCkpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlIZWln
aHQsIGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUo
dGhpcykgPCAwLjApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBpbWFnZSBhdHRyaWJ1dGUgPGhl
aWdodD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ltYWdlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7Ci0KLSAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKLSAgICAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlv
dXNFcnJvcigpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0
YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAg
ICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRo
QXR0cgpAQCAtMTA5LDYgKzE0OCwxMSBAQCB2b2lkIFNWR0ltYWdlRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywg
YXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBtX2ltYWdlTG9hZGVyLnVwZGF0
ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CkBAIC0xMjEsMTQgKzE2NSwxNiBAQCB2
b2lkIFNWR0ltYWdlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlCiAKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyCiAgICAgICAgIHx8IFNWR0xh
bmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAg
IHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHSW1hZ2VFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKQEAgLTEzOCwyNSArMTg0LDU2IEBA
IHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnQKICAgICAgICAgc3luY2hy
b25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJl
ZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJO
YW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
WCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Ci0gICAg
ZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAg
c3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZH
VVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwotICAgIGVsc2UgaWYgKFNWR1Rl
c3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ltYWdlRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAor
ICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDYgKzY4LDIxIEBAIGJvb2wgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGNvbnMKIHsK
ICAgICByZXR1cm4gYXR0ck5hbWUubWF0Y2hlcyhYTUxOYW1lczo6bGFuZ0F0dHIpIHx8IGF0dHJO
YW1lLm1hdGNoZXMoWE1MTmFtZXM6OnNwYWNlQXR0cik7CiB9CisgICAgCit2b2lkIFNWR0xhbmdT
cGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBw
b3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCB4bWxQcmVmaXgsICgieG1sIikpOworCisgICAgUXVhbGlmaWVkTmFtZSBsYW5nV2l0aFByZWZp
eCA9IFhNTE5hbWVzOjpsYW5nQXR0cjsKKyAgICBsYW5nV2l0aFByZWZpeC5zZXRQcmVmaXgoeG1s
UHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChsYW5nV2l0aFByZWZpeCk7Cisg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoWE1MTmFtZXM6OmxhbmdBdHRyKTsKKworICAgIFF1
YWxpZmllZE5hbWUgc3BhY2VXaXRoUHJlZml4ID0gWE1MTmFtZXM6OnNwYWNlQXR0cjsKKyAgICBz
cGFjZVdpdGhQcmVmaXguc2V0UHJlZml4KHhtbFByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoc3BhY2VXaXRoUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChY
TUxOYW1lczo6c3BhY2VBdHRyKTsKK30KIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGFuZ1NwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdT
cGFjZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMYW5nU3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEyIEBACiAjZGVmaW5lIFNWR0xhbmdT
cGFjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNzIFF1YWxp
ZmllZE5hbWU7CiAKIGNsYXNzIFNWR0xhbmdTcGFjZSB7CiBwdWJsaWM6CkBAIC0zOSw2ICszOSw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2
b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCiBw
cml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2xhbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xpbmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC01NCwz
MSArNTUsNjcgQEAgUGFzc1JlZlB0cjxTVkdMaW5lRWxlbWVudD4gU1ZHTGluZUVsZW1lbgogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTGluZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAorYm9vbCBTVkdMaW5lRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBv
cnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0
ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9y
dGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
Ojp4MUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eDJB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnkxQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5MkF0dHIpOworICAg
IH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9
CisKIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OngxQXR0cikgewogICAgICAgICBzZXRYMUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdp
ZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp5MUF0dHIpIHsKICAgICAgICAgc2V0WTFCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikgewogICAgICAgICBzZXRY
MkJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0g
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MkF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MkF0dHIp
IHsKICAgICAgICAgc2V0WTJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0
dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdMaW5lRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
ICAgICBib29sIGlzTGVuZ3RoQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0
cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTFB
dHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp4
MkF0dHIKQEAgLTEwMCwxNSArMTM3LDE2IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3Bh
Y2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdM
YW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24o
cmVuZGVyZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVYMSgpOwogICAgICAgICBz
eW5jaHJvbml6ZVkxKCk7CkBAIC0xMTYsMjEgKzE1NCw0NiBAQCB2b2lkIFNWR0xpbmVFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5CiAgICAgICAgIHN5bmNocm9uaXplWTIoKTsKICAgICAgICAg
c3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3Rz
OjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OngxQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgxKCk7Ci0gICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkxQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTFBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWTEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MkF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYMigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp5MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnkyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkyKCk7Ci0g
ICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAo
U1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewog
ICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTGluZUVsZW1lbnQ6OmF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAK
KyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmly
dHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgpAQCAtNjEsNTggKzYyLDEwMCBA
QCBQYXNzUmVmUHRyPFNWR0xpbmVhckdyYWRpZW50RWxlbWVudD4gU1ZHCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAorYm9vbCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eDFBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OngyQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjp5MUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6eTJBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
Y29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OngxQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngxQXR0cikgewogICAgICAgICBzZXRYMUJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpIHsKICAgICAgICAg
c2V0WTFCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkp
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Ongy
QXR0cikgewogICAgICAgICBzZXRYMkJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRo
LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp5MkF0dHIpIHsKICAgICAgICAgc2V0WTJCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIFNW
R0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4MUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkxQXR0cgot
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyCi0gICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjp5MkF0dHIpIHsKLSAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhz
SW5mb3JtYXRpb24oKTsKLQotICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVy
KCk7Ci0gICAgICAgIGlmICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOworICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCisgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKIAorICAgIGlm
IChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgfQogfQogCiB2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
LXsKLSAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwotCit7ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5
bmNocm9uaXplWDEoKTsKICAgICAgICAgc3luY2hyb25pemVZMSgpOwogICAgICAgICBzeW5jaHJv
bml6ZVgyKCk7CiAgICAgICAgIHN5bmNocm9uaXplWTIoKTsKKyAgICAgICAgU1ZHR3JhZGllbnRF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDFBdHRyKQorICAgIGlmICgh
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0dyYWRpZW50RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9ICAgCisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVgxKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Onkx
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eTFBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWTEoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MkF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVYMigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MkF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkyQXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVkyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVN
YXAmIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQu
aAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNyArNDMsNTMgQEAgUGFzc1JlZlB0cjxTVkdNUGF0
aEVsZW1lbnQ+IFNWR01QYXRoRWxlbQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTVBhdGhF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTVBhdGhFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0
dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
TVBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Cisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNW
R0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCiAgICAgICAgIHJldHVybjsKLSAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiB2b2lkIFNWR01QYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAg
ICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6
ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTVBhdGhFbGVtZW50Ojph
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TVBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRo
RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0
aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOSBAQCBwdWJsaWM6CiAgICAg
CiBwcml2YXRlOgogICAgIFNWR01QYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKLSAgICAKKworICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3Np
bmcuCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
I2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTc4LDcxICs3OSw5OSBAQCBBZmZpbmVUcmFu
c2Zvcm0gU1ZHTWFya2VyRWxlbWVudDo6dmlld0JvCiAgICAgcmV0dXJuIFNWR0ZpdFRvVmlld0Jv
eDo6dmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3Qm94KCksIHByZXNlcnZlQXNwZWN0UmF0aW8o
KSwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KTsKIH0KIAorYm9vbCBTVkdNYXJrZXJFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0
dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0
dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdGaXRUb1Zp
ZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cmVmWEF0dHIpOworICAg
ICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cmVmWUF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VyV2lkdGhBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3JpZW50QXR0cik7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAg
IFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZh
bHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRy
KSB7CiAgICAgICAgIFNWR01hcmtlclVuaXRzVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVy
dHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAg
IGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldE1hcmtlclVuaXRzQmFzZVZh
bHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpyZWZYQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKSB7CiAgICAgICAgIHNldFJlZlhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVmWUF0dHIpIHsKICAgICAgICAgc2V0
UmVmWUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1h
cmtlcldpZHRoQXR0cikgewogICAgICAgICBzZXRNYXJrZXJXaWR0aEJhc2VWYWx1ZShTVkdMZW5n
dGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpIHsKICAg
ICAgICAgc2V0TWFya2VySGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0
LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b3JpZW50
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b3JpZW50QXR0cikgewogICAgICAgICBTVkdBbmdsZSBhbmdsZTsKICAgICAg
ICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmllbnRUeXBlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZH
TWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcodmFsdWUsIGFuZ2xlKTsKICAgICAgICAgaWYg
KG9yaWVudFR5cGUgPiAwKQogICAgICAgICAgICAgc2V0T3JpZW50VHlwZUJhc2VWYWx1ZShvcmll
bnRUeXBlKTsKICAgICAgICAgaWYgKG9yaWVudFR5cGUgPT0gU1ZHX01BUktFUl9PUklFTlRfQU5H
TEUpCiAgICAgICAgICAgICBzZXRPcmllbnRBbmdsZUJhc2VWYWx1ZShhbmdsZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9j
dW1lbnQoKSwgYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdG
aXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0dHIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdN
YXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgYm9vbCBpbnZhbGlkYXRlQ2xpZW50cyA9IGZhbHNl
OworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9u
R3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyZWZYQXR0
cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWUF0dHIKICAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cgotICAgICAgICB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikgewotICAgICAgICBpbnZhbGlkYXRlQ2xp
ZW50cyA9IHRydWU7CisgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJIZWln
aHRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwotICAg
IH0KLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGludmFsaWRhdGVDbGllbnRzCi0gICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNl
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdG
aXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0
eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChSZW5kZXJP
YmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlv
dXQodHJ1ZSk7CiB9CiAKIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VyVW5pdHMoKTsKICAgICAgICAg
c3luY2hyb25pemVSZWZYKCk7CkBAIC0xNTIsMzAgKzE4MSw1OCBAQCB2b2lkIFNWR01hcmtlckVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAgIHN5bmNocm9uaXplT3JpZW50QW5nbGUo
KTsKICAgICAgICAgc3luY2hyb25pemVPcmllbnRUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3go
KTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAgICAgIFNW
R0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAgICAg
U1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bWFya2VyVW5pdHNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFy
a2VyVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VyVW5pdHMoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUmVmWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpyZWZZQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cmVmWUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSZWZZKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VyV2lk
dGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VyV2lkdGgoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZU1hcmtlckhlaWdodCgpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpvcmllbnRBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVPcmllbnRBbmdsZSgpOwogICAgICAgICBzeW5jaHJvbml6ZU9yaWVudFR5cGUo
KTsKLSAgICB9IGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVs
c2UgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAg
ICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVB
c3BlY3RSYXRpbygpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR0ZpdFRv
Vmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRml0VG9W
aWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdNYXJrZXJFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5lZWRz
UGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAg
Ym9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1
ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgpAQCAtNjMs
ODggKzY0LDE1NCBAQCBQYXNzUmVmUHRyPFNWR01hc2tFbGVtZW50PiBTVkdNYXNrRWxlbWVuCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdNYXNrRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCitib29sIFNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hT
ZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3Vw
cG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBv
cnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFj
ZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6Om1hc2tVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6bWFza0NvbnRlbnRVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmhlaWdodEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjptYXNrVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBp
ZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRNYXNrVW5pdHNCYXNlVmFsdWUo
cHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
Om1hc2tDb250ZW50VW5pdHNBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cikgewogICAg
ICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0
eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1
ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0TWFz
a0NvbnRlbnRVbml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRY
QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsK
ICAgICAgICAgc2V0WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+
dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0
aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAg
IHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFs
dWUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKwor
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBi
b29sIGludmFsaWRhdGVDbGllbnRzID0gZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJ
bnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0g
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGlu
dmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7
Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlm
ICghb2JqZWN0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaW52YWxpZGF0ZUNsaWVudHMK
LSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIKLSAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyCi0gICAgICAgIHx8
IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdMYW5n
U3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8
IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChS
ZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7CiB9CiAKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1hc2tVbml0cygpOwogICAgICAg
ICBzeW5jaHJvbml6ZU1hc2tDb250ZW50VW5pdHMoKTsKICAgICAgICAgc3luY2hyb25pemVYKCk7
CiAgICAgICAgIHN5bmNocm9uaXplWSgpOworICAgICAgICBzeW5jaHJvbml6ZVdpZHRoKCk7Cisg
ICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0
aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFza1VuaXRzQXR0cikKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVNYXNrVW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFz
a0NvbnRlbnRVbml0c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplTWFza0NvbnRlbnRVbml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVkoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CisgICAgICAgIHN5bmNocm9uaXpl
V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6aGVpZ2h0QXR0cikgeworICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChT
VkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6
OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAmIFNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1Bl
bmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQ
YXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVt
ZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhdGhQ
YXJzZXJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgpAQCAtMTgyLDMxICsx
ODMsNTkgQEAgUGFzc1JlZlB0cjxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1NtbwogICAgIHJl
dHVybiBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Y3JlYXRlKHRoaXMsIHJv
bGUsIHgsIHkpOwogfQogCitib29sIFNWR1BhdGhFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAg
ICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnBhdGhMZW5ndGhBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1BhdGhFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRBdHRyKSB7CiAgICAg
ICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNlckZhY3Rvcnk6
OnNlbGYoKTsKICAgICAgICAgaWYgKCFmYWN0b3J5LT5idWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJv
bVN0cmluZyhhdHRyLT52YWx1ZSgpLCBtX3BhdGhCeXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5n
KSkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0
RXJyb3IoIlByb2JsZW0gcGFyc2luZyBkPVwiIiArIGF0dHItPnZhbHVlKCkgKyAiXCIiKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBhdGhMZW5ndGhBdHRyKSB7CiAgICAgICAgIHNldFBhdGhMZW5ndGhCYXNlVmFsdWUoYXR0
ci0+dmFsdWUoKS50b0Zsb2F0KCkpOwotICAgICAgICBpZiAocGF0aExlbmd0aEJhc2VWYWx1ZSgp
IDwgMC4wZikKKyAgICAgICAgaWYgKHBhdGhMZW5ndGhCYXNlVmFsdWUoKSA8IDApCiAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5l
Z2F0aXZlIHZhbHVlIGZvciBwYXRoIGF0dHJpYnV0ZSA8cGF0aExlbmd0aD4gaXMgbm90IGFsbG93
ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAg
ICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6
OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlm
IChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0yMjAsNDMgKzI0OSw1MSBAQCB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAgICAgICBtX3BhdGhTZWdMaXN0LnZhbHVlID0gbmV3
TGlzdDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwotICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxp
ZGF0aW9uKHJlbmRlcmVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocmVuZGVyZXIp
CisgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CiAgICAgfQogCi0g
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cgotICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChyZW5kZXJlcikKICAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwot
CiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVE
KCk7CiAgICAgICAgIHN5bmNocm9uaXplUGF0aExlbmd0aCgpOwogICAgICAgICBzeW5jaHJvbml6
ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9u
aXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZEF0dHIpCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkQXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZUQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cGF0aExlbmd0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplUGF0aExlbmd0aCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVy
dGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdQYXRoRWxlbWVudDo6c3luY2hyb25pemVE
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEsNiArMTAxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgpAQCAtNzEsODUgKzcyLDExNiBAQCBQYXNzUmVmUHRyPFNWR1BhdHRlcm5FbGVtZW50PiBTVkdQ
YXR0ZXJuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQYXR0ZXJuRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1BhdHRlcm5FbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZH
VVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMp
OworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBT
VkdGaXRUb1ZpZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRl
cyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVW5p
dHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBhdHRl
cm5Db250ZW50VW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpoZWlnaHRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29u
dGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikgewogICAgICAgICBTVkdV
bml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAg
ICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0UGF0dGVyblVuaXRz
QmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRV
bml0c0F0dHIpIHsKICAgICAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21T
dHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAg
ICAgICAgICAgIHNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zv
cm1BdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikgewogICAgICAgICBTVkdUcmFuc2Zv
cm1MaXN0IG5ld0xpc3Q7CiAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFu
c2Zvcm1BdHRyaWJ1dGUobmV3TGlzdCwgYXR0ci0+dmFsdWUoKSkpCiAgICAgICAgICAgICBuZXdM
aXN0LmNsZWFyKCk7CiAKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRQYXR0ZXJuVHJhbnNmb3JtTGlz
dFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0UGF0dGVyblRyYW5zZm9ybUJh
c2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1
ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
IHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwg
YXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0aGlz
KSA8IDAuMCkKKyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0dGVybiBhdHRyaWJ1dGUgPHdpZHRoPiBpcyBub3Qg
YWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAo
aGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlmIChoZWlnaHRC
YXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBwYXR0
ZXJuIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRml0VG9WaWV3
Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1BhdHRlcm5F
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgYm9vbCBpbnZhbGlkYXRlQ2xpZW50cyA9IGZhbHNlOworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQo
dGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OndpZHRoQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVp
Z2h0QXR0cikgewotICAgICAgICBpbnZhbGlkYXRlQ2xpZW50cyA9IHRydWU7CisgICAgICAgIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2
ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0
ID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGludmFsaWRhdGVDbGllbnRzCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpw
YXR0ZXJuVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJu
Q29udGVudFVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVy
blRyYW5zZm9ybUF0dHIKLSAgICAgICAgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKQorICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkp
CiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKIHZvaWQgU1ZHUGF0
dGVybkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCi17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7Ci0KK3sgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAg
ICAgc3luY2hyb25pemVQYXR0ZXJuVW5pdHMoKTsKICAgICAgICAgc3luY2hyb25pemVQYXR0ZXJu
Q29udGVudFVuaXRzKCk7CkBAIC0xNTksMzcgKzE5MSw3NCBAQCB2b2lkIFNWR1BhdHRlcm5FbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKICAgICAg
ICAgc3luY2hyb25pemVIZWlnaHQoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBz
eW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKICAgICAgICAgc3luY2hyb25pemVIcmVm
KCk7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJO
YW1lKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRy
TmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUGF0
dGVyblVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5D
b250ZW50VW5pdHNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cikgewogICAgICAgICBzeW5j
aHJvbml6ZVBhdHRlcm5Db250ZW50VW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplUGF0dGVyblRyYW5zZm9ybSgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVXaWR0aCgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7
CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZp
ZXdCb3hBdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpCi0gICAgICAgIHN5
bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVy
ZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsK
LSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhp
cywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdQYXR0ZXJuRWxl
bWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rl
c3RzOjppc1ZhbGlkKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQZW5kaW5nUmVzb3VyY2VI
YW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVk
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCkBAIC00Miw4ICs0MywyNSBAQCBTVkdQb2x5RWxl
bWVudDo6U1ZHUG9seUVsZW1lbnQoY29uc3QgUXVhCiB7CiB9CiAKK2Jvb2wgU1ZHUG9seUVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9y
dGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHko
KSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cG9pbnRzQXR0cik7CisgICAgfQor
ICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwog
dm9pZCBTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAg
ICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojpwb2ludHNBdHRyKSB7CiAgICAgICAgIFNWR1BvaW50TGlzdCBuZXdMaXN0OwpAQCAtNTQsMjEg
KzcyLDI4IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICAg
ICAgICAgIGxpc3QtPmRldGFjaExpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAKICAgICAg
ICAgbV9wb2ludHMudmFsdWUgPSBuZXdMaXN0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChT
VkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFu
Z1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAor
ICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3Vh
cmQodGhpcyk7CisgICAgCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2Uo
dGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKQEAgLTgyLDkgKzEwNywxMiBAQCB2
b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1BvbHlFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsgCiAgICAgdmlydHVhbCB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCkBAIC02Myw2NiArNjQsMTE0IEBAIFBhc3NS
ZWZQdHI8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PiBTVkcKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCiti
b29sIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNo
U2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1
cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpjeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6Y3lBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmZ4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpmeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ckF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Y3hBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6Y3hBdHRyKSB7CiAgICAgICAgIHNldEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikgewogICAgICAgICBzZXRDeUJhc2VWYWx1
ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CiAgICAg
ICAgIHNldFJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUo
KSkpOwotICAgICAgICBpZiAockJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAg
ICBpZiAockJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUg
Zm9yIHJhZGlhbCBncmFkaWVudCByYWRpdXMgPHI+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikgewog
ICAgICAgICBzZXRGeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52
YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmeUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpmeUF0dHIpIHsKICAgICAgICAgc2V0RnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1v
ZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0dyYWRpZW50
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpj
eEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cgotICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpmeUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7
Ci0gICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
KyAgICAKKyAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwogICAgICAgICAK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgICAgICBpZiAo
IW9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLQorICAgIGlmIChSZW5kZXJPYmplY3QqIG9i
amVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7
Ci0gICAgfQogfQogCiB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdHcmFkaWVu
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwogICAgICAgICBz
eW5jaHJvbml6ZUN5KCk7CiAgICAgICAgIHN5bmNocm9uaXplRngoKTsKICAgICAgICAgc3luY2hy
b25pemVGeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKKyAgICAgICAgU1ZHR3JhZGllbnRF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4
QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6Y3lBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmeEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVG
eCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmeUF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ5QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUZ5KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC01Nyw0MyAr
NTgsODcgQEAgUGFzc1JlZlB0cjxTVkdSZWN0RWxlbWVudD4gU1ZHUmVjdEVsZW1lbgogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHUmVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAorYm9vbCBTVkdSZWN0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVk
QXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5QXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp3aWR0aEF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aGVpZ2h0QXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeEF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnlBdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR1JlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7
CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+
dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
SGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBzZXRSeEJhc2VWYWx1ZShT
VkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmIChy
eEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAocnhCYXNlVmFsdWUo
KS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0IDxyeD4gaXMg
bm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cnlBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpyeUF0dHIpIHsKICAgICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKHJ5QmFzZVZh
bHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlmIChyeUJhc2VWYWx1ZSgpLnZhbHVl
KHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJlY3QgPHJ5PiBpcyBub3QgYWxs
b3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0
dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5n
dGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmICh3aWR0aEJh
c2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUo
KS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0IDx3aWR0aD4g
aXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAg
ICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAo
aGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBm
b3IgcmVjdCA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0
czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0
aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJO
YW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgpAQCAtMTE3LDE1ICsxNjIsMTYgQEAgdm9pZCBT
VkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgCi0g
ICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwpAQCAtMTM1LDI1ICsxODEsNTYg
QEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eQogICAgICAgICBzeW5j
aHJvbml6ZVJ5KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJO
YW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
WCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpyeEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ4KCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJ5QXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplUnkoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBT
VkdSZWN0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NW
R0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNNSUxUaW1lQ29udGFpbmVyLmgi
CiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8u
aCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKQEAgLTI5OSw5ICszMDAsNyBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVDU1NGb3JBdHRyaWJ1dGUoU1ZHU1ZHCiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsK
LSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLQor
eyAKICAgICAvLyBGSVhNRTogVWdseSwgdWdseSBoYWNrIHRvIGFyb3VuZCB0aGF0IHBhcnNlTWFw
cGVkQXR0cmlidXRlIGlzIG5vdCBjYWxsZWQKICAgICAvLyB3aGVuIHN2Zy53aWR0aC5iYXNlVmFs
dWUgPSAxMDAgaXMgZXZhbHVhdGVkLgogICAgIC8vIFRodXMgdGhlIENTUyBsZW5ndGggdmFsdWUg
Zm9yIHdpZHRoIGlzIG5vdCB1cGRhdGVkLCBhbmQgd2lkdGgoKSBjb21wdXRlTG9naWNhbFdpZHRo
KCkKQEAgLTMyNCwzMyArMzIzLDMzIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCgKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKICAg
ICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRh
dGlvbkd1YXJkKHRoaXMpOwogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdl
KHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFyZW5kZXJlcigp
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAodXBkYXRlUmVsYXRpdmVMZW5ndGhzCiAgICAg
ICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKICAgICAgICAg
fHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkKLSAgICAgICAgfHwgU1ZHWm9vbUFuZFBhbjo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkK
LSAgICAgICAgfHwgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIoKSk7CisgICAgICAgIHx8IFNWR1pvb21B
bmRQYW46OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIGlmIChyZW5kZXJl
cigpKQorICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJl
bnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkg
ewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplV2lkdGgoKTsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5
bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0
aW8oKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0
ck5hbWUpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0
dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM2NCwxMiArMzYzLDEyIEBA
IHZvaWQgU1ZHU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSgKICAgICAgICAgc3luY2hy
b25pemVIZWlnaHQoKTsKICAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnZpZXdCb3hBdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpCi0gICAgICAg
IHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgIGVsc2UgaWYgKFNWR0ZpdFRv
Vmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIAorICAgICAgICBTVkdGaXRUb1Zp
ZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CiAgICAgZWxzZSBpZiAoU1ZH
VGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQogICAgICAgICBTVkdUZXN0czo6c3lu
Y2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICBlbHNlCisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogfQogCiBBdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHU1ZHRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAko
cmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKIApAQCAtNDksMzEgKzUwLDYxIEBAIFBhc3NSZWZQdHI8
U1ZHU2NyaXB0RWxlbWVudD4gU1ZHU2NyaXB0RWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R1NjcmlwdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGluc2VydGVkQnlQYXJzZXIsIGZhbHNl
KSk7CiB9CiAKK2Jvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChI
YXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYg
KHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5j
ZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnR5cGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoSFRNTE5hbWVz
OjpvbmVycm9yQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNv
bnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0eXBl
QXR0cikgewogICAgICAgICBzZXRUeXBlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6Om9uZXJyb3JBdHRyKQotICAgICAgICBzZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1VS
SVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6b25lcnJvckF0dHIpIHsKKyAgICAg
ICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3Jl
YXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyIHx8IGF0dHJOYW1lID09
IEhUTUxOYW1lczo6b25lcnJvckF0dHIpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdVUklS
ZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIGhhbmRsZVNv
dXJjZUF0dHJpYnV0ZShocmVmKCkpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgLy8gSGFuZGxlIGR5bmFtaWMgdXBkYXRlcyBv
ZiB0aGUgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnIGF0dHJpYnV0ZS4gT25seSBwb3NzaWJs
ZSBjYXNlOiBjaGFuZ2luZyBmcm9tICd0cnVlJyB0byAnZmFsc2UnCiAgICAgICAgIC8vIGNhdXNl
cyBhbiBpbW1lZGlhdGUgZGlzcGF0Y2ggb2YgdGhlIFNWR0xvYWQgZXZlbnQuIElmIHRoZSBhdHRy
aWJ1dGUgdmFsdWUgd2FzICdmYWxzZScgYmVmb3JlIGluc2VydGluZyB0aGUgc2NyaXB0IGVsZW1l
bnQKICAgICAgICAgLy8gaW4gdGhlIGRvY3VtZW50LCB0aGUgU1ZHTG9hZCBldmVudCBoYXMgYWxy
ZWFkeSBiZWVuIGRpc3BhdGNoZWQuCkBAIC04MywyMyArMTE0LDM3IEBAIHZvaWQgU1ZHU2NyaXB0
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmcKIAogICAgICAgICAgICAgc2VuZFNWR0xvYWRFdmVu
dElmUG9zc2libGUoKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgU1ZHRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9ICAgCisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNl
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBT
VkdTY3JpcHRFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIGFs
cmVhZHlTdGFydGVkKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0dyYWRpZW50U3RvcC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKIApAQCAtNDcsMzUgKzQ4LDcyIEBAIFBhc3NSZWZQdHI8U1ZHU3RvcEVsZW1lbnQ+IFNW
R1N0b3BFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1N0b3BFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHU3RvcEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkp
OworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9mZnNldEF0dHIpOworICAgIHJldHVybiBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdTdG9wRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICgh
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAg
ICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmICh2
YWx1ZS5lbmRzV2l0aCgiJSIpKQogICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVl
LmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0Zsb2F0KCkgLyAxMDAuMGYpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBzZXRPZmZzZXRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdTdG9wRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0
YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBp
ZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9mZnNl
dEF0dHIpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJl
bnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0b3BFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplT2Zmc2V0
KCk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFO
YW1lKCkgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHU3RvcEVs
ZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdG9wRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdG9wRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdG9wRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHU3RvcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NiwxNSArODYsMzMgQEAgdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNl
dFRpdGxlKGNvbnN0IEF0bwogICAgIHNldEF0dHJpYnV0ZShTVkdOYW1lczo6dGl0bGVBdHRyLCB0
aXRsZSwgZWMpOwogfQogCitib29sIFNWR1N0eWxlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR0xhbmdT
cGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRpdGxlQXR0cik7CisgICAgfQor
ICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwog
dm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0aXRsZUF0dHIgJiYgbV9z
aGVldCkKLSAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnRpdGxlQXR0cikgeworICAgICAgICBpZiAobV9zaGVldCkKKyAgICAgICAgICAg
IG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R1N0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU3R5bGVFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5NywxMCArMjk3LDkgQEAgYm9vbCBTVkdTdHlsZWRFbGVtZW50OjptYXBUb0Vu
dHJ5KGNvbnN0IAogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9
IGF0dHItPm5hbWUoKTsKICAgICAvLyBOT1RFOiBBbnkgc3ViY2xhc3Mgd2hpY2ggb3ZlcnJpZGVz
IHBhcnNlTWFwcGVkQXR0cmlidXRlIGZvciBhIHByb3BlcnR5IGhhbmRsZWQgYnkKICAgICAvLyBj
c3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZSB3aWxsIGFsc28gaGF2ZSB0byBvdmVycmlk
ZSBtYXBUb0VudHJ5IHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZVNWRyBtYXBwaW5nCi0gICAgaW50
IHByb3BJZCA9IFNWR1N0eWxlZEVsZW1lbnQ6OmNzc1Byb3BlcnR5SWRGb3JTVkdBdHRyaWJ1dGVO
YW1lKGF0dHJOYW1lKTsKKyAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVkRWxlbWVudDo6Y3NzUHJv
cGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoYXR0ci0+bmFtZSgpKTsKICAgICBpZiAocHJvcElk
ID4gMCkgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBwcm9wSWQsIGF0dHItPnZhbHVl
KCkpOwogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CkBAIC0zMTEsMTEgKzMxMCwxMyBA
QCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgLy8gdGhlIGNs
YXNzTmFtZSBoZXJlLiAgc3ZnQXR0cmlidXRlQ2hhbmdlZCBhY3R1YWxseSBjYXVzZXMgdGhlIHJl
c3VsdGluZwogICAgIC8vIHN0eWxlIHVwZGF0ZXMgKGluc3RlYWQgb2YgU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpLiBXZSBkb24ndAogICAgIC8vIHRlbGwgU3R5bGVkRWxlbWVu
dCBhYm91dCB0aGUgY2hhbmdlIHRvIGF2b2lkIHBhcnNpbmcgdGhlIGNsYXNzIGxpc3QgdHdpY2UK
LSAgICBpZiAoYXR0ck5hbWUubWF0Y2hlcyhIVE1MTmFtZXM6OmNsYXNzQXR0cikpCisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0cikgewogICAgICAgICBzZXRDbGFz
c05hbWVCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZQotICAgICAgICAvLyBpZCBp
cyBoYW5kbGVkIGJ5IFN0eWxlZEVsZW1lbnQgd2hpY2ggU1ZHRWxlbWVudCBpbmhlcml0cyBmcm9t
Ci0gICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gaWQgaXMgaGFuZGxlZCBieSBTdHlsZWRFbGVtZW50
IHdoaWNoIFNWR0VsZW1lbnQgaW5oZXJpdHMgZnJvbQorICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQogCiBib29sIFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25B
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0zMjUsMjggKzMyNiwz
MSBAQCBib29sIFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoCiAKIHZvaWQgU1ZH
U3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVkRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNW
R0F0dHJpYnV0ZU5hbWUoYXR0ck5hbWUpOworICAgIGlmIChwcm9wSWQgPiAwKSB7CisgICAgICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVudCh0aGlz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZS5tYXRjaGVzKEhU
TUxOYW1lczo6Y2xhc3NBdHRyKSkKKyAgICBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjbGFz
c0F0dHIpIHsKICAgICAgICAgY2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKGNsYXNzTmFtZSgpKTsKLQot
ICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKKyAgICAgICAgU1ZHRWxlbWVu
dEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKGF0dHJOYW1lKSkg
eworICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7CiAgICAgICAgIC8v
IE5vdGlmeSByZXNvdXJjZXMgYWJvdXQgaWQgY2hhbmdlcywgdGhpcyBpcyBpbXBvcnRhbnQgYXMg
d2UgY2FjaGUgcmVzb3VyY2VzIGJ5IGlkIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9ucwogICAgICAg
ICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKQogICAgICAg
ICAgICAgb2JqZWN0LT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCktPmlkQ2hhbmdlZCgp
OworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVs
ZW1lbnQodGhpcyk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBJbnZhbGlkYXRl
IGFsbCBTVkdFbGVtZW50SW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB1cwotICAgIFNWR0VsZW1l
bnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVudCh0aGlzKTsKIH0KIAog
dm9pZCBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgYXR0ck5hbWUu
bWF0Y2hlcyhIVE1MTmFtZXM6OmNsYXNzQXR0cikpCisgICAgaWYgKGF0dHJOYW1lID09IGFueVFO
YW1lKCkgfHwgYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIpCiAgICAgICAgIHN5bmNo
cm9uaXplQ2xhc3NOYW1lKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjksNDQgKzcwLDc0IEBAIEFmZmluZVRyYW5zZm9y
bSogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUUKICAgICByZXR1cm4gbV9zdXBwbGVtZW50YWxUcmFu
c2Zvcm0uZ2V0KCk7CiB9CiAKK2Jvb2wgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpOwor
ICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwog
dm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIFNWR1Ry
YW5zZm9ybUxpc3QgbmV3TGlzdDsKICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybUF0dHJpYnV0ZShuZXdMaXN0LCBhdHRyLT52YWx1ZSgpKSkKICAgICAgICAgICAg
IG5ld0xpc3QuY2xlYXIoKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0V3Jh
cHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRUcmFuc2Zvcm1CYXNlVmFsdWUobmV3
TGlzdCk7Ci0gICAgfSBlbHNlIAotICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwotCi0gICAgaWYgKCFTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdF
bGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMp
OwogCiAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwogICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBvYmplY3QtPnNldE5lZWRzVHJhbnNmb3JtVXBk
YXRlKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNv
dXJjZUludmFsaWRhdGlvbihvYmplY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
dHJhbnNmb3JtQXR0cikgeworICAgICAgICBvYmplY3QtPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRl
KCk7CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVz
b3VyY2VJbnZhbGlkYXRpb24ob2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5
bmNocm9uaXplVHJhbnNmb3JtKCk7CisgICAgICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgU1ZHVHJhbnNmb3JtYWJsZTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVUcmFuc2Zvcm0oKTsKLX0KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotYm9vbCBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKLXsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFNWR0Vs
ZW1lbnQqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpuZWFyZXN0Vmlld3BvcnRFbGVt
ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw4ICs0Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5
bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogCi0gICAgYm9vbCBp
c0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIC8vICJiYXNlIGNs
YXNzIiBtZXRob2RzIGZvciBhbGwgdGhlIGVsZW1lbnRzIHdoaWNoIHJlbmRlciBhcyBwYXRocwog
ICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdCB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdG9DbGlwUGF0aChQYXRoJikgY29uc3Q7CkBAIC01Nyw2ICs1NSw3IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N5
bWJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTeW1i
b2xFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3ltYm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1N5bWJvbEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTQ0LDggKzQ1LDI0IEBAIFBhc3NSZWZQdHI8U1ZHU3ltYm9s
RWxlbWVudD4gU1ZHU3ltYm9sRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1N5bWJvbEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdTeW1ib2xFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0
dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0
dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdGaXRUb1Zp
ZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdTeW1ib2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7
CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCkBAIC01Myw0MCAr
NzAsNDggQEAgdm9pZCBTVkdTeW1ib2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIGlm
IChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0dHIp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdT
eW1ib2xFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRp
b25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAorICAgIC8vIEV2ZXJ5IG90aGVyIHBy
b3BlcnR5IGNoYW5nZSBpcyBpZ25vcmVkLgogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
dmlld0JveEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7
CiB9CiAKIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgp
KSB7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgICAgICBz
eW5jaHJvbml6ZVZpZXdCb3goKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5j
aHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94Ojpz
eW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIp
Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikKLSAgICAgICAgc3luY2hyb25pemVW
aWV3Qm94KCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAo
U1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewotICAgICAgICBz
eW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJh
dGlvKCk7Ci0gICAgfSAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdGaXRU
b1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpdFRv
Vmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHU3ltYm9sRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVN
YXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdTeW1ib2xF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNp
bmNsdWRlICJYTGlua05hbWVzLmgiCkBAIC01NiwzMyArNTcsNjggQEAgdm9pZCBTVkdUUmVmRWxl
bWVudDo6dXBkYXRlUmVmZXJlbmNlZFRleAogICAgIHNldFRleHRDb250ZW50KHRleHRDb250ZW50
LCBpZ25vcmUpOwogfQogCitib29sIFNWR1RSZWZFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAg
ICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIFNWR1VSSVJlZmVy
ZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHVFJlZkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAg
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkgewogICAgICAgICB1cGRhdGVSZWZlcmVuY2VkVGV4dCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
U1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZH
VVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9u
KHJlbmRlcmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1l
ID09IGFueVFOYW1lKCkpIHsKKyAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdUUmVmRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdUUmVmRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1Rlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMu
Y3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsMTMgQEAgYm9vbCBTVkdUZXN0czo6aGFuZGxl
QXR0cmlidXRlQ2hhbmdlKGNvbgogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFNWR1Rlc3Rz
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpCit7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJl
cXVpcmVkRmVhdHVyZXNBdHRyKTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OnN5c3RlbUxhbmd1YWdlQXR0cik7Cit9CisKIHZvaWQgU1ZHVGVzdHM6OnN5bmNo
cm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wg
aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKKyAgICB2b2lkIGFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogICAgIGJvb2wgaGFu
ZGxlQXR0cmlidXRlQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFF1
ZXJ5LmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTE3OSw2MiArMTgwLDEwOCBAQCB2b2lk
IFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAgICAgc2VsZWN0aW9uLT5zZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kKSk7CiB9CiAKK2Jvb2wgU1ZHVGV4
dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Omxlbmd0aEFk
anVzdEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGV4
dExlbmd0aEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikgewogICAgICAgICBT
VkdMZW5ndGhBZGp1c3RUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdM
ZW5ndGhBZGp1c3RUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYg
KHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0TGVuZ3RoQWRqdXN0QmFzZVZhbHVl
KHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0ZXh0TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpIHsKICAgICAgICAgbV90ZXh0
TGVuZ3RoLnZhbHVlID0gU1ZHTGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUoKSk7
CiAgICAgICAgIGlmIChtX3RleHRMZW5ndGgudmFsdWUudmFsdWUodGhpcykgPCAwKQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBu
ZWdhdGl2ZSB2YWx1ZSBmb3IgdGV4dCBhdHRyaWJ1dGUgPHRleHRMZW5ndGg+IGlzIG5vdCBhbGxv
d2VkIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdT
cGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKLSAgICAgICAgICAgIGlmIChhdHRy
LT5uYW1lKCkubWF0Y2hlcyhYTUxOYW1lczo6c3BhY2VBdHRyKSkgewotICAgICAgICAgICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBwcmVzZXJ2ZVN0cmluZywg
KCJwcmVzZXJ2ZSIpKTsKLQotICAgICAgICAgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09IHBy
ZXNlcnZlU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlUHJlKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2hp
dGVTcGFjZSwgQ1NTVmFsdWVOb3dyYXApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkgeworICAgICAgICBpZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMo
WE1MTmFtZXM6OnNwYWNlQXR0cikpIHsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBwcmVzZXJ2ZVN0cmluZywgKCJwcmVzZXJ2ZSIpKTsKKworICAg
ICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gcHJlc2VydmVTdHJpbmcpCisgICAgICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1
ZVByZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1ZU5vd3JhcCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAg
ICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVMZW5n
dGhBZGp1c3QoKTsKICAgICAgICAgc3luY2hyb25pemVUZXh0TGVuZ3RoKCk7CiAgICAgICAgIHN5
bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6
c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGVu
Z3RoQWRqdXN0QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVz
dEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVMZW5ndGhBZGp1c3QoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKSB7
CiAgICAgICAgIHN5bmNocm9uaXplVGV4dExlbmd0aCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdU
ZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVB
dHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CkBAIC0yNDIs
MTIgKzI4OSw3IEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGUKICAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKQogICAgICAgICBtX3Nw
ZWNpZmllZFRleHRMZW5ndGggPSBtX3RleHRMZW5ndGgudmFsdWU7CiAKLSAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhB
dHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQor
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBA
IHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
U1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdU
U3BhbkVsZW1lbnQuaCIKQEAgLTQ4LDE3ICs0OSwzMiBAQCBQYXNzUmVmUHRyPFNWR1RleHRFbGVt
ZW50PiBTVkdUZXh0RWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdUZXh0RWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1RleHRFbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKTsKKyAgICBy
ZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQg
U1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAg
ICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6dHJhbnNmb3JtQXR0cikgewogICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0IG5ld0xpc3Q7
CiAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUo
bmV3TGlzdCwgYXR0ci0+dmFsdWUoKSkpCiAgICAgICAgICAgICBuZXdMaXN0LmNsZWFyKCk7CiAK
ICAgICAgICAgZGV0YWNoQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0V3JhcHBlcnMobmV3TGlzdC5zaXpl
KCkpOwogICAgICAgICBzZXRUcmFuc2Zvcm1CYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIFNWR0VsZW1lbnQqIFNWR1RleHRFbGVtZW50OjpuZWFyZXN0Vmlld3BvcnRFbGVt
ZW50KCkgY29uc3QKQEAgLTEyNCwyNCArMTQwLDQ1IEBAIGJvb2wgU1ZHVGV4dEVsZW1lbnQ6OmNo
aWxkU2hvdWxkQ3JlYXRlUmUKIAogdm9pZCBTVkdUZXh0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlz
U3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgcmVu
ZGVyZXItPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291
cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIp
OworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1l
KCkpIHsKKyAgICAgICAgc3luY2hyb25pemVUcmFuc2Zvcm0oKTsKKyAgICAgICAgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBTVkdU
cmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVRyYW5zZm9ybSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwJiBTVkdUZXh0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdUZXh0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKIAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVtZW50
YWxUcmFuc2Zvcm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0
aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdUZXh0UGF0aC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDYxICs1MSwx
MDQgQEAgUGFzc1JlZlB0cjxTVkdUZXh0UGF0aEVsZW1lbnQ+IFNWR1RleHRQYQogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHVGV4dFBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKK2Jvb2wgU1ZHVGV4dFBhdGhFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hT
ZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3Vw
cG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1ldGhvZEF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3BhY2luZ0F0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKQorICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKSB7CiAgICAg
ICAgIHNldFN0YXJ0T2Zmc2V0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlT3RoZXIsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptZXRob2RBdHRy
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjptZXRob2RBdHRyKSB7CiAgICAgICAgIFNWR1RleHRQYXRoTWV0aG9kVHlwZSBwcm9w
ZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVGV4dFBhdGhNZXRob2RUeXBlPjo6ZnJv
bVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAg
ICAgIHNldE1ldGhvZEJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BhY2luZ0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwYWNpbmdBdHRyKSB7
CiAgICAgICAgIFNWR1RleHRQYXRoU3BhY2luZ1R5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3Bl
cnR5VHJhaXRzPFNWR1RleHRQYXRoU3BhY2luZ1R5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAg
ICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0U3BhY2luZ0Jhc2VW
YWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlz
U3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlk
YXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RhcnRP
ZmZzZXRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwog
Ci0gICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cgotICAgICAgICB8fCBTVkdVUklSZWZlcmVu
Y2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKCkp
OworICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCisgICAgICAgIFJl
bmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRp
b24ob2JqZWN0KTsKIH0KIAogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RhcnRPZmZzZXQoKTsK
ICAgICAgICAgc3luY2hyb25pemVNZXRob2QoKTsKICAgICAgICAgc3luY2hyb25pemVTcGFjaW5n
KCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGFydE9mZnNldEF0dHIpCisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RhcnRPZmZz
ZXRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RhcnRPZmZzZXQoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWV0aG9kQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1ldGhvZEF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVNZXRob2QoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3BhY2luZ0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGFjaW5nQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZVNwYWNpbmcoKTsKLSAgICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdUZXh0UGF0aEVs
ZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
IAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdOdW1iZXJMaXN0LmgiCkBAIC00NCwzNSArNDUsNjcgQEAgU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudDo6U1ZHVGV4dFBvc2l0aQogewogfQogCitib29sIFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwg
c3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlz
RW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyb3RhdGVBdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkp
IHsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIFNWR0xlbmd0aExpc3QgbmV3TGlzdDsKICAgICAg
ICAgbmV3TGlzdC5wYXJzZShhdHRyLT52YWx1ZSgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgICAg
ICBkZXRhY2hBbmltYXRlZFhMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBz
ZXRYQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp5QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3RoTGlzdCBuZXdM
aXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHItPnZhbHVlKCksIExlbmd0aE1vZGVIZWln
aHQpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFlMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkp
OwogICAgICAgICBzZXRZQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR4QXR0cikgewogICAgICAgICBTVkdM
ZW5ndGhMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+dmFsdWUoKSwg
TGVuZ3RoTW9kZVdpZHRoKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWREeExpc3RXcmFwcGVycyhu
ZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldER4QmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikg
ewogICAgICAgICBTVkdMZW5ndGhMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2Uo
YXR0ci0+dmFsdWUoKSwgTGVuZ3RoTW9kZUhlaWdodCk7CiAgICAgICAgIGRldGFjaEFuaW1hdGVk
RHlMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXREeUJhc2VWYWx1ZShu
ZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cm90YXRl
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cm90YXRlQXR0cikgewogICAgICAgICBTVkdOdW1iZXJMaXN0IG5ld0xpc3Q7
CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGRldGFjaEFu
aW1hdGVkUm90YXRlTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0Um90
YXRlQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZQotICAgICAgICBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCB1cGRhdGVQb3NpdGlvbmluZ1ZhbHVlc0luUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKQEAgLTEwMSw3ICsxMzQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVBvc2l0aW9u
aW5nVmFsdQogCiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgdXBkYXRlUmVsYXRpdmVMZW5ndGhzID0gYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnhBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKQEAgLTEyMCw2ICsxNTgsOCBAQCB2b2lkIFNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNl
OjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQg
Y2hpbGRDb3VudERlbHRhKQpAQCAtMTM1LDI3ICsxNzUsNDcgQEAgdm9pZCBTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50OjpjaGlsZHJlbgogCiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
LQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
WCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKICAgICAgICAgc3luY2hyb25pemVEeCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZUR5KCk7CiAgICAgICAgIHN5bmNocm9uaXplUm90YXRlKCk7Cisg
ICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZHlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyb3RhdGVBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyb3RhdGVBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUm90YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpmaWxsUGFzc2VkQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
KyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmly
dHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBO
b2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENv
dW50RGVsdGEgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFi
bGUuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDExICsyMDYsNiBAQCBib29sIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0CiAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsK
IH0KIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIHJldHVybiBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
dHJhbnNmb3JtQXR0cjsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4
ICs0OCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29v
cmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IHsgcmV0
dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNm
b3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7Ci0KLSAgICBib29sIGlzS25v
d25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHJldmlz
aW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDE1IEBAIFN0cmluZyBTVkdVUklSZWZlcmVuY2U6Omdl
dFRhcmdldChjb25zdCAKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK3ZvaWQgU1ZHVVJJUmVm
ZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1
cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIHhsaW5rUHJlZml4LCAoInhsaW5rIikpOworICAgIFF1YWxpZmllZE5hbWUgaHJlZldpdGhQ
cmVmaXggPSBYTGlua05hbWVzOjpocmVmQXR0cjsKKyAgICBocmVmV2l0aFByZWZpeC5zZXRQcmVm
aXgoeGxpbmtQcmVmaXgpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKGhyZWZXaXRoUHJl
Zml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChYTGlua05hbWVzOjpocmVmQXR0cik7
Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVVJJUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdVUklSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wg
aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogICAgIHN0YXRpYyBT
dHJpbmcgZ2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdXJsKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDMxICs5OCw2MyBAQCBT
VkdFbGVtZW50SW5zdGFuY2UqIFNWR1VzZUVsZW1lbnQ6OmFuaW1hCiAgICAgcmV0dXJuIDA7CiB9
CiAgCitib29sIFNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
Ojp3aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
aGVpZ2h0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7
CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0
cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRo
LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmICh3aWR0aEJhc2VWYWx1ZSgpLnZhbHVlKHRo
aXMpIDwgMC4wKQorICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAp
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVy
cm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciB1c2UgYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFs
bG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKGhl
aWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAoaGVpZ2h0QmFz
ZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdXNlIGF0
dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1dlbGxGb3JtZWREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0xNDgsNyAr
MTgwLDEyIEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgKIAogdm9p
ZCBTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOwogCiAgICAgYm9vbCBpc1hZQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhB
dHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cjsKICAgICBib29sIGlzV2lkdGhIZWln
aHRBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjpoZWlnaHRBdHRyOwpAQCAtMTk4LDE1ICsyMzUsMTYgQEAgdm9pZCBTVkdV
c2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAg
ICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkg
fHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKICAgICAgICAgaW52YWxpZGF0ZVNoYWRvd1RyZWUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1VzZUVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7
Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAg
c3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwpAQCAtMjE1LDIzICsyNTMs
NTEgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KAogICAgICAgICBz
eW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25p
emVIcmVmKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywg
YXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVXaWR0
aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNl
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplSHJlZigpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChT
VkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6
OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAmIFNWR1VzZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKIAorICAgIGJvb2wg
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2
b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDM3
ICs0OCw2OCBAQCBQYXNzUmVmUHRyPFNWR1ZpZXdFbGVtZW50PiBTVkdWaWV3RWxlbWVuCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdWaWV3RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwog
fQogCi12b2lkIFNWR1ZpZXdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCitib29sIFNWR1ZpZXdFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp2aWV3VGFyZ2V0QXR0cikKLSAgICAgICAgdmlld1RhcmdldCgpLnJlc2V0KGF0dHItPnZh
bHVlKCkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikKLSAgICAgICAgICAgfHwgU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKQotICAgICAgICAg
ICB8fCBTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRl
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRml0
VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOwor
ICAgICAgICBTVkdab29tQW5kUGFuOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0
dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dmll
d1RhcmdldEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CiAKK3ZvaWQgU1ZHVmlld0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikgeworICAgICAgICB2aWV3VGFyZ2V0
KCkucmVzZXQoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChT
Vkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVmlld0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAg
ICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0g
ICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgICAgICBTVkdGaXRU
b1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0
eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVs
c2UgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAg
ICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVB
c3BlY3RSYXRpbygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0ZpdFRv
Vmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRml0VG9W
aWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdWaWV3RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDYgKzQ1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdWaWV3RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1
dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgYm9vbCBTVkdab29tQW5kUGFuOjppc0tub3duQXR0
cmlidXRlKGNvbgogICAgIHJldHVybiBhdHRyTmFtZSA9PSBTVkdOYW1lczo6em9vbUFuZFBhbkF0
dHI7CiB9CiAKK3ZvaWQgU1ZHWm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNo
U2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp6b29tQW5kUGFuQXR0cik7Cit9CisKIHN0YXRpYyBj
b25zdCBVQ2hhciBkaXNhYmxlW10gPSAgeydkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdl
J307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlmeVtdID0gIHsnbScsICdhJywgJ2cnLCAnbics
ICdpJywgJ2YnLCAneSd9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBh
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmgJKHJl
dmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hT
ZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogICAgIGJvb2wgcGFyc2Vab29tQW5kUGFuKGNvbnN0IFVD
aGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQpOwogCg==
</data>
<flag name="commit-queue"
          id="87501"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94225</attachid>
            <date>2011-05-20 08:35:17 -0700</date>
            <delta_ts>2011-05-20 08:53:59 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>PerfPatch-v4.diff</filename>
            <type>text/plain</type>
            <size>318564</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAwIEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBzdmdBdHRyaWJ1dGVDaGFuZ2VkL3N5bmNo
cm9uaXplUHJvcGVydHkvcGFyc2VNYXBwZWRBdHRyaWJ1dGUgc2hvdWxkIGJlIG9wdGltaXplZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExODMKKwor
ICAgICAgICBFeGFtcGxlOiByZWN0LnguYmFzZVZhbC52YWx1ZSA9IDEwMDsKKyAgICAgICAgV2hh
dCBoYXBwZW5zOiBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgaXMgaW52b2tlZCB3aXRoICJTVkdOYW1lczo6cmVjdEF0dHIi
IGFzIHBhcmFtZXRlci4KKworICAgICAgICB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorICAgICAgICB7CisgICAg
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgICAgICAvLyBIYW5kbGUgbXkgb3duIGF0dHJpYnV0ZSBjaGFu
Z2VzLi4uCisgICAgICAgIH0KKworICAgICAgICBXZSBhbHdheXMgdHJhdmVyc2UgdGhlIGJhc2Ug
Y2xhc3MgaGllYXJjaHksIHdoZW4gaW52b2tpbmcgc3ZnQXR0cmlidXRlQ2hhbmdlZCAodGhpcyBo
YXMgYSByZWFzb24sIGV4cGxhaW5lZCBiZWxvdyAoKikgKS4KKyAgICAgICAgU3dpdGNoIHRvIGEg
bW9yZSBlZmZpY2llbnQgcGF0dGVybiwgYnkgcHJvdmlkaW5nIGEgImJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOyIgZnVuY3Rpb24gZm9yIGFsbCBTVkcqRWxl
bWVudHMuCisgICAgICAgIEl0IGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHRoZSBwYXJ0aWN1bGFy
IFNWRypFbGVtZW50IGNsYXNzIGhhbmRsZXMgKGJ1dCBub3QgaXRzIHBhcmVudCBjbGFzc2VzIGF0
dHJpYnV0ZXMpLiBGb3IgZXhhbXBsZSBTVkdSZWN0RWxlbWVudAorICAgICAgICBjb250YWlucyB4
L3kvd2lkdGgvaGVpZ2h0L3J4L3J5IGF0dHJpYnV0ZXMsIGFuZCB0aGUgb25lcyBmcm9tIFNWR1Rl
c3RzL1NWR0xhbmdTcGFjZS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICh4bWw6c3BhY2Uv
bGFuZywgZXRjLiksCisgICAgICAgIGJ1dCBub3QgZWcuIHRyYW5zZm9ybSBhcyB0aGF0J3MgaGFu
ZGxlZCBieSB0aGUgcGFyZW50IGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lgor
CisgICAgICAgIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUuY29udGFpbnMoYXR0ck5hbWUpKSB7CisgICAgICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2Uga25vdyBmb3Igc3VyZSBpdCdzIG9uZSBvZiBvdXIg
YXR0cmlidXRlcyB0aGF0IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgLy8gTm90ZSBmb3IgZWcu
IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCB0aGUgY2FsbCBmcm9tIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkLCB3b3VsZCBiZSBpbW1lZGlhdGVseSBmb3J3YXJkZWQgdG8gdGhl
IGJhc2UgY2xhc3MsIHdoaWNoIGhhbmRsZXMgdHJhbnNmb3JtQXR0ciBjaGFuZ2VzKQorCisgICAg
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7IGRvX3dvcmsoKTsgcmV0
dXJuOyB9CisgICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7IGRv
X3dvcmsoKTsgcmV0dXJuOyB9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vIEFzc3Vy
ZSB0aGF0IHdlIGhhbmRsZWQgYWxsIHByb3BlcnRpZXMgd2UgY2xhaW0gc3VwcG9ydCBmb3IgaW4g
ImlzU3VwcG9ydGVkQXR0cmlidXRlKCkiLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICBFeGFjdGx5IHRoZSBzYW1lIHBhdHRlcm4gY2FuIGJl
IGFwcGxpZWQgdG8gc3luY2hyb25pemVQcm9wZXJ0eSBhbmQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUg
dG8gc3BlZWQgdGhlbSB1cCBhcyB3ZWxsLgorCisgICAgICAgIE5vdGUgKCopOgorICAgICAgICBF
dmVyeSBzdmdBdHRyaWJ1dGVDaGFuZ2VkIGNhbGwgZnJvbSBhIGNsYXNzIGxpa2UgU1ZHUmVjdEVs
ZW1lbnQgaGFzIHRvIHJlYWNoIHRoZSBiYXNlIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQsIGFzIGl0IGhhbmRsZXMKKyAgICAgICAgaW52YWxpZGF0aW9uIG9mIHRo
ZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudC4gU2F5IHRoYXQgYSA8cmVjdD4gaXMgcmVmZXJlbmNl
ZCBieSBhIDx1c2U+IGFuZCB3ZSBjaGFuZ2UgdGhlICd4JyBhdHRyaWJ1dGUgb2YgdGhlIDxyZWN0
PiwgdGhlbgorICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkLCBj
YWxscyBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQo
dGhpcyksIHNvIHRoYXQgdGhlIDx1c2U+IGNhbiByZWJ1aWxkIGl0cyBzaGFkb3cgdHJlZS4uLgor
ICAgICAgICBUaGF0J3MgdGhlIG9ubHkgcmVhc29uIHdlIGRvIHRoZSBiYXNlLWNsYXNzIGRhbmNl
LCBhbmQgY2FuIGVhc2lseSBiZSBhdm9pZGVkLgorCisgICAgICAgIEFkZCAiU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBndWFyZCh0aGlzKSIgc3RhdG1lbnRzIGluIGFsbCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIGltcGxlbWVudGF0aW9ucywgdGhhdCBjYWxscyBpbnZhbGlkYXRl
QWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpCisgICAgICAgIHVwb24gZGVzdHJ1Y3Rpb24sIGFm
dGVyIHdlJ3ZlIHJlYWN0ZWQgdG8gdGhlIHN2ZyBhdHRyaWJ1dGUgY2hhbmdlLiBUaGlzIGFzc3Vy
ZXMgd2UgbmV2ZXIgZm9yZ2V0IHRvIGNhbGwgdGhlIGludmFsaWRhdGlvbiBtZXRob2QgYW55d2hl
cmUsIGFuZCBkb24ndAorICAgICAgICBuZWVkIHRvIHJlbHkgb24gdGhlIGJhc2UgY2xhc3Mgc3Zn
QXR0cmlidXRlQ2hhbmdlZCgpIGNhbGwgdG8gZG8gaXQuCisgICAgICAgCisgICAgICAgIE9ubHkg
YWZmZWN0cyBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBz
dmcvU1ZHQUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Np
cmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q2lyY2xlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0N1cnNvckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkOjpJbnZhbGlkYXRpb25HdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkOjp+SW52YWxpZGF0aW9uR3VhcmQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNl
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TWVyZ2VOb2RlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZz
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAg
ICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJv
bml6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdHRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KToKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHTGFu
Z1NwYWNlLmg6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xpbmVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAg
ICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNYXJrZXJFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01hc2tFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkpOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
dGVybkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR1BhdHRlcm5FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
Y3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1JlY3RF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0b3BFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdTdG9wRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHVGVzdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5oOgorICAgICAg
ICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyk6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5oOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVmlld0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1ZpZXdFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR1pv
b21BbmRQYW4uaDoKKwogMjAxMS0wNS0yMCAgVG9uaXMgVGlpZ2kgIDx0b25pc3RpaWdpQGdtYWls
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTc0LDI2ICs3NSw1
MSBAQCBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKICAgICByZXR1cm4gU1ZHU3R5
bGVkRWxlbWVudDo6dGl0bGUoKTsKIH0KIAorYm9vbCBTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0
cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhcmdldEF0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKQotICAgICAgICBz
ZXRTVkdUYXJnZXRCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKSB7CisgICAgICAgIHNl
dFNWR1RhcmdldEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdBRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3Rh
bmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIC8v
IFVubGlrZSBvdGhlciBTVkcqRWxlbWVudCBjbGFzc2VzLCBTVkdBRWxlbWVudCBvbmx5IGxpc3Rl
bnMgdG8gU1ZHVVJJUmVmZXJlbmNlIGNoYW5nZXMKICAgICAvLyBhcyBub25lIG9mIHRoZSBvdGhl
ciBwcm9wZXJ0aWVzIGNoYW5nZXMgdGhlIGxpbmtpbmcgYmVoYXZpb3VyIGZvciBvdXIgPGE+IGVs
ZW1lbnQuCkBAIC0xMjMsMjQgKzE0OSw0MSBAQCB2b2lkIFNWR0FFbGVtZW50OjpmaWxsQXR0cmli
dXRlVG9Qcm9wZXJ0CiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTVkdUYXJnZXQoKTsKICAg
ICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVNWR1RhcmdldCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHQUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIHN2Z1RhcmdldCgpOyB9CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNCArODksMjkgQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6cGF0aEF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhBdHRyKSB7CiAgICAgICAgIG1fcGF0
aCA9IFBhdGgoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQ
YXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9t
U3RyaW5nKGF0dHItPnZhbHVlKCksIG1fcGF0aCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAgICAgCiBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Um90YXRlTW9kZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cm90
YXRlTW9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjQgKzgxLDM5IEBAIEFuaW1hdGVk
QXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3IKICAgICByZXR1cm4gQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0OwogfQogCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgcmV0dXJu
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInRyYW5zbGF0ZSIp
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICBpZiAodmFsdWUgPT0gInRyYW5zbGF0ZSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgICAgICBlbHNlIGlmIChhdHRy
LT52YWx1ZSgpID09ICJzY2FsZSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJzY2FsZSIp
CiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU7
Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJvdGF0ZSIpCisgICAgICAgIGVs
c2UgaWYgKHZhbHVlID09ICJyb3RhdGUiKQogICAgICAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUo
KSA9PSAic2tld1giKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAic2tld1giKQogICAgICAg
ICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAg
ICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJza2V3WSIpCisgICAgICAgIGVsc2UgaWYgKHZh
bHVlID09ICJza2V3WSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1k7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLSAgICAKIHN0YXRpYyBTVkdUcmFuc2Zvcm1M
aXN0KiB0cmFuc2Zvcm1MaXN0Rm9yKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Q7CiAgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50KikgY29uc3Q7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShj
b25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMjUgKzEzNiw1NyBAQCBzdGF0
aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogfQogCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
a2V5VGltZXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmtleVBvaW50c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisgICAgIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewogICAgICAgICBhdHRyLT52YWx1
ZSgpLnN0cmluZygpLnNwbGl0KCc7JywgbV92YWx1ZXMpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7CiAgICAg
ICAgIHBhcnNlS2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlUaW1lcywgdHJ1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyICYmIGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
c3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9ubHkgYnV0IGl0IGlz
IHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCi0gICAgICAgIC8vIHdoZXJlIHRoZSBvdGhlciB0aW1p
bmcgY2FsY3VsYXRhdGlvbnMgYXJlLgotICAgICAgICBwYXJzZUtleVRpbWVzKGF0dHItPnZhbHVl
KCksIG1fa2V5UG9pbnRzLCBmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgeworICAgICAgICBp
ZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgc3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9u
bHkgYnV0IGl0IGlzIHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCisgICAgICAgICAgICAvLyB3aGVy
ZSB0aGUgb3RoZXIgdGltaW5nIGNhbGN1bGF0YXRpb25zIGFyZS4KKyAgICAgICAgICAgIHBhcnNl
S2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlQb2ludHMsIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpIHsKICAgICAgICAgcGFyc2VLZXlTcGxpbmVzKGF0dHItPnZhbHVl
KCksIG1fa2V5U3BsaW5lcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0
dHIsIGJvb2wgcHJlc2VydmVEZWNscykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogCiAgICAgZW51bSBDYWxjTW9kZSB7IENhbGNNb2RlRGlzY3JldGUsIENhbGNN
b2RlTGluZWFyLCBDYWxjTW9kZVBhY2VkLCBDYWxjTW9kZVNwbGluZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKIApAQCAtNTIsMzAgKzUzLDYyIEBAIFBhc3NSZWZQdHI8U1ZHQ2lyY2xlRWxlbWVudD4g
U1ZHQ2lyY2xlRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0NpcmNsZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdDaXJjbGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6ckF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExl
bmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOyAgICAgICAKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKSB7CisgICAgICAgIHNl
dEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikgewogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CiAgICAgICAgIHNldFJCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBpZiAockJh
c2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgY2ly
Y2xlIDxyPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpjeUF0dHIKQEAgLTk3LDM0ICsxMzAsNTcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNW
R0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
aWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3goKTsK
ICAgICAgICAgc3luY2hyb25pemVDeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rl
c3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplQ3koKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUigpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdU
ZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0NpcmNsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIApAQCAtNDksNTYgKzUwLDg2IEBAIFBhc3NSZWZQdHI8
U1ZHQ2xpcFBhdGhFbGVtZW50PiBTVkdDbGlwUGEKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0NsaXBQYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0NsaXBQ
YXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjbGlwUGF0aFVuaXRz
QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0
dHJOYW1lKTsKK30KKwogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldENsaXBQ
YXRoVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChT
VkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmNs
aXBQYXRoVW5pdHNBdHRyCi0gICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwog
fQogCiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUNsaXBQYXRoVW5pdHMoKTsKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmNsaXBQYXRoVW5pdHNBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVDbGlwUGF0aFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHQ2xpcFBhdGhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVk
c1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDM2ICs0OCw3NCBAQCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dDo6U1ZHCiB7CiB9CiAKK2Jvb2wgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFibGVWYWx1ZXNBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNsb3BlQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbnRlcmNlcHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmFtcGxpdHVkZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZXhwb25lbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9mZnNldEF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0eXBlQXR0cikgewogICAgICAgICBDb21wb25lbnRUcmFuc2ZlclR5cGUgcHJvcGVydHlWYWx1
ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvbmVudFRyYW5zZmVyVHlwZT46OmZyb21TdHJpbmco
dmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRU
eXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cikgewog
ICAgICAgICBTVkdOdW1iZXJMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UodmFs
dWUpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFRhYmxlVmFsdWVzTGlzdFdyYXBwZXJzKG5ld0xp
c3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VGFibGVWYWx1ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNsb3BlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNs
b3BlQXR0cikgewogICAgICAgICBzZXRTbG9wZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW50ZXJjZXB0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmludGVyY2VwdEF0dHIpIHsKICAgICAgICAgc2V0SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphbXBsaXR1
ZGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YW1wbGl0dWRlQXR0cikgewogICAgICAgICBzZXRBbXBsaXR1ZGVCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmV4cG9uZW50QXR0cikgewogICAgICAgICBzZXRFeHBvbmVu
dEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAgICAgICAgc2V0T2Zm
c2V0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsKQEAgLTg2
LDIzICsxMjQsNTEgQEAgdm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudAog
ICAgICAgICBzeW5jaHJvbml6ZUFtcGxpdHVkZSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4cG9u
ZW50KCk7CiAgICAgICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIFNWR0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVU
eXBlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dGFibGVWYWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzbG9wZUF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVTbG9wZSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSW50ZXJjZXB0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmFt
cGxpdHVkZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVBbXBsaXR1
ZGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZXhwb25lbnRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpl
eHBvbmVudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVFeHBvbmVudCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDIyICs1Niw0NCBAQCBTVkdDdXJzb3JFbGVtZW50
Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiAgICAgICAgICgqaXQpLT5jdXJzb3JFbGVtZW50UmVtb3Zl
ZCgpOwogfQogCitib29sIFNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0
aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWln
aHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgeworICAg
ICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0N1cnNvckVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKQEAgLTEwOSw0NCArMTMyLDY0IEBAIHZvaWQgU1ZHQ3Vy
c29yRWxlbWVudDo6cmVtb3ZlUmVmZXJlbmNlZEUKIAogdm9pZCBTVkdDdXJzb3JFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eUF0dHIKLSAgICAgICAgfHwgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxl
bWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
IAotICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9CisgICAgLy8gQW55IGNoYW5nZSBvZiBhIGN1cnNv
ciBzcGVjaWZpYyBhdHRyaWJ1dGUgdHJpZ2dlcnMgdGhpcyByZWNhbGMuCisgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7CisgICAg
SGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQo
KTsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6
ZVkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWSgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAg
IGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBl
bHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ3Vyc29yRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDdXJzb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVz
dHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTUgQEAgcHVibGljOgogCiAg
ICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgPyBt
X2VsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSA6IDA7IH0KIAorICAgIGNsYXNzIEludmFsaWRhdGlv
bkd1YXJkIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW52YWxpZGF0aW9uR3VhcmQp
OworICAgIHB1YmxpYzogICAgCisgICAgICAgIEludmFsaWRhdGlvbkd1YXJkKFNWR0VsZW1lbnQq
IGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQorICAgICAgICB+SW52YWxpZGF0aW9u
R3VhcmQoKSB7IFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxl
bWVudChtX2VsZW1lbnQpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHRWxlbWVudCogbV9l
bGVtZW50OworICAgIH07CisKICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWxsSW5zdGFuY2Vz
T2ZFbGVtZW50KFNWR0VsZW1lbnQqKTsKIAogICAgIHVzaW5nIFRyZWVTaGFyZWQ8U1ZHRWxlbWVu
dEluc3RhbmNlPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNTQsMzQgKzU1LDcw
IEBAIFBhc3NSZWZQdHI8U1ZHRWxsaXBzZUVsZW1lbnQ+IFNWR0VsbGlwc2UKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0VsbGlwc2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K2Jvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
Y3hBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN5QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeEF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnlBdHRyKTsKKyAgICB9
CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQor
CiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpjeEF0dHIpIHsKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVX
aWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Y3lBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xl
bmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBz
ZXRSeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7
CiAgICAgICAgIGlmIChyeEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cng+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAg
ICAgICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52
YWx1ZSgpKSk7CiAgICAgICAgIGlmIChyeUJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cnk+IGlzIG5vdCBhbGxvd2VkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZh
bGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5n
dGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIKQEAgLTEwNCwxNSAr
MTQxLDE2IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRWxsaXBzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1l
KCkpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7
CkBAIC0xMjAsMjEgKzE1OCw0NiBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplUnkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVSeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnJ5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ5KCk7Ci0gICAgZWxzZSBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0
czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHRWxsaXBzZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBA
QCBib29sIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vCiAgICAgcmV0dXJuIGF0
dHJOYW1lID09IFNWR05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQXR0cjsKIH0KIAor
dm9pZCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRB
dHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTIgQEAKICNkZWZpbmUgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZF9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNzIFF1YWxpZmllZE5hbWU7CiAKIC8vIE5vdGVz
IG9uIGEgU1ZHIDEuMSBzcGVjIGRpc2NyZXBhbmN5OgogLy8gVGhlIFNWRyBET00gZGVmaW5lcyB0
aGUgYXR0cmlidXRlIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgYXMgYmVpbmcgb2YgdHlwZSBT
VkdBbmltYXRlZEJvb2xlYW4sIHdoZXJlYXMgdGhlIApAQCAtMzgsNiArNDAsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wg
aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKGNv
bnN0IGJvb2wmKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKQEAgLTQ3LDE5ICs0OCw0MyBAQCBQYXNzUmVmUHRyPFNWR0ZFQmxlbmRF
bGVtZW50PiBTVkdGRUJsZW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUJsZW5kRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0ZFQmxlbmRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0
dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1vZGVBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptb2RlQXR0
cikgewogICAgICAgICBCbGVuZE1vZGVUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxCbGVuZE1vZGVUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9w
ZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1
ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAg
ICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
Ym9vbCBTVkdGRUJsZW5kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc0LDMzICs5
OSw1NyBAQCBib29sIFNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBCiAKIHZvaWQg
U1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikgewogICAgICAg
ICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyCi0gICAgICAgIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAg
IGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1v
ZGUoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIo
KTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVNb2RlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVJbjIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVCbGVu
ZEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVCbGVuZEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CiAgICAgdmly
dHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCkBAIC00NywyMiArNDgsNDYgQEAgUGFzc1JlZlB0cjxTVkdGRUNvbG9yTWF0
cml4RWxlbWVudD4gU1ZHRgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbG9yTWF0cml4
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBl
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2YWx1ZXNB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgQ29sb3JNYXRyaXhUeXBlIHByb3BlcnR5
VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb2xvck1hdHJpeFR5cGU+Ojpmcm9tU3RyaW5nKGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAg
ICBzZXRUeXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4x
QmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBu
ZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5p
bWF0ZWRWYWx1ZXNMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRWYWx1
ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9v
bCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc5LDMy
ICsxMDQsNTcgQEAgYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRQogCiB2
b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNB
dHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omlu
QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
ICAgICAgICAgc3luY2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRy
KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1
ZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp2YWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjphdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMSArNDgsNDkg
QEAgUGFzc1JlZlB0cjxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICByZXR1cm4gc3Vw
cG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+
bmFtZSgpKSkgewogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CisgICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAorICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTUx
LDI3ICs1Miw2NyBAQCBQYXNzUmVmUHRyPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkp
OworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluMkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6b3BlcmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmsxQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjprMkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6azNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Oms0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNv
bnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHIt
Pm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewogICAgICAgICBDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3Np
dGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0
eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShwcm9wZXJ0eVZh
bHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAg
ICAgICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFBdHRyKSB7CiAgICAgICAgIHNldEsxQmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjprMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjprMkF0dHIpIHsKICAgICAgICAgc2V0SzJCYXNlVmFsdWUodmFsdWUudG9G
bG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmszQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmszQXR0cikgewogICAgICAgICBzZXRLM0Jhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRy
KSB7CiAgICAgICAgIHNldEs0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQpAQCAtOTUsMjQgKzEzNiwzMiBAQCBib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6c2V0RmlsdGVyRWZmCiAKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0
YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cgogICAgICAgICB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azFBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpr
MkF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cgotICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6azRBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIp
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9vcGVyYXRvcigpOwogICAgICAgICBzeW5jaHJv
bml6ZUluMSgpOwpAQCAtMTIxLDIzICsxNzAsNTEgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OnN5bmNocm9uaXplUAogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplSzMoKTsKICAgICAgICAgc3luY2hyb25pemVLNCgpOworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplX29wZXJhdG9yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVJbjIoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSzMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
azRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjprNEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLNCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgU1ZHRkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpAQCAtODMs
NDcgKzg0LDk5IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJpeEUKICAg
ICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBv
cnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpvcmRlckF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjplZGdlTW9kZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZGl2aXNvckF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Ymlhc0F0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WEF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WUF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJl
c2VydmVBbHBoYUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5j
b250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVl
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yZGVyQXR0cikgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6b3JkZXJBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAgc2V0T3JkZXJY
QmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0T3JkZXJZQmFzZVZhbHVlKHkpOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0
cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CiAgICAgICAgIEVkZ2VNb2RlVHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52
YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0
RWRnZU1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0
dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBh
cnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRLZXJuZWxNYXRyaXhMaXN0V3JhcHBl
cnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRLZXJuZWxNYXRyaXhCYXNlVmFsdWUobmV3
TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpdmlzb3JB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZGl2aXNvckF0dHIpIHsKICAgICAgICAgc2V0RGl2aXNvckJhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Ymlh
c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAgICAgc2V0Qmlhc0Jhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFy
Z2V0WEF0dHIpCi0gICAgICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0
KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIp
Ci0gICAgICAgIHNldFRhcmdldFlCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0KCkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnRhcmdldFhBdHRyKSB7CisgICAgICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUu
c3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpIHsKKyAgICAgICAgc2V0
VGFyZ2V0WUJhc2VWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEtl
cm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExl
bmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRy
KSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCiAgICAgICAgICAgICBzZXRQcmVzZXJ2
ZUFscGhhQmFzZVZhbHVlKHRydWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAiZmFsc2Ui
KQogICAgICAgICAgICAgc2V0UHJlc2VydmVBbHBoYUJhc2VWYWx1ZShmYWxzZSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2NCw3ICsyMTcsMTIgQEAgdm9pZCBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6c2V0S2VybgogCiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQo
dGhpcyk7CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cgogICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIKQEAgLTE3MiwxOSArMjMw
LDIzIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHIKICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6a2VybmVsVW5pdExlbmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnByZXNlcnZlQWxwaGFBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJl
c2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JkZXJBdHRy
Ci0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxNYXRyaXhBdHRyKQorICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0cikgewogICAgICAg
ICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFZGdlTW9kZSgpOwogICAgICAgICBzeW5jaHJvbml6ZURpdmlzb3IoKTsKQEAgLTE5
NCwyNCArMjU2LDUyIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN5bmNocm8K
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBbHBo
YSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRWRnZU1vZGUoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRGl2aXNvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpi
aWFzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVCaWFzKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVRhcmdldFgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dGFyZ2V0WUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
VGFyZ2V0WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZUtlcm5lbFVuaXRMZW5ndGhYKCk7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0
aFkoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhh
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFs
cGhhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
CisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdDb2xvci5oIgorI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02NiwyMyAr
NjcsNTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRURpZmZ1c2VMaWdodGluZwogICAgIHJl
dHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VT
Y2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2Vy
bmVsVW5pdExlbmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsgLy8gRXZlbiB0aG91Z2ggaXQncyBhIFNWRy1DU1Mg
cHJvcGVydHksIHdlIG92ZXJyaWRlIGl0cyBoYW5kbGluZyBoZXJlLgorICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSB8fCBhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxp
Z2h0aW5nX2NvbG9yQXR0cikgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldElu
MUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgewogICAgICAgICBzZXRT
dXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkaWZmdXNlQ29u
c3RhbnRBdHRyKSB7CiAgICAgICAgIHNldERpZmZ1c2VDb25zdGFudEJhc2VWYWx1ZSh2YWx1ZS50
b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIGZs
b2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4
LCB5KSkgewogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFhCYXNlVmFsdWUoeCk7CiAg
ICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMTMyLDE2ICsxNjIsMjcgQEAgYm9vbCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnNldEZpbAogCiB2b2lkIFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRh
dGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNv
bnN0YW50QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9y
QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0
cikgewogICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIGludmFs
aWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE1NSwyNyArMTk2LDQ2IEBAIHZvaWQg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEUKIAogdm9pZCBTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlR
TmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
U3VyZmFjZVNjYWxlKCk7CiAgICAgICAgIHN5bmNocm9uaXplRGlmZnVzZUNvbnN0YW50KCk7CiAg
ICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25p
emVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGlnaHRpbmdfY29sb3JBdHRyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNl
U2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3VyZmFjZVNjYWxlKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VD
b25zdGFudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEaWZmdXNlQ29uc3RhbnQoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVu
Z3RoWCgpOwogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CisgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29s
IGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00OSwyNSArNTAsNTcg
QEAgUGFzc1JlZlB0cjxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ+IAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKK2Jvb2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNjYWxlQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxlY3Rv
clR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3RvclR5
cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQog
ICAgICAgICAgICAgc2V0WENoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3Rv
ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3Rv
clR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAw
KQogICAgICAgICAgICAgc2V0WUNoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVl
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAg
ICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHNldFNjYWxlQmFz
ZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJv
b2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAt
ODYsMzcgKzExOSw2OSBAQCBib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2V0Rmls
CiAKIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVs
U2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0dHIpCisgICAgU1ZH
RWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlz
KTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JB
dHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpp
bkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWENoYW5uZWxTZWxlY3Rv
cigpOwogICAgICAgICBzeW5jaHJvbml6ZVlDaGFubmVsU2VsZWN0b3IoKTsKICAgICAgICAgc3lu
Y2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIoKTsKICAgICAgICAgc3luY2hy
b25pemVTY2FsZSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVhDaGFu
bmVsU2VsZWN0b3IoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5u
ZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWUNoYW5uZWxTZWxlY3RvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplSW4yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxl
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU2NhbGUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjphdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogICAg
IAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2
aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQ
YXJzZXJVdGlsaXRpZXMuaCIKQEAgLTcyLDU4ICs3MywxMTIgQEAgdm9pZCBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpzZXRTdGREZXZpYQogICAgIGludmFsaWRhdGUoKTsKIH0KIAorYm9vbCBTVkdG
RURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0
cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpkeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN0ZERldmlh
dGlvbkF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAgICAgICBmbG9hdCB4
LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkp
IHsKICAgICAgICAgICAgIHNldFN0ZERldmlhdGlvblhCYXNlVmFsdWUoeCk7CiAgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAg
ICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZHhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHNldER4QmFzZVZhbHVlKGF0
dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBzZXREeUJhc2VWYWx1ZShhdHRy
LT52YWx1ZSgpLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJk
IGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRp
b25BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0gICAgCiAgICAgaWYgKGF0dHJOYW1lID09
IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7
CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7
CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6ZHlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIqIGZpbHRlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEcm9w
U2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTY2LDQ2
ICs2Nyw4NSBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c2V0U3RkRGV2CiAgICAg
aW52YWxpZGF0ZSgpOwogfQogCitib29sIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAg
aWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25YQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0U3RkRGV2aWF0
aW9uWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZh
bHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlhdGlvblkoKTsKICAgICAgICAgc3luY2hyb25pemVJ
bjEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25Y
KCk7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIK
QEAgLTc3LDUwICs3OCw5NiBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0SW1hZ2VS
ZXNvCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKIH0KIAorYm9vbCBT
VkdGRUltYWdlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJp
YnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRy
KSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RS
YXRpbyh0aGlzLCB2YWx1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7Ci0gICAgICAgICAgICByZXF1ZXN0SW1h
Z2VSZXNvdXJjZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgeworICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJj
ZSgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNl
cnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNhbid0IGJlIGNvcnJlY3QsIEknbSBq
dXN0IHByZXNlcnZpbmcgZXhpc3RpbmcgY29kZS4gPGZlSW1hZ2U+ICsgU1ZHIERPTSAnaHJlZicg
Y2hhbmdlcyBuZWVkIHRlc3RpbmcuCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RS
YXRpbygpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9ICAgCisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHRkVJbWFnZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVJbWFnZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxl
bWVudC5oIgpAQCAtNzMsMzcgKzc0LDk0IEBAIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZF
TGlnaHRFbGVtZW4KICAgICByZXR1cm4gbGlnaHROb2RlLT5saWdodFNvdXJjZSgpOwogfQogCiti
b29sIFNWR0ZFTGlnaHRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVk
QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmF6aW11dGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
ekF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cG9pbnRz
QXRYQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2lu
dHNBdFlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBv
aW50c0F0WkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
c3BlY3VsYXJFeHBvbmVudEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFTGlnaHRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6YXppbXV0aEF0dHIpIHsKICAgICAgICAgc2V0QXppbXV0aEJhc2VWYWx1ZSh2YWx1ZS50b0Zs
b2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZWxldmF0aW9u
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpIHsKICAgICAgICAgc2V0RWxldmF0aW9uQmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUodmFsdWUudG9GbG9h
dCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp6QXR0cikgewogICAg
ICAgICBzZXRaQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikgewog
ICAgICAgICBzZXRQb2ludHNBdFhCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFlBdHRyKSB7CiAgICAgICAgIHNldFBvaW50c0F0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WkF0dHIpIHsKICAgICAgICAgc2V0UG9pbnRzQXRaQmFzZVZhbHVlKHZhbHVl
LnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVj
dWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAgIHNl
dFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxp
bWl0aW5nQ29uZUFuZ2xlQXR0cikgewogICAgICAgICBzZXRMaW1pdGluZ0NvbmVBbmdsZUJhc2VW
YWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cgogICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cgogICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKQEAgLTEzMiwxMiArMTkwLDEyIEBAIHZvaWQgU1ZHRkVM
aWdodEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
TGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25p
emVBemltdXRoKCk7CiAgICAgICAgIHN5bmNocm9uaXplRWxldmF0aW9uKCk7CkBAIC0xNDksMjkg
KzIwNyw2NiBAQCB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlCiAgICAg
ICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJF
eHBvbmVudCgpOwogICAgICAgICBzeW5jaHJvbml6ZUxpbWl0aW5nQ29uZUFuZ2xlKCk7CisgICAg
ICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0
cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplQXppbXV0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRWxldmF0aW9uKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVaKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQ
b2ludHNBdFgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZ
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cG9pbnRzQXRZQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVBvaW50c0F0WSgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNB
dFpBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7Ci0gICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9u
ZW50QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVNwZWN1bGFyRXhwb25lbnQoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1p
dGluZ0NvbmVBbmdsZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVMaW1pdGluZ0NvbmVBbmds
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUxpZ2h0RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGln
aHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHJvdGVjdGVk
OgogICAgIFNWR0ZFTGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCiBwcml2YXRlOgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2Rl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBA
IC00NSwzMSArNDYsNTIgQEAgUGFzc1JlZlB0cjxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+IFNWR0ZF
TQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVNZXJnZU5vZGVFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgIHJldHVybiBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU1lcmdl
Tm9kZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7
Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkg
ewogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omlu
QXR0cikgeworICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgIT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBh
cmVudCkKLSAgICAgICAgcmV0dXJuOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0
aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpIHsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwor
ICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJl
ci0+aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpKQorICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVy
KTsKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9y
TGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCYgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkBA
IC04NSwxMCArMTA3LDIzIEBAIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpmaWxsQXR0cmli
dXQKIAogdm9pZCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
KyAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0Vs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
ZXJnZU5vZGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgpAQCAtNjcsMjMgKzY4LDQ3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudDo6c2V0UmFkaXVzKGYKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKK2Jvb2wgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5h
bWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3Bl
cmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJh
ZGl1c0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lP
cGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFs
dWUgPiAwKQogICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsK
ICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAgICBzZXRSYWRpdXNYQmFzZVZhbHVlKHgpOwog
ICAgICAgICAgICAgc2V0UmFkaXVzWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKQEAgLTEwMCwzNiArMTI1LDU5IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6c2V0RmlsdGVyRWYKIAogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpyYWRpdXNBdHRyKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0
dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9v
cGVyYXRvcigpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwogICAgICAgICBzeW5jaHJvbml6
ZVJhZGl1c1goKTsKICAgICAgICAgc3luY2hyb25pemVSYWRpdXNZKCk7CisgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJO
YW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVfb3BlcmF0b3IoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUmFkaXVzWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVJhZGl1c1koKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAt
NDYsNDYgKzQ3LDkxIEBAIFBhc3NSZWZQdHI8U1ZHRkVPZmZzZXRFbGVtZW50PiBTVkdGRU9mZnMK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFT2Zmc2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCitib29sIFNWR0ZFT2Zmc2V0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpkeEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsKICAgICAgICAgc2V0RHhCYXNlVmFsdWUodmFsdWUu
dG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikgewogICAgICAgICBzZXREeUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICBTVkdFbGVtZW50SW5zdGFu
Y2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAorICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsK
ICAgICAgICAgc3luY2hyb25pemVEeSgpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAg
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpk
eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRU9mZnNldEVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNjksMjUgKzcwLDU3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVTcGVjdWxhckxpZ2h0aW4KICAgICByZXR1cm4g
c19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1
cmZhY2VTY2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2VybmVsVW5pdExlbmd0aEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoteyAgICAK
LSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCit7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0
SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKSB7CiAgICAgICAgIHNl
dFN1cmZhY2VTY2FsZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxh
ckNvbnN0YW50QXR0cikgewogICAgICAgICBzZXRTcGVjdWxhckNvbnN0YW50QmFzZVZhbHVlKHZh
bHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
cGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAg
IHNldFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBp
ZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAg
IHNldEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVs
VW5pdExlbmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCkBAIC0xMzksMTYgKzE3MiwyNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OnNldEZpCiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwor
ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cgogICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIKICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyCi0gICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAg
IHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hh
bmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2Miw4ICsyMDYsNiBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OmxpZ2h0CiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAg
ICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUo
KTsKQEAgLTE3MSwyMSArMjEzLDQyIEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c3luY2gKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxhckV4cG9uZW50KCk7CiAgICAgICAg
IHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJu
ZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJDb25zdGFudCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxhckV4cG9uZW50KCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVu
aXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsK
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjphdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDUsMjkgKzQ2LDY1IEBAIFBh
c3NSZWZQdHI8U1ZHRkVUaWxlRWxlbWVudD4gU1ZHRkVUaWxlRWwKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZFVGlsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBT
VkdGRVRpbGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJO
YW1lKTsKK30KKwogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBz
ZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewor
ICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRVRpbGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0gICAgCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1l
bnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4x
KCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyKSB7CisgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAmIFNWR0ZFVGlsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVUaWxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0
aWxpdGllcy5oIgogCkBAIC02MywyOSArNjQsNjEgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdG
RVR1cmJ1bGVuY2VFbGVtZQogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpzZWVkQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVk
QXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAg
ICAgVHVyYnVsZW5jZVR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFR1cmJ1
bGVuY2VUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVl
ID4gMCkKICAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6c3RpdGNoVGlsZXNBdHRyKSB7CiAgICAgICAgIFNWR1N0aXRjaE9wdGlvbnMgcHJvcGVydHlW
YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1N0aXRjaE9wdGlvbnM+Ojpmcm9tU3RyaW5nKHZh
bHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0U3Rp
dGNoVGlsZXNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5
QXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEJhc2VGcmVxdWVuY3lY
QmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUoeSk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2Vl
ZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpzZWVkQXR0cikgewogICAgICAgICBzZXRTZWVkQmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpudW1PY3Rh
dmVzQXR0cikKLSAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS50b1VJbnRTdHJp
Y3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpIHsK
KyAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJp
Y3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQpAQCAtMTA4LDIwICsxNDEsMjcgQEAgYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRG
aWx0ZXJFZgogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJ
bnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyCiAgICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c2VlZEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRj
aFRpbGVzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisg
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAgICBwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0aXRjaFRp
bGVzKCk7CkBAIC0xMjksMjAgKzE2OSw0MiBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OnN5bmNocm9uaXplCiAgICAgICAgIHN5bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKICAgICAg
ICAgc3luY2hyb25pemVTZWVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplTnVtT2N0YXZlcygpOwor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVR5cGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3RpdGNoVGlsZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVT
dGl0Y2hUaWxlcygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJl
cXVlbmN5QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUJh
c2VGcmVxdWVuY3lYKCk7CiAgICAgICAgIHN5bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVTZWVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om51bU9jdGF2ZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZU51bU9jdGF2ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVR1cmJ1
bGVuY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKQEAgLTkwLDc1ICs5MSwxMDYgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50
OjpzZXRGaWx0ZXJSZXModW5zaQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUp
OwogfQogCitib29sIFNWR0ZpbHRlckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6ZmlsdGVyUmVzQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGaWx0ZXJFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUg
PiAwKQogICAgICAgICAgICAgc2V0RmlsdGVyVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRz
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5
VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0UHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUocHJvcGVy
dHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRy
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlm
IChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAg
c2V0RmlsdGVyUmVzWEJhc2VWYWx1ZSh4KTsKICAgICAgICAgICAgIHNldEZpbHRlclJlc1lCYXNl
VmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFj
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR0ZpbHRlckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBib29sIGludmFsaWRhdGVDbGllbnRzID0g
ZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlk
YXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhB
dHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgogICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGludmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsK
KyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCiAgICAgICAgIHVw
ZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoaW52YWxpZGF0ZUNsaWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6cHJpbWl0aXZlVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpm
aWx0ZXJSZXNBdHRyCi0gICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5k
ZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lk
IFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBAIC0xNzAsMjggKzIw
Miw2MiBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAg
IHN5bmNocm9uaXplRmlsdGVyUmVzWSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHls
ZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRmlsdGVyVW5pdHMoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmltaXRpdmVVbml0cygpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVGaWx0ZXJSZXNYKCk7CiAgICAgICAgIHN5bmNocm9uaXplRmls
dGVyUmVzWSgpOwotICAgIH0gZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGaWx0ZXJFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSop
OwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCkBAIC01MywyMSArNTQsNTMgQEAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpTVgogICAgIC8vIFNwZWM6IElmIHRoZSB3aWR0aC9oZWlnaHQg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCiB9CiAKK2Jvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlc3VsdEF0dHIp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6cmVzdWx0QXR0cikgewogICAgICAgICBzZXRSZXN1bHRCYXNlVmFsdWUodmFsdWUpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpCkBAIC03OSwzOSArMTEyLDU4IEBAIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGUKIAogdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
Ci0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQotICAgICAgICBp
bnZhbGlkYXRlKCk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsgICAgCisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2b2lk
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3lu
Y2hyb25pemVZKCk7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKICAgICAgICAgc3luY2hy
b25pemVIZWlnaHQoKTsKICAgICAgICAgc3luY2hyb25pemVSZXN1bHQoKTsKKyAgICAgICAgU1ZH
U3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVJlc3VsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUq
IGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDEwIEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1h
cHBlZEF0dHJpYnUKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94
QXR0cikgewogICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCFhdHRyLT52
YWx1ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmlld0JveChkb2N1bWVu
dCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcGFyc2VWaWV3Qm94KGRvY3VtZW50LCBhdHRyLT52YWx1ZSgpLCB2aWV3Qm94KTsKICAg
ICAgICAgc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3Qm94KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2Vy
dmVBc3BlY3RSYXRpbyh0aGlzLCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMDUsMTEgKzEwNCwzMSBAQCBib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRB
dHRyaWJ1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6c3lu
Y2hyb25pemVQcm9wZXJ0aWVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplVmlld0Jv
eCgpOworICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0
dHIpCisgICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOworICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICAgICAgc3luY2hyb25p
emVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cit9CisKIGJvb2wgU1ZHRml0VG9WaWV3Qm94Ojppc0tu
b3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHJldHVy
biBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyOwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2aWV3
Qm94QXR0cik7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw4IEBACiAjZGVmaW5lIFNWR0ZpdFRvVmlld0JveF9oCiAKICNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzAsNyArMzEsNiBAQCBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBBdHRyaWJ1
dGU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIFF1YWxpZmllZE5h
bWU7CiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwogCiBjbGFzcyBTVkdGaXRUb1ZpZXdC
b3ggewpAQCAtNDIsMTAgKzQyLDE1IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoRG9jdW1lbnQqLCBBdHRyaWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRl
cyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CisgICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnRp
ZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdCb3hC
YXNlVmFsdWUoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mKSA9
IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVWaWV3Qm94KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKSA9IDA7CisKIHByaXZh
dGU6CiAgICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBGbG9h
dFJlY3QmKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdGb3Jl
aWduT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01NiwzMiArNTcsNjgg
QEAgUGFzc1JlZlB0cjxTVkdGb3JlaWduT2JqZWN0RWxlbWVudD4gU1ZHRgogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAorYm9vbCBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAg
aWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdM
YW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp3
aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aGVp
Z2h0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5z
KGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lk
dGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
KSB7CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdo
dCwgdmFsdWUpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xh
bmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
KyAgICAKICAgICBib29sIGlzTGVuZ3RoQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
Ojp5QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyCkBAIC05MywyMCArMTMwLDEyIEBAIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQ6OnN2Z0F0dHJpYnUKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5n
ZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZQotICAgICAgICB8fCBTVkdMYW5n
U3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAgICAgUmVuZGVy
U1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihy
ZW5kZXJlcik7CiB9CiAKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAg
ICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7
CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwpAQCAtMTE1LDIxICsxNDQsNDYgQEAgdm9pZCBTVkdG
b3JlaWduT2JqZWN0RWxlbWVudDo6c3luY2hyb25pegogICAgICAgICBzeW5jaHJvbml6ZUV4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAg
ICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAg
ICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVXaWR0aCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlk
KCk7IH0KKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsOCArNDUsMjQg
QEAgUGFzc1JlZlB0cjxTVkdHRWxlbWVudD4gU1ZHR0VsZW1lbnQ6OmNyZQogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBT
VkdHRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkg
eworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoU1ZHVGVzdHM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCkBAIC01MywzOSArNzAsNTAg
QEAgdm9pZCBTVkdHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQQogICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2
b2lkIFNWR0dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmli
dXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxp
ZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoU1ZH
TGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCiAgICAgICAgIFJl
bmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRp
b24ocmVuZGVyZXIpOwogfQogCiB2b2lkIFNWR0dFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChh
dHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChT
VkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAg
ICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdHRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDYgKzQ3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgpAQCAtNTEsNzMgKzUyLDExNCBAQCBTVkdH
cmFkaWVudEVsZW1lbnQ6OlNWR0dyYWRpZW50RWxlbWVudChjCiB7CiB9CiAKK2Jvb2wgU1ZHR3Jh
ZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRl
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRy
aWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Z3JhZGllbnRU
cmFuc2Zvcm1BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnNwcmVhZE1ldGhvZEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldEdyYWRp
ZW50VW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGllbnRU
cmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgbmV3TGlzdDsKICAgICAg
ICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShuZXdMaXN0
LCBhdHRyLT52YWx1ZSgpKSkKICAgICAgICAgICAgIG5ld0xpc3QuY2xlYXIoKTsKIAogICAgICAg
ICBkZXRhY2hBbmltYXRlZEdyYWRpZW50VHJhbnNmb3JtTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6
ZSgpKTsKICAgICAgICAgc2V0R3JhZGllbnRUcmFuc2Zvcm1CYXNlVmFsdWUobmV3TGlzdCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpIHsKICAgICAgICAgU1ZHU3ByZWFkTWV0aG9kVHlwZSBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHU3ByZWFkTWV0aG9kVHlwZT46OmZy
b21TdHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkK
ICAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZH
VVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBy
ZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHU3R5
bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
KyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmpl
Y3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplR3JhZGll
bnRVbml0cygpOwogICAgICAgICBzeW5jaHJvbml6ZUdyYWRpZW50VHJhbnNmb3JtKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplU3ByZWFkTWV0aG9kKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAg
ICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJO
YW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpncmFkaWVudFVuaXRzQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUdyYWRpZW50VW5pdHMo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1B
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVHcmFkaWVu
dFRyYW5zZm9ybSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcHJlYWRN
ZXRob2RBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3ByZWFk
TWV0aG9kKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0g
ICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHR3JhZGllbnRFbGVtZW50OjpmaWxsUGFzc2VkQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVN
YXAoQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFNWR0dy
YWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTYwLDQ0
ICs2MSw4MiBAQCBQYXNzUmVmUHRyPFNWR0ltYWdlRWxlbWVudD4gU1ZHSW1hZ2VFbGVtCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdJbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAorYm9vbCBTVkdJbWFnZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNl
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBv
cnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjp3aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6aGVpZ2h0QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAg
ICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZh
bHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKICAgICAgICAg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHRoaXMsIGF0
dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lk
dGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdpZHRoLCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAg
aWYgKHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCiAgICAgICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZh
bHVlIGZvciBpbWFnZSBhdHRyaWJ1dGUgPHdpZHRoPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKSB7CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NQcm9wZXJ0eUhlaWdodCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChoZWlnaHRCYXNl
VmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIGltYWdl
IGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHSW1h
Z2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKQotICAgICAgICBtX2ltYWdlTG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50
SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAg
U1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0
aGlzKTsKKyAgICAKICAgICBib29sIGlzTGVuZ3RoQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnhBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjp5QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6d2lkdGhBdHRyCkBAIC0xMDksNiArMTQ4LDExIEBAIHZvaWQgU1ZHSW1hZ2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2UKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0
ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIG1faW1h
Z2VMb2FkZXIudXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3IoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMSwx
NCArMTY1LDE2IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2UKIAog
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIKICAg
ICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAg
ICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKKyAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdJ
bWFnZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
ICAgICAgICAgc3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwpAQCAtMTM4
LDI1ICsxODQsNTYgQEAgdm9pZCBTVkdJbWFnZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydAog
ICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAg
c3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRp
ZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnhBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVz
ZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0
UmF0aW8oKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAg
ICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7Ci0gICAg
ZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0
dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHSW1hZ2VFbGVtZW50Ojph
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
SW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdl
RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFn
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6Omlz
VmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmNwcAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNiArNjgsMjEgQEAgYm9vbCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRy
aWJ1dGUoY29ucwogewogICAgIHJldHVybiBhdHRyTmFtZS5tYXRjaGVzKFhNTE5hbWVzOjpsYW5n
QXR0cikgfHwgYXR0ck5hbWUubWF0Y2hlcyhYTUxOYW1lczo6c3BhY2VBdHRyKTsKIH0KKyAgICAK
K3ZvaWQgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIHhtbFByZWZpeCwgKCJ4bWwiKSk7CisKKyAgICBRdWFsaWZpZWROYW1l
IGxhbmdXaXRoUHJlZml4ID0gWE1MTmFtZXM6OmxhbmdBdHRyOworICAgIGxhbmdXaXRoUHJlZml4
LnNldFByZWZpeCh4bWxQcmVmaXgpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKGxhbmdX
aXRoUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChYTUxOYW1lczo6bGFuZ0F0
dHIpOworCisgICAgUXVhbGlmaWVkTmFtZSBzcGFjZVdpdGhQcmVmaXggPSBYTUxOYW1lczo6c3Bh
Y2VBdHRyOworICAgIHNwYWNlV2l0aFByZWZpeC5zZXRQcmVmaXgoeG1sUHJlZml4KTsKKyAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChzcGFjZVdpdGhQcmVmaXgpOworICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFhNTE5hbWVzOjpzcGFjZUF0dHIpOworfQogCiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMYW5nU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xhbmdTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsMTIgQEAKICNk
ZWZpbmUgU1ZHTGFuZ1NwYWNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0cmlidXRl
OwotY2xhc3MgUXVhbGlmaWVkTmFtZTsKIAogY2xhc3MgU1ZHTGFuZ1NwYWNlIHsKIHB1YmxpYzoK
QEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOworICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+Jik7CiAKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fbGFuZzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Bh
dGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAKQEAgLTU0LDMxICs1NSw2NyBAQCBQYXNzUmVmUHRyPFNWR0xpbmVFbGVtZW50PiBTVkdM
aW5lRWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdMaW5lRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0xpbmVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsK
KyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVz
dHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAg
IFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OngxQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp4MkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eTFBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnkyQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5z
KGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OngxQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eDFBdHRyKSB7CiAgICAgICAgIHNldFgxQmFzZVZhbHVlKFNWR0xlbmd0
aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0cikgewogICAgICAgICBzZXRZMUJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKSB7
CiAgICAgICAgIHNldFgyQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHIt
PnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkyQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnkyQXR0cikgewogICAgICAgICBzZXRZMkJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3Ro
TW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZH
VGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdT
cGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2
b2lkIFNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAg
ICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJk
KHRoaXMpOworICAgIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eDFBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjp5MUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OngyQXR0cgpAQCAtMTAwLDE1ICsxMzcsMTYgQEAgdm9pZCBTVkdMaW5lRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
ICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdMaW5lRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgx
KCk7CiAgICAgICAgIHN5bmNocm9uaXplWTEoKTsKQEAgLTExNiwyMSArMTU0LDQ2IEBAIHZvaWQg
U1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkKICAgICAgICAgc3luY2hyb25pemVZ
MigpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAg
ICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7Cisg
ICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDFBdHRyKQorICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eDFBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWDEoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTFBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MUF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVZMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp4MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OngyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgyKCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTJBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplWTIoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsK
LSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhp
cywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdMaW5lRWxlbWVu
dDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xpbmVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjpp
c1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiTGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCkBAIC02
MSw1OCArNjIsMTAwIEBAIFBhc3NSZWZQdHI8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PiBTVkcK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4MUF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eDJBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnkxQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5MkF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9y
dGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0g
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRyKQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRyKSB7CiAgICAgICAgIHNl
dFgxQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0
cikgewogICAgICAgICBzZXRZMUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwg
YXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eDJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eDJBdHRyKSB7CiAgICAgICAgIHNldFgyQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnkyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkyQXR0cikgewogICAgICAgICBzZXRZMkJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVs
c2UKLSAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdHcmFkaWVudEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eTFBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp4MkF0dHIKLSAg
ICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkyQXR0cikgewotICAgICAgICB1cGRhdGVS
ZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwotCi0gICAgICAgIFJlbmRlck9iamVjdCogb2Jq
ZWN0ID0gcmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlv
bigpOwogCisgICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAg
ICAgb2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICB9CiB9CiAKIHZvaWQgU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQotewotICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7Ci0KK3sgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkp
IHsKICAgICAgICAgc3luY2hyb25pemVYMSgpOwogICAgICAgICBzeW5jaHJvbml6ZVkxKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplWDIoKTsKICAgICAgICAgc3luY2hyb25pemVZMigpOworICAgICAg
ICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MUF0
dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0gICAKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDFB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWDEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eTFBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp5MUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZMSgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MkF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngyQXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVgyKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnkyQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eTJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWTIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCYgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjphdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01QYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01Q
YXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01QYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI3ICs0Myw1MyBAQCBQYXNz
UmVmUHRyPFNWR01QYXRoRWxlbWVudD4gU1ZHTVBhdGhFbGVtCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTVkdNUGF0aEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdN
UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1l
Piwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsK
K30KKwogdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkp
IHsKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0Vs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1l
ID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdN
UGF0aEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw5IEBA
IHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgU1ZHTVBhdGhFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIAorCisgICAgLy8gRklYTUU6IHN2Z0F0dHJpYnV0
ZUNoYW5nZWQgbWlzc2luZy4KKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBmaWxsQXR0cmlidXRlVG9Qcm9wZXJ0eVR5
cGVNYXAoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgpAQCAtNzgsNzEgKzc5LDk5
IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdNYXJrZXJFbGVtZW50Ojp2aWV3Qm8KICAgICByZXR1cm4g
U1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHZpZXdCb3goKSwgcHJlc2Vy
dmVBc3BlY3RSYXRpbygpLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpOwogfQogCitib29sIFNWR01h
cmtlckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1l
Piwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmlzRW1wdHkoKSkgeworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hcmtl
clVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpy
ZWZYQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyZWZZ
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXJrZXJX
aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFy
a2VySGVpZ2h0QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpvcmllbnRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29u
dGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUo
KSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpt
YXJrZXJVbml0c0F0dHIpIHsKICAgICAgICAgU1ZHTWFya2VyVW5pdHNUeXBlIHByb3BlcnR5VmFs
dWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJVbml0c1R5cGU+Ojpmcm9tU3RyaW5nKHZh
bHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0TWFy
a2VyVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVmWEF0dHIpIHsKICAgICAgICAgc2V0
UmVmWEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVmWUF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZZQXR0cikg
ewogICAgICAgICBzZXRSZWZZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCB2
YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFya2VyV2lk
dGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bWFya2VyV2lkdGhBdHRyKSB7CiAgICAgICAgIHNldE1hcmtlcldpZHRoQmFz
ZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFya2VySGVp
Z2h0QXR0cikgewogICAgICAgICBzZXRNYXJrZXJIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExl
bmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpvcmllbnRBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpvcmllbnRBdHRyKSB7CiAgICAgICAgIFNWR0FuZ2xl
IGFuZ2xlOwogICAgICAgICBTVkdNYXJrZXJPcmllbnRUeXBlIG9yaWVudFR5cGUgPSBTVkdQcm9w
ZXJ0eVRyYWl0czxTVkdNYXJrZXJPcmllbnRUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSwgYW5nbGUp
OwogICAgICAgICBpZiAob3JpZW50VHlwZSA+IDApCiAgICAgICAgICAgICBzZXRPcmllbnRUeXBl
QmFzZVZhbHVlKG9yaWVudFR5cGUpOwogICAgICAgICBpZiAob3JpZW50VHlwZSA9PSBTVkdfTUFS
S0VSX09SSUVOVF9BTkdMRSkKICAgICAgICAgICAgIHNldE9yaWVudEFuZ2xlQmFzZVZhbHVlKGFu
Z2xlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQo
KSwgYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBib29sIGludmFsaWRhdGVD
bGllbnRzID0gZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFy
ZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnJlZlhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyZWZZQXR0
cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VyV2lkdGhBdHRyCi0gICAg
ICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRyKSB7Ci0gICAgICAg
IGludmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om1hcmtlckhlaWdodEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9y
bWF0aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigp
OwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaW52YWxpZGF0
ZUNsaWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlclVuaXRzQXR0
cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JpZW50QXR0cgotICAgICAgICB8
fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0g
ICAgICAgIHx8IFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAg
ICAgICAgfHwgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAgICAgb2JqZWN0
LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYg
KGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVNYXJrZXJVbml0
cygpOwogICAgICAgICBzeW5jaHJvbml6ZVJlZlgoKTsKQEAgLTE1MiwzMCArMTgxLDU4IEBAIHZv
aWQgU1ZHTWFya2VyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXIKICAgICAgICAgc3luY2hyb25p
emVPcmllbnRBbmdsZSgpOwogICAgICAgICBzeW5jaHJvbml6ZU9yaWVudFR5cGUoKTsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5bmNo
cm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8o
KTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5h
bWUpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIpCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVNYXJrZXJV
bml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyZWZYQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVm
WEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSZWZYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyZWZZQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZVJlZlkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VyV2lkdGhB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjptYXJrZXJXaWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVNYXJrZXJXaWR0aCgp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpt
YXJrZXJIZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VySGVpZ2h0KCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JpZW50QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZU9yaWVudEFuZ2xlKCk7CiAgICAgICAgIHN5bmNocm9u
aXplT3JpZW50VHlwZSgpOwotICAgIH0gZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hy
b25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
QXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR01hcmtlckVsZW1lbnQ6OmF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQu
aAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIGJvb2wgbmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5
cGVzLmgiCkBAIC02Myw4OCArNjQsMTU0IEBAIFBhc3NSZWZQdHI8U1ZHTWFza0VsZW1lbnQ+IFNW
R01hc2tFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR01hc2tFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTWFza0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkp
OworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdU
ZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0
ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6bWFza1VuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cik7CisgICAgICAgIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjp3aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6aGVpZ2h0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdNYXNrRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldE1hc2tV
bml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6bWFza0NvbnRlbnRVbml0c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5p
dHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1
ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3Ry
aW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAg
ICAgICAgICBzZXRNYXNrQ29udGVudFVuaXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7
CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+
dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
SGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVp
Z2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdNYXNrRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGJvb2wgaW52YWxpZGF0ZUNsaWVudHMgPSBmYWxzZTsKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwor
ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKICAgICAgICAgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
Ojp3aWR0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIp
IHsKLSAgICAgICAgaW52YWxpZGF0ZUNsaWVudHMgPSB0cnVlOworICAgICAgICB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhz
SW5mb3JtYXRpb24oKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChpbnZh
bGlkYXRlQ2xpZW50cwotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFza1VuaXRz
QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFza0NvbnRlbnRVbml0c0F0
dHIKLSAgICAgICAgfHwgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAg
ICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAg
fHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkKLSAgICAgICAgfHwgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpCisgICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAgICAg
b2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdNYXNrRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFza1Vu
aXRzKCk7CiAgICAgICAgIHN5bmNocm9uaXplTWFza0NvbnRlbnRVbml0cygpOwogICAgICAgICBz
eW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CisgICAgICAgIHN5bmNocm9u
aXplV2lkdGgoKTsKKyAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKICAgICAgICAgc3luY2hy
b25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptYXNrVW5p
dHNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFza1VuaXRzQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZU1hc2tVbml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFza0NvbnRlbnRVbml0c0F0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVNYXNrQ29udGVudFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKKyAgICAg
ICAgc3luY2hyb25pemVXaWR0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CisgICAgICAgIHN5bmNocm9uaXpl
SGVpZ2h0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAg
c3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZH
VGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAg
ICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTWFza0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5oCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAgICAgdmlydHVh
bCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9u
IDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSAiU1ZHUGF0aFBhcnNlckZhY3RvcnkuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQXJjLmgi
CkBAIC0xODIsMzEgKzE4Myw1OSBAQCBQYXNzUmVmUHRyPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vCiAgICAgcmV0dXJuIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpj
cmVhdGUodGhpcywgcm9sZSwgeCwgeSk7CiB9CiAKK2Jvb2wgU1ZHUGF0aEVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmli
dXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAg
ICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIpOworICAgIH0KKyAgICByZXR1cm4g
c3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHUGF0
aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
ZEF0dHIpIHsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRo
UGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBpZiAoIWZhY3RvcnktPmJ1aWxkU1ZHUGF0
aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGF0dHItPnZhbHVlKCksIG1fcGF0aEJ5dGVTdHJlYW0sIFVu
YWx0ZXJlZFBhcnNpbmcpKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5yZXBvcnRFcnJvcigiUHJvYmxlbSBwYXJzaW5nIGQ9XCIiICsgYXR0ci0+dmFsdWUo
KSArICJcIiIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXRo
TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIpIHsKICAgICAgICAgc2V0UGF0aExlbmd0
aEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpLnRvRmxvYXQoKSk7Ci0gICAgICAgIGlmIChwYXRoTGVu
Z3RoQmFzZVZhbHVlKCkgPCAwLjBmKQorICAgICAgICBpZiAocGF0aExlbmd0aEJhc2VWYWx1ZSgp
IDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVw
b3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHBhdGggYXR0cmlidXRlIDxwYXRoTGVuZ3Ro
PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZH
UGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0
ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMCw0MyArMjQ5LDUxIEBAIHZvaWQgU1ZH
UGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgICAgIG1fcGF0aFNlZ0xp
c3QudmFsdWUgPSBuZXdMaXN0OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBk
YXRlKCk7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChyZW5kZXJlcikKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUo
KTsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyCi0gICAgICAgIHx8IFNWR0xh
bmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYg
KHJlbmRlcmVyKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIAogdm9pZCBTVkdQYXRoRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZUQoKTsKICAgICAgICAgc3luY2hyb25pemVQYXRoTGVuZ3RoKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdU
ZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpkQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRCgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVQYXRoTGVuZ3RoKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rl
c3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3lu
Y2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1BhdGhFbGVtZW50
OjpzeW5jaHJvbml6ZUQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHJl
dmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0ZXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJT
VkdTVkdFbGVtZW50LmgiCkBAIC03MSw4NSArNzIsMTE2IEBAIFBhc3NSZWZQdHI8U1ZHUGF0dGVy
bkVsZW1lbnQ+IFNWR1BhdHRlcm4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1BhdHRlcm5F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHUGF0dGVybkVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9y
dGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRl
ZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRl
cyk7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnBhdHRlcm5Vbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpOworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVk
QXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHUGF0dGVybkVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlz
U3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSB7
CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1By
b3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHIt
PnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBz
ZXRQYXR0ZXJuVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpw
YXR0ZXJuQ29udGVudFVuaXRzQXR0cikgewogICAgICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1Vu
aXRUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5
VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShw
cm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cGF0dGVyblRyYW5zZm9ybUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKSB7CiAgICAg
ICAgIFNWR1RyYW5zZm9ybUxpc3QgbmV3TGlzdDsKICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1h
YmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShuZXdMaXN0LCBhdHRyLT52YWx1ZSgpKSkKICAg
ICAgICAgICAgIG5ld0xpc3QuY2xlYXIoKTsKIAogICAgICAgICBkZXRhY2hBbmltYXRlZFBhdHRl
cm5UcmFuc2Zvcm1MaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRQYXR0
ZXJuVHJhbnNmb3JtQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFs
dWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAg
ICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgp
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVu
Z3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmICh3aWR0aEJhc2VWYWx1
ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1
ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBwYXR0ZXJuIGF0dHJpYnV0ZSA8
d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVp
Z2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7
Ci0gICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAg
ICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUg
dmFsdWUgZm9yIHBhdHRlcm4gYXR0cmlidXRlIDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2VkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdUZXN0czo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0dHIp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYg
KFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHUGF0dGVybkVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBib29sIGludmFsaWRhdGVDbGllbnRz
ID0gZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZh
bGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgogICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGludmFsaWRhdGVDbGllbnRzID0gdHJ1
ZTsKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCiAgICAgICAg
IHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVy
T2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoaW52YWxpZGF0ZUNsaWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cgotICAgICAgICB8fCBTVkdVUklSZWZlcmVuY2U6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0ZpdFRvVmlld0JveDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHU3R5bGVkRWxlbWVudDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0
ID0gcmVuZGVyZXIoKSkKICAgICAgICAgb2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0K
IAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVBhdHRlcm5Vbml0cygpOwogICAgICAgICBzeW5j
aHJvbml6ZVBhdHRlcm5Db250ZW50VW5pdHMoKTsKQEAgLTE1OSwzNyArMTkxLDc0IEBAIHZvaWQg
U1ZHUGF0dGVybkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGUKICAgICAgICAgc3luY2hyb25pemVX
aWR0aCgpOwogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwogICAgICAgICBzeW5jaHJvbml6
ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94
KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwogICAgICAgICBz
eW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXMoYXR0ck5hbWUpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0
aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVQYXR0ZXJuVW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSB7
CiAgICAgICAgIHN5bmNocm9uaXplUGF0dGVybkNvbnRlbnRVbml0cygpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblRyYW5z
Zm9ybUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQYXR0ZXJuVHJhbnNmb3JtKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNlIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6dmlld0JveEF0dHIpCi0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0
cikKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Ci0gICAgZWxzZSBp
ZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9w
ZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSHJlZigpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXpl
UHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAm
IFNWR1BhdHRlcm5FbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1Bl
bmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIGJv
b2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJz
ZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKQEAgLTQyLDggKzQzLDI1
IEBAIFNWR1BvbHlFbGVtZW50OjpTVkdQb2x5RWxlbWVudChjb25zdCBRdWEKIHsKIH0KIAorYm9v
bCBTVkdQb2x5RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJp
YnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBv
cnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmli
dXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNB
dHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR1BvbHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5u
YW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKICAgICAgICAgU1ZHUG9pbnRMaXN0IG5ld0xp
c3Q7CkBAIC01NCwyMSArNzIsMjggQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dAogICAgICAgICAgICAgbGlzdC0+ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6
ZSgpKTsKIAogICAgICAgICBtX3BvaW50cy52YWx1ZSA9IG5ld0xpc3Q7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogdm9pZCBTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0
dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODIs
OSArMTA3LDEyIEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjpt
YXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHUG9seUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAkocmV2aXNp
b24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQog
CisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOyAKICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdy
YWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgorI2luY2x1ZGUg
IlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKQEAgLTYzLDY2ICs2
NCwxMTQgQEAgUGFzc1JlZlB0cjxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ+IFNWRwogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKK2Jvb2wgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN4QXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6ZnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmZ5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpyQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpjeEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeEF0dHIpIHsKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAg
IHNldEN5QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgp
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyQXR0cikgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
ckF0dHIpIHsKICAgICAgICAgc2V0UkJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZU90aGVy
LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmIChyQmFzZVZhbHVlKCkudmFsdWUodGhpcykg
PCAwLjApCisgICAgICAgIGlmIChyQmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBu
ZWdhdGl2ZSB2YWx1ZSBmb3IgcmFkaWFsIGdyYWRpZW50IHJhZGl1cyA8cj4gaXMgbm90IGFsbG93
ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZnhBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6ZnhBdHRyKSB7CiAgICAgICAgIHNldEZ4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
V2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmZ5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmZ5QXR0cikgewogICAgICAgICBzZXRGeUJhc2VWYWx1ZShTVkdM
ZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UKLSAgICAg
ICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmN4QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lB
dHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpmeEF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ5QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ckF0dHIpIHsKLSAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24o
KTsKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlv
bkd1YXJkKHRoaXMpOworICAgIAorICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9u
KCk7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7
Ci0gICAgICAgIGlmICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOwotCisgICAgaWYgKFJl
bmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAgICAgb2JqZWN0LT5zZXROZWVk
c0xheW91dCh0cnVlKTsKLSAgICB9CiB9CiAKIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUN4
KCk7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKICAgICAgICAgc3luY2hyb25pemVGeCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZUZ5KCk7CiAgICAgICAgIHN5bmNocm9uaXplUigpOworICAgICAg
ICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6Y3hBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3hBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3goKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Y3lBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpjeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVDeSgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmeEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ4QXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZUZ4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZ5
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRnkoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
UigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGgu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAKQEAgLTU3LDQzICs1OCw4NyBAQCBQYXNzUmVmUHRyPFNWR1JlY3RFbGVtZW50PiBTVkdSZWN0
RWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdSZWN0RWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCitib29sIFNWR1JlY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAg
ICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpo
ZWlnaHRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJ4
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeUF0dHIp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVu
Z3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKSB7CiAgICAgICAgIHNl
dFJ4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
LSAgICAgICAgaWYgKHJ4QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlm
IChyeEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9y
IHJlY3QgPHJ4PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpyeUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgewogICAgICAgICBzZXRSeUJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAg
ICBpZiAocnlCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHJ5QmFz
ZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcmVjdCA8
cnk+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OndpZHRoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFz
ZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAg
ICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlmICh3
aWR0aEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9y
IHJlY3QgPHdpZHRoPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAg
IHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFs
dWUoKSkpOwotICAgICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjAp
CisgICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5l
Z2F0aXZlIHZhbHVlIGZvciByZWN0IDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisg
ICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25H
dWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBib29sIGlzTGVuZ3RoQXR0
cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgogICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCkBAIC0xMTcsMTUgKzE2
MiwxNiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSAKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtG
b3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdSZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkg
ewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBAIC0x
MzUsMjUgKzE4MSw1NiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
CiAgICAgICAgIHN5bmNocm9uaXplUnkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRp
ZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJ4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplUngoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnlBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpyeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSeSgpOwotICAgIGVsc2UgaWYgKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChT
VkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6
OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAmIFNWR1JlY3RFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU01JTFRp
bWVDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgpAQCAtMjk5LDkgKzMw
MCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNTU0ZvckF0dHJpYnV0ZShTVkdTVkcKIH0KIAogdm9p
ZCBTVkdTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQotewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwotCit7IAogICAgIC8vIEZJWE1FOiBVZ2x5LCB1Z2x5IGhhY2sgdG8gYXJvdW5k
IHRoYXQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUgaXMgbm90IGNhbGxlZAogICAgIC8vIHdoZW4gc3Zn
LndpZHRoLmJhc2VWYWx1ZSA9IDEwMCBpcyBldmFsdWF0ZWQuCiAgICAgLy8gVGh1cyB0aGUgQ1NT
IGxlbmd0aCB2YWx1ZSBmb3Igd2lkdGggaXMgbm90IHVwZGF0ZWQsIGFuZCB3aWR0aCgpIGNvbXB1
dGVMb2dpY2FsV2lkdGgoKQpAQCAtMzI0LDMzICszMjMsMzMgQEAgdm9pZCBTVkdTVkdFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKAogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZv
cm1hdGlvbigpOwogICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVB
dHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh1cGRhdGVSZWxhdGl2
ZUxlbmd0aHMKICAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKQogICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdab29tQW5kUGFuOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Ojppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtG
b3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAg
ICAgfHwgU1ZHWm9vbUFuZFBhbjo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9
PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZVkoKTsKICAgICAgICAgc3luY2hyb25pemVXaWR0aCgpOwogICAgICAgICBzeW5jaHJvbml6
ZUhlaWdodCgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQo
KTsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJl
c2VydmVBc3BlY3RSYXRpbygpOworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXpl
UHJvcGVydGllcyhhdHRyTmFtZSk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzY0
LDEyICszNjMsMTIgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KAog
ICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwogICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQogICAgICAgICBzeW5j
aHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIpCi0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlv
QXR0cikKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAgZWxz
ZSBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgCisgICAg
ICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKICAg
ICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCiAgICAgICAg
IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgIGVs
c2UKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdTVkdFbGVtZW50OjphdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2Ny
aXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Njcmlw
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
Y3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogCkBAIC00OSwzMSArNTAsNjEg
QEAgUGFzc1JlZlB0cjxTVkdTY3JpcHRFbGVtZW50PiBTVkdTY3JpcHRFbAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgaW5zZXJ0ZWRC
eVBhcnNlciwgZmFsc2UpKTsKIH0KIAorYm9vbCBTVkdTY3JpcHRFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0
ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChIVE1MTmFtZXM6Om9uZXJyb3JBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1NjcmlwdEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIHNldFR5cGUoYXR0ci0+dmFsdWUoKSk7Ci0g
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6b25lcnJvckF0dHIpCi0gICAg
ICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGNy
ZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpvbmVycm9y
QXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTY3JpcHRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIg
fHwgYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpvbmVycm9yQXR0cikKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAg
ICAgICAgaGFuZGxlU291cmNlQXR0cmlidXRlKGhyZWYoKSk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICAvLyBIYW5kbGUgZHlu
YW1pYyB1cGRhdGVzIG9mIHRoZSAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcgYXR0cmlidXRl
LiBPbmx5IHBvc3NpYmxlIGNhc2U6IGNoYW5naW5nIGZyb20gJ3RydWUnIHRvICdmYWxzZScKICAg
ICAgICAgLy8gY2F1c2VzIGFuIGltbWVkaWF0ZSBkaXNwYXRjaCBvZiB0aGUgU1ZHTG9hZCBldmVu
dC4gSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3YXMgJ2ZhbHNlJyBiZWZvcmUgaW5zZXJ0aW5nIHRo
ZSBzY3JpcHQgZWxlbWVudAogICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHRoZSBTVkdMb2Fk
IGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZC4KQEAgLTgzLDIzICsxMTQsMzcgQEAg
dm9pZCBTVkdTY3JpcHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZwogCiAgICAgICAgICAgICBz
ZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaWJsZSgpOwogICAgICAgICB9CisgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTY3JpcHRF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAg
ICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAg
ICAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gICAKKworICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChT
VkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAmIFNWR1NjcmlwdEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFw
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHU2NyaXB0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIHdhc0luc2VydGVkQnlQ
YXJzZXIsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQpOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NywzNSArNDgsNzIgQEAgUGFzc1JlZlB0cjxTVkdT
dG9wRWxlbWVudD4gU1ZHU3RvcEVsZW1lbgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHU3Rv
cEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdTdG9wRWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b2Zmc2V0QXR0cik7Cisg
ICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2
b2lkIFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zm
c2V0QXR0cikgewogICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
ICAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKCIlIikpCiAgICAgICAgICAgICBzZXRPZmZzZXRC
YXNlVmFsdWUodmFsdWUubGVmdCh2YWx1ZS5sZW5ndGgoKSAtIDEpLnRvRmxvYXQoKSAvIDEwMC4w
Zik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldE9mZnNldEJhc2VWYWx1ZSh2YWx1ZS50
b0Zsb2F0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0b3BFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
U1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0
aGlzKTsKIAogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6b2Zmc2V0QXR0cikgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHU3RvcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKKyAgICAgICAgc3lu
Y2hyb25pemVPZmZzZXQoKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0
ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdT
dHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZU9mZnNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwJiBTVkdTdG9wRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdTdG9wRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4NiwzMyBAQCB2b2lkIFNWR1N0
eWxlRWxlbWVudDo6c2V0VGl0bGUoY29uc3QgQXRvCiAgICAgc2V0QXR0cmlidXRlKFNWR05hbWVz
Ojp0aXRsZUF0dHIsIHRpdGxlLCBlYyk7CiB9CiAKK2Jvb2wgU1ZHU3R5bGVFbGVtZW50Ojppc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJp
YnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJp
YnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGl0bGVB
dHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR1N0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRp
dGxlQXR0ciAmJiBtX3NoZWV0KQotICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1
ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CiAgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGl0bGVBdHRyKSB7CisgICAgICAgIGlmIChtX3NoZWV0
KQorICAgICAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDYgKzQ5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdTdHlsZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCisgICAg
Ym9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDEwICsyOTcsOSBAQCBib29sIFNWR1N0eWxlZEVs
ZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgCiAKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOwogICAgIC8vIE5PVEU6IEFueSBzdWJjbGFzcyB3
aGljaCBvdmVycmlkZXMgcGFyc2VNYXBwZWRBdHRyaWJ1dGUgZm9yIGEgcHJvcGVydHkgaGFuZGxl
ZCBieQogICAgIC8vIGNzc1Byb3BlcnR5SWRGb3JTVkdBdHRyaWJ1dGVOYW1lIHdpbGwgYWxzbyBo
YXZlIHRvIG92ZXJyaWRlIG1hcFRvRW50cnkgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBlU1ZHIG1h
cHBpbmcKLSAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVkRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZv
clNWR0F0dHJpYnV0ZU5hbWUoYXR0ck5hbWUpOworICAgIGludCBwcm9wSWQgPSBTVkdTdHlsZWRF
bGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShhdHRyLT5uYW1lKCkpOwog
ICAgIGlmIChwcm9wSWQgPiAwKSB7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIHByb3BJ
ZCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKQEAgLTMx
MSwxMSArMzEwLDEzIEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIK
ICAgICAvLyB0aGUgY2xhc3NOYW1lIGhlcmUuICBzdmdBdHRyaWJ1dGVDaGFuZ2VkIGFjdHVhbGx5
IGNhdXNlcyB0aGUgcmVzdWx0aW5nCiAgICAgLy8gc3R5bGUgdXBkYXRlcyAoaW5zdGVhZCBvZiBT
dHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSkuIFdlIGRvbid0CiAgICAgLy8gdGVs
bCBTdHlsZWRFbGVtZW50IGFib3V0IHRoZSBjaGFuZ2UgdG8gYXZvaWQgcGFyc2luZyB0aGUgY2xh
c3MgbGlzdCB0d2ljZQotICAgIGlmIChhdHRyTmFtZS5tYXRjaGVzKEhUTUxOYW1lczo6Y2xhc3NB
dHRyKSkKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6Y2xhc3NBdHRyKSB7CiAg
ICAgICAgIHNldENsYXNzTmFtZUJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIC8vIGlkIGlzIGhhbmRsZWQgYnkgU3R5bGVkRWxlbWVudCB3aGljaCBTVkdFbGVtZW50
IGluaGVyaXRzIGZyb20KLSAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBpZCBpcyBoYW5kbGVkIGJ5
IFN0eWxlZEVsZW1lbnQgd2hpY2ggU1ZHRWxlbWVudCBpbmhlcml0cyBmcm9tCisgICAgU1ZHRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKIGJvb2wgU1ZHU3R5bGVkRWxl
bWVudDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAg
LTMyNSwyOCArMzI2LDMxIEBAIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0
ZSgKIAogdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOworICAgIGludCBwcm9wSWQgPSBTVkdTdHlsZWRFbGVtZW50Ojpjc3NQ
cm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShhdHRyTmFtZSk7CisgICAgaWYgKHByb3BJZCA+
IDApIHsKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW5zdGFuY2Vz
T2ZFbGVtZW50KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJO
YW1lLm1hdGNoZXMoSFRNTE5hbWVzOjpjbGFzc0F0dHIpKQorICAgIGlmIChhdHRyTmFtZSA9PSBI
VE1MTmFtZXM6OmNsYXNzQXR0cikgewogICAgICAgICBjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY2xh
c3NOYW1lKCkpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOworICAg
ICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQo
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5h
bWUoYXR0ck5hbWUpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIo
KTsKICAgICAgICAgLy8gTm90aWZ5IHJlc291cmNlcyBhYm91dCBpZCBjaGFuZ2VzLCB0aGlzIGlz
IGltcG9ydGFudCBhcyB3ZSBjYWNoZSByZXNvdXJjZXMgYnkgaWQgaW4gU1ZHRG9jdW1lbnRFeHRl
bnNpb25zCiAgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc1NWR1Jlc291cmNlQ29udGFp
bmVyKCkpCiAgICAgICAgICAgICBvYmplY3QtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIo
KS0+aWRDaGFuZ2VkKCk7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFs
bEluc3RhbmNlc09mRWxlbWVudCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAg
IC8vIEludmFsaWRhdGUgYWxsIFNWR0VsZW1lbnRJbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHVz
Ci0gICAgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50
KHRoaXMpOwogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUo
KSB8fCBhdHRyTmFtZS5tYXRjaGVzKEhUTUxOYW1lczo6Y2xhc3NBdHRyKSkKKyAgICBpZiAoYXR0
ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0cikK
ICAgICAgICAgc3luY2hyb25pemVDbGFzc05hbWUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02OSw0NCArNzAsNzQgQEAg
QWZmaW5lVHJhbnNmb3JtKiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRQogICAgIHJldHVybiBtX3N1
cHBsZW1lbnRhbFRyYW5zZm9ybS5nZXQoKTsKIH0KIAorYm9vbCBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHJh
bnNmb3JtQXR0cik7CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0
ck5hbWUpOworfQorCiB2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKFNWR1RyYW5zZm9ybWFi
bGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsK
ICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCBuZXdMaXN0OwogICAgICAgICBpZiAoIVNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKG5ld0xpc3QsIGF0dHItPnZhbHVlKCkp
KQogICAgICAgICAgICAgbmV3TGlzdC5jbGVhcigpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFRy
YW5zZm9ybUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldFRyYW5zZm9y
bUJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgCi0gICAgICAgIFNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0KLSAgICBpZiAoIVNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0
aW9uR3VhcmQodGhpcyk7CiAKICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7
CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIG9iamVjdC0+c2V0TmVl
ZHNUcmFuc2Zvcm1VcGRhdGUoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKG9iamVjdCk7CisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7CisgICAgICAgIG9iamVjdC0+c2V0TmVlZHNU
cmFuc2Zvcm1VcGRhdGUoKTsKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihvYmplY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkp
IHsKKyAgICAgICAgc3luY2hyb25pemVUcmFuc2Zvcm0oKTsKKyAgICAgICAgU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBTVkdUcmFu
c2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVRyYW5zZm9ybSgpOwotfQorICAgICAgICByZXR1cm47CisgICAgfQog
Ci1ib29sIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIHJldHVybiBTVkdUcmFuc2Zvcm1h
YmxlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fCBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogU1ZHRWxlbWVudCogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6Om5lYXJl
c3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDggKzQ3LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBGbG9hdFJl
Y3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7
CiAKLSAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotCiAg
ICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVu
ZGVyIGFzIHBhdGhzCiAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0IHsg
fQogICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKSBjb25zdDsKQEAgLTU3LDYgKzU1
LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiAr
MjMsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5oIgog
CisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3
Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNDQsOCArNDUsMjQgQEAgUGFzc1Jl
ZlB0cjxTVkdTeW1ib2xFbGVtZW50PiBTVkdTeW1ib2xFbAogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU1ZHU3ltYm9sRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1N5
bWJvbEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1l
Piwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmlzRW1wdHkoKSkgeworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMo
YXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1N5bWJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKQEAgLTUzLDQwICs3MCw0OCBAQCB2b2lkIFNWR1N5bWJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmliCiAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9j
dW1lbnQoKSwgYXR0cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNWR1N0eWxlZEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB2b2lkIFNWR1N5bWJvbEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFu
Y2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCisgICAgLy8g
RXZlcnkgb3RoZXIgcHJvcGVydHkgY2hhbmdlIGlzIGlnbm9yZWQuCiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhz
SW5mb3JtYXRpb24oKTsKIH0KIAogdm9pZCBTVkdTeW1ib2xFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1l
ID09IGFueVFOYW1lKCkpIHsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlv
KCk7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7
Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgICAgICBTVkdG
aXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFz
cGVjdFJhdGlvQXR0cikKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKQotICAgICAg
ICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsK
LSAgICBlbHNlIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVBy
ZXNlcnZlQXNwZWN0UmF0aW8oKTsKLSAgICB9IAorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdTeW1ib2xFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTeW1ib2xFbGVtZW50
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N5bWJvbEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR1N5bWJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
KyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmly
dHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgorI2luY2x1
ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTU2LDMzICs1Nyw2OCBAQCB2
b2lkIFNWR1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4CiAgICAgc2V0VGV4dENvbnRl
bnQodGV4dENvbnRlbnQsIGlnbm9yZSk7CiB9CiAKK2Jvb2wgU1ZHVFJlZkVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmli
dXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJp
YnV0ZXMpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChTVkdVUklSZWZl
cmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7CiAgICAgICAgIHVwZGF0ZVJlZmVy
ZW5jZWRUZXh0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUUmVmRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxp
ZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KQorICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3Vy
Y2VJbnZhbGlkYXRpb24ocmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUUmVmRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgeworICAgICAgICBzeW5jaHJvbml6ZUhyZWYo
KTsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpIHx8IFNWR1VSSVJlZmVyZW5jZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
QXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1RSZWZFbGVtZW50OjphdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1RS
ZWZFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1Rlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCwxMyBAQCBib29sIFNW
R1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UoY29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K3ZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3sKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6cmVxdWlyZWRGZWF0dXJlc0F0dHIpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKTsKKyAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3lzdGVtTGFuZ3VhZ2VBdHRyKTsKK30KKwogdm9pZCBT
VkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0g
YW55UU5hbWUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAgcHVibGljOgogICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
Kik7CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAor
ICAgIHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7
CiAgICAgYm9vbCBoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UoY29uc3QgU1ZHRWxlbWVudCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVt
ZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdUZXh0UXVlcnkuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgpAQCAtMTc5LDYyICsx
ODAsMTA4IEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxlY3RTdWJTdHIKICAgICBz
ZWxlY3Rpb24tPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKTsKIH0K
IAorYm9vbCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1Nw
YWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAg
ICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6bGVuZ3RoQWRqdXN0QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRy
KSB7CiAgICAgICAgIFNWR0xlbmd0aEFkanVzdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3Bl
cnR5VHJhaXRzPFNWR0xlbmd0aEFkanVzdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkp
OwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRMZW5ndGhB
ZGp1c3RCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikgewog
ICAgICAgICBtX3RleHRMZW5ndGgudmFsdWUgPSBTVkdMZW5ndGgoTGVuZ3RoTW9kZU90aGVyLCBh
dHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fdGV4dExlbmd0aC52YWx1ZS52YWx1ZSh0aGlz
KSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
cG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciB0ZXh0IGF0dHJpYnV0ZSA8dGV4dExlbmd0
aD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewotICAgICAg
ICAgICAgaWYgKGF0dHItPm5hbWUoKS5tYXRjaGVzKFhNTE5hbWVzOjpzcGFjZUF0dHIpKSB7Ci0g
ICAgICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHBy
ZXNlcnZlU3RyaW5nLCAoInByZXNlcnZlIikpOwotCi0gICAgICAgICAgICAgICAgaWYgKGF0dHIt
PnZhbHVlKCkgPT0gcHJlc2VydmVTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVQcmUpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1ZU5vd3JhcCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIFNWR1N0eWxlZEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChTVkdMYW5n
U3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7CisgICAgICAgIGlmIChhdHRyLT5u
YW1lKCkubWF0Y2hlcyhYTUxOYW1lczo6c3BhY2VBdHRyKSkgeworICAgICAgICAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHByZXNlcnZlU3RyaW5nLCAoInByZXNl
cnZlIikpOworCisgICAgICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSBwcmVzZXJ2ZVN0cmlu
ZykKKyAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRl
U3BhY2UsIENTU1ZhbHVlUHJlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlTm93cmFw
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUxlbmd0aEFkanVzdCgpOwogICAgICAgICBzeW5jaHJvbml6ZVRleHRMZW5ndGgo
KTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAg
ICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGVuZ3RoQWRqdXN0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUxlbmd0aEFkanVzdCgp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGV4
dExlbmd0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVUZXh0TGVuZ3RoKCk7Ci0gICAgZWxz
ZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR1RleHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBpZiAoU1ZH
VGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0MiwxMiArMjg5LDcgQEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIp
CiAgICAgICAgIG1fc3BlY2lmaWVkVGV4dExlbmd0aCA9IG1fdGV4dExlbmd0aC52YWx1ZTsKIAot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICgh
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dGV4dExlbmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omxlbmd0
aEFkanVzdEF0dHIpCisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVu
dFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDYgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgpAQCAtNDgsMTcgKzQ5LDMyIEBAIFBhc3NSZWZQ
dHI8U1ZHVGV4dEVsZW1lbnQ+IFNWR1RleHRFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNWR1RleHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHVGV4dEVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3Vw
cG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1w
dHkoKSkKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRyYW5zZm9y
bUF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdUZXh0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyKQogewotICAgIGlmIChTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5h
bWUoKSkpIHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIFNWR1RyYW5zZm9y
bUxpc3QgbmV3TGlzdDsKICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybUF0dHJpYnV0ZShuZXdMaXN0LCBhdHRyLT52YWx1ZSgpKSkKICAgICAgICAgICAgIG5ld0xp
c3QuY2xlYXIoKTsKIAogICAgICAgICBkZXRhY2hBbmltYXRlZFRyYW5zZm9ybUxpc3RXcmFwcGVy
cyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldFRyYW5zZm9ybUJhc2VWYWx1ZShuZXdMaXN0
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogU1ZHRWxlbWVudCogU1ZHVGV4dEVsZW1lbnQ6Om5lYXJl
c3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdApAQCAtMTI0LDI0ICsxNDAsNDUgQEAgYm9vbCBTVkdU
ZXh0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZQogCiB2b2lkIFNWR1RleHRFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlk
YXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikg
ewogICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKTsKICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihyZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgeworICAgICAgICBzeW5jaHJvbml6ZVRyYW5zZm9ybSgpOworICAg
ICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbnlR
TmFtZSgpIHx8IFNWR1RyYW5zZm9ybWFibGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0cmFu
c2Zvcm1BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHJhbnNmb3JtKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1RleHRFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1RleHRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudElu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTAsNjEgKzUxLDEwNCBAQCBQYXNzUmVmUHRyPFNWR1RleHRQYXRoRWxlbWVudD4gU1ZHVGV4
dFBhCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdUZXh0UGF0aEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkp
OworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdV
UklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzdGFydE9mZnNldEF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWV0aG9kQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzcGFjaW5nQXR0
cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJO
YW1lKTsKK30KKwogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGFydE9mZnNldEF0dHIp
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAg
IFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGFydE9mZnNl
dEF0dHIpIHsKICAgICAgICAgc2V0U3RhcnRPZmZzZXRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0
aE1vZGVPdGhlciwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6Om1ldGhvZEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1ldGhvZEF0dHIpIHsKICAgICAgICAgU1ZHVGV4dFBhdGhN
ZXRob2RUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdUZXh0UGF0aE1l
dGhvZFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUg
PiAwKQogICAgICAgICAgICAgc2V0TWV0aG9kQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGFjaW5nQXR0cikgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
c3BhY2luZ0F0dHIpIHsKICAgICAgICAgU1ZHVGV4dFBhdGhTcGFjaW5nVHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVGV4dFBhdGhTcGFjaW5nVHlwZT46OmZyb21TdHJp
bmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBz
ZXRTcGFjaW5nQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1VS
SVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RleHRQYXRoRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R1RleHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlv
bkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpzdGFydE9mZnNldEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0lu
Zm9ybWF0aW9uKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyCi0gICAgICAgIHx8
IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCi0gICAgICAgIFJl
bmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRp
b24ocmVuZGVyZXIoKSk7CisgICAgaWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIo
KSkKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNv
dXJjZUludmFsaWRhdGlvbihvYmplY3QpOwogfQogCiB2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwot
CiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVT
dGFydE9mZnNldCgpOwogICAgICAgICBzeW5jaHJvbml6ZU1ldGhvZCgpOwogICAgICAgICBzeW5j
aHJvbml6ZVNwYWNpbmcoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0YXJ0
T2Zmc2V0QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgewor
ICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpzdGFydE9mZnNldEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGFydE9mZnNldCgp
OwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptZXRob2RBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWV0
aG9kQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZU1ldGhvZCgpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpzcGFjaW5nQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwYWNpbmdBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplU3BhY2luZygpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
ICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAm
IFNWR1RleHRQYXRoRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKQEAgLTQ0LDM1ICs0NSw2NyBAQCBT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpTVkdUZXh0UG9zaXRpCiB7CiB9CiAKK2Jvb2wgU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpk
eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHlBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJvdGF0ZUF0dHIp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3RoTGlzdCBu
ZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHItPnZhbHVlKCksIExlbmd0aE1vZGVX
aWR0aCk7CiAgICAgICAgIGRldGFjaEFuaW1hdGVkWExpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUo
KSk7CiAgICAgICAgIHNldFhCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBTVkdM
ZW5ndGhMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+dmFsdWUoKSwg
TGVuZ3RoTW9kZUhlaWdodCk7CiAgICAgICAgIGRldGFjaEFuaW1hdGVkWUxpc3RXcmFwcGVycyhu
ZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldFlCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR4QXR0cikgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7
CiAgICAgICAgIFNWR0xlbmd0aExpc3QgbmV3TGlzdDsKICAgICAgICAgbmV3TGlzdC5wYXJzZShh
dHRyLT52YWx1ZSgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgICAgICBkZXRhY2hBbmltYXRlZER4
TGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0RHhCYXNlVmFsdWUobmV3
TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZHlBdHRyKSB7CiAgICAgICAgIFNWR0xlbmd0aExpc3QgbmV3TGlzdDsKICAgICAgICAg
bmV3TGlzdC5wYXJzZShhdHRyLT52YWx1ZSgpLCBMZW5ndGhNb2RlSGVpZ2h0KTsKICAgICAgICAg
ZGV0YWNoQW5pbWF0ZWREeUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNl
dER5QmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpyb3RhdGVBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyb3RhdGVBdHRyKSB7CiAgICAgICAgIFNWR051bWJl
ckxpc3QgbmV3TGlzdDsKICAgICAgICAgbmV3TGlzdC5wYXJzZShhdHRyLT52YWx1ZSgpKTsKICAg
ICAgICAgZGV0YWNoQW5pbWF0ZWRSb3RhdGVMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwog
ICAgICAgICBzZXRSb3RhdGVCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogc3Rh
dGljIGlubGluZSB2b2lkIHVwZGF0ZVBvc2l0aW9uaW5nVmFsdWVzSW5SZW5kZXJlcihSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQpAQCAtMTAxLDcgKzEzNCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
dXBkYXRlUG9zaXRpb25pbmdWYWx1CiAKIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgYm9vbCB1cGRhdGVSZWxhdGl2ZUxl
bmd0aHMgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgpAQCAtMTIwLDYgKzE1OCw4
IEBAIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3ZnQXR0cmkKICAgICAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlv
bihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0
ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCkBAIC0xMzUsMjcgKzE3NSw0NyBAQCB2b2lk
IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmNoaWxkcmVuCiAKIHZvaWQgU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwogICAgICAgICBzeW5j
aHJvbml6ZUR4KCk7CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKICAgICAgICAgc3luY2hyb25p
emVSb3RhdGUoKTsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1RleHRDb250ZW50RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpkeEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUR5
KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJvdGF0
ZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSb3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQ6OmZpbGxQYXNzZWRBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcChBdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXApCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJKHJl
dmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFy
c2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0g
MCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTEgKzIwNiw2
IEBAIGJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHQKICAgICByZXR1cm4g
IWRlbGltUGFyc2VkOwogfQogCi1ib29sIFNWR1RyYW5zZm9ybWFibGU6OmlzS25vd25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgcmV0dXJuIGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShyZXZpc2lvbiA4
NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29w
ZSkgY29uc3QgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKLQot
ICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVm
ZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJl
bmNlLmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVm
ZXJlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMTUgQEAgU3RyaW5nIFNWR1VS
SVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KGNvbnN0IAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAor
dm9pZCBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFs
aWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgeGxpbmtQcmVmaXgsICgieGxpbmsiKSk7CisgICAgUXVhbGlmaWVk
TmFtZSBocmVmV2l0aFByZWZpeCA9IFhMaW5rTmFtZXM6OmhyZWZBdHRyOworICAgIGhyZWZXaXRo
UHJlZml4LnNldFByZWZpeCh4bGlua1ByZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoaHJlZldpdGhQcmVmaXgpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFhMaW5rTmFt
ZXM6OmhyZWZBdHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
Kik7CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAg
ICB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwog
CiAgICAgc3RhdGljIFN0cmluZyBnZXRUYXJnZXQoY29uc3QgU3RyaW5nJiB1cmwpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgs
MzEgKzk4LDYzIEBAIFNWR0VsZW1lbnRJbnN0YW5jZSogU1ZHVXNlRWxlbWVudDo6YW5pbWEKICAg
ICByZXR1cm4gMDsKIH0KICAKK2Jvb2wgU1ZHVXNlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3Rz
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBT
VkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1VzZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VW
YWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAg
ICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVl
KCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYgKHdpZHRoQmFzZVZh
bHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlmICh3aWR0aEJhc2VWYWx1ZSgpLnZh
bHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHVzZSBhdHRyaWJ1dGUgPHdp
ZHRoPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHNldEhlaWdo
dEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwot
ICAgICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAg
IGlmIChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZh
bHVlIGZvciB1c2UgYXR0cmlidXRlIDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIGlzV2VsbEZvcm1lZERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKQEAgLTE0OCw3ICsxODAsMTIgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KAogCiB2b2lkIFNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxp
ZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBib29sIGlzWFlBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyOwogICAgIGJv
b2wgaXNXaWR0aEhlaWdodEF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0
dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHI7CkBAIC0xOTgsMTUgKzIzNSwx
NiBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBpbnZhbGlkYXRlU2hhZG93VHJlZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHVXNlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUo
KSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBA
IC0yMTUsMjMgKzI1Myw1MSBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkoCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAg
ICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJv
cGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omhl
aWdodEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAg
ICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChT
VkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7Ci0gICAgZWxzZSBpZiAoU1ZH
VGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAg
ICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHVXNlRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgp
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsMzcgKzQ4LDY4IEBAIFBhc3NSZWZQdHI8U1ZHVmlld0VsZW1lbnQ+IFNWR1Zp
ZXdFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1ZpZXdFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgU1ZHVmlld0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKK2Jvb2wgU1ZHVmlld0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnZpZXdUYXJnZXRBdHRyKQotICAgICAgICB2aWV3VGFyZ2V0KCku
cmVzZXQoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKQotICAgICAgICAg
ICB8fCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0
dHIpCi0gICAgICAgICAgIHx8IFNWR1pvb21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOwor
ICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVk
QXR0cmlidXRlcyk7CisgICAgICAgIFNWR1pvb21BbmRQYW46OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KIAordm9pZCBTVkdWaWV3RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdTdHlsZWRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZpZXdUYXJnZXRBdHRyKSB7CisgICAg
ICAgIHZpZXdUYXJnZXQoKS5yZXNldChhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0dHIpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKFNWR1pvb21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdWaWV3RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJvbml6
ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cisg
ICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsK
KyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZpZXdUYXJnZXRBdHRyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hy
b25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAg
ICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
QXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1ZpZXdFbGVtZW50OjphdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuaAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1Zp
ZXdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgLy8gRklY
TUU6IHN2Z0F0dHJpYnV0ZUNoYW5nZWQgbWlzc2luZy4KKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBmaWxsQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29t
QW5kUGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBh
bi5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQ
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMSBAQCBib29sIFNWR1pvb21BbmRQ
YW46OmlzS25vd25BdHRyaWJ1dGUoY29uCiAgICAgcmV0dXJuIGF0dHJOYW1lID09IFNWR05hbWVz
Ojp6b29tQW5kUGFuQXR0cjsKIH0KIAordm9pZCBTVkdab29tQW5kUGFuOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7
CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Onpvb21BbmRQYW5BdHRyKTsK
K30KKwogc3RhdGljIGNvbnN0IFVDaGFyIGRpc2FibGVbXSA9ICB7J2QnLCAnaScsICdzJywgJ2En
LCAnYicsICdsJywgJ2UnfTsKIHN0YXRpYyBjb25zdCBVQ2hhciBtYWduaWZ5W10gPSAgeydtJywg
J2EnLCAnZycsICduJywgJ2knLCAnZicsICd5J307CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21BbmRQYW4uaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9v
bUFuZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgYm9vbCBpc0tub3du
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lkIGFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCiAgICAgYm9vbCBwYXJzZVpvb21B
bmRQYW4oY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCk7CiAK
</data>
<flag name="commit-queue"
          id="87508"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94227</attachid>
            <date>2011-05-20 08:46:15 -0700</date>
            <delta_ts>2012-02-10 10:20:34 -0800</delta_ts>
            <desc>Patch v5</desc>
            <filename>PerfPatch-v5.diff</filename>
            <type>text/plain</type>
            <size>318812</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAwIEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBzdmdBdHRyaWJ1dGVDaGFuZ2VkL3N5bmNo
cm9uaXplUHJvcGVydHkvcGFyc2VNYXBwZWRBdHRyaWJ1dGUgc2hvdWxkIGJlIG9wdGltaXplZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExODMKKwor
ICAgICAgICBFeGFtcGxlOiByZWN0LnguYmFzZVZhbC52YWx1ZSA9IDEwMDsKKyAgICAgICAgV2hh
dCBoYXBwZW5zOiBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgaXMgaW52b2tlZCB3aXRoICJTVkdOYW1lczo6cmVjdEF0dHIi
IGFzIHBhcmFtZXRlci4KKworICAgICAgICB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorICAgICAgICB7CisgICAg
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgICAgICAgICAvLyBIYW5kbGUgbXkgb3duIGF0dHJpYnV0ZSBjaGFu
Z2VzLi4uCisgICAgICAgIH0KKworICAgICAgICBXZSBhbHdheXMgdHJhdmVyc2UgdGhlIGJhc2Ug
Y2xhc3MgaGllYXJjaHksIHdoZW4gaW52b2tpbmcgc3ZnQXR0cmlidXRlQ2hhbmdlZCAodGhpcyBo
YXMgYSByZWFzb24sIGV4cGxhaW5lZCBiZWxvdyAoKikgKS4KKyAgICAgICAgU3dpdGNoIHRvIGEg
bW9yZSBlZmZpY2llbnQgcGF0dGVybiwgYnkgcHJvdmlkaW5nIGEgImJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOyIgZnVuY3Rpb24gZm9yIGFsbCBTVkcqRWxl
bWVudHMuCisgICAgICAgIEl0IGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHRoZSBwYXJ0aWN1bGFy
IFNWRypFbGVtZW50IGNsYXNzIGhhbmRsZXMgKGJ1dCBub3QgaXRzIHBhcmVudCBjbGFzc2VzIGF0
dHJpYnV0ZXMpLiBGb3IgZXhhbXBsZSBTVkdSZWN0RWxlbWVudAorICAgICAgICBjb250YWlucyB4
L3kvd2lkdGgvaGVpZ2h0L3J4L3J5IGF0dHJpYnV0ZXMsIGFuZCB0aGUgb25lcyBmcm9tIFNWR1Rl
c3RzL1NWR0xhbmdTcGFjZS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICh4bWw6c3BhY2Uv
bGFuZywgZXRjLiksCisgICAgICAgIGJ1dCBub3QgZWcuIHRyYW5zZm9ybSBhcyB0aGF0J3MgaGFu
ZGxlZCBieSB0aGUgcGFyZW50IGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lgor
CisgICAgICAgIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUuY29udGFpbnMoYXR0ck5hbWUpKSB7CisgICAgICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2Uga25vdyBmb3Igc3VyZSBpdCdzIG9uZSBvZiBvdXIg
YXR0cmlidXRlcyB0aGF0IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgLy8gTm90ZSBmb3IgZWcu
IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCB0aGUgY2FsbCBmcm9tIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkLCB3b3VsZCBiZSBpbW1lZGlhdGVseSBmb3J3YXJkZWQgdG8gdGhl
IGJhc2UgY2xhc3MsIHdoaWNoIGhhbmRsZXMgdHJhbnNmb3JtQXR0ciBjaGFuZ2VzKQorCisgICAg
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7IGRvX3dvcmsoKTsgcmV0
dXJuOyB9CisgICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7IGRv
X3dvcmsoKTsgcmV0dXJuOyB9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vIEFzc3Vy
ZSB0aGF0IHdlIGhhbmRsZWQgYWxsIHByb3BlcnRpZXMgd2UgY2xhaW0gc3VwcG9ydCBmb3IgaW4g
ImlzU3VwcG9ydGVkQXR0cmlidXRlKCkiLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICBFeGFjdGx5IHRoZSBzYW1lIHBhdHRlcm4gY2FuIGJl
IGFwcGxpZWQgdG8gc3luY2hyb25pemVQcm9wZXJ0eSBhbmQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUg
dG8gc3BlZWQgdGhlbSB1cCBhcyB3ZWxsLgorCisgICAgICAgIE5vdGUgKCopOgorICAgICAgICBF
dmVyeSBzdmdBdHRyaWJ1dGVDaGFuZ2VkIGNhbGwgZnJvbSBhIGNsYXNzIGxpa2UgU1ZHUmVjdEVs
ZW1lbnQgaGFzIHRvIHJlYWNoIHRoZSBiYXNlIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQsIGFzIGl0IGhhbmRsZXMKKyAgICAgICAgaW52YWxpZGF0aW9uIG9mIHRo
ZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudC4gU2F5IHRoYXQgYSA8cmVjdD4gaXMgcmVmZXJlbmNl
ZCBieSBhIDx1c2U+IGFuZCB3ZSBjaGFuZ2UgdGhlICd4JyBhdHRyaWJ1dGUgb2YgdGhlIDxyZWN0
PiwgdGhlbgorICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkLCBj
YWxscyBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQo
dGhpcyksIHNvIHRoYXQgdGhlIDx1c2U+IGNhbiByZWJ1aWxkIGl0cyBzaGFkb3cgdHJlZS4uLgor
ICAgICAgICBUaGF0J3MgdGhlIG9ubHkgcmVhc29uIHdlIGRvIHRoZSBiYXNlLWNsYXNzIGRhbmNl
LCBhbmQgY2FuIGVhc2lseSBiZSBhdm9pZGVkLgorCisgICAgICAgIEFkZCAiU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBndWFyZCh0aGlzKSIgc3RhdG1lbnRzIGluIGFsbCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIGltcGxlbWVudGF0aW9ucywgdGhhdCBjYWxscyBpbnZhbGlkYXRl
QWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMpCisgICAgICAgIHVwb24gZGVzdHJ1Y3Rpb24sIGFm
dGVyIHdlJ3ZlIHJlYWN0ZWQgdG8gdGhlIHN2ZyBhdHRyaWJ1dGUgY2hhbmdlLiBUaGlzIGFzc3Vy
ZXMgd2UgbmV2ZXIgZm9yZ2V0IHRvIGNhbGwgdGhlIGludmFsaWRhdGlvbiBtZXRob2QgYW55d2hl
cmUsIGFuZCBkb24ndAorICAgICAgICBuZWVkIHRvIHJlbHkgb24gdGhlIGJhc2UgY2xhc3Mgc3Zn
QXR0cmlidXRlQ2hhbmdlZCgpIGNhbGwgdG8gZG8gaXQuCisgICAgICAgCisgICAgICAgIE9ubHkg
YWZmZWN0cyBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBz
dmcvU1ZHQUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Np
cmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q2lyY2xlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0N1cnNvckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1
YXJkOjpJbnZhbGlkYXRpb25HdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkOjp+SW52YWxpZGF0aW9uR3VhcmQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNl
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUxpZ2h0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TWVyZ2VOb2RlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZz
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAg
ICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJv
bml6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdHRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5
KToKKyAgICAgICAgKiBzdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHTGFu
Z1NwYWNlLmg6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xpbmVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAg
ICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNYXJrZXJFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01hc2tFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkpOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
dGVybkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXR0ZXJuRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL1NWR1BhdHRlcm5FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
Y3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1JlY3RF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0b3BFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAq
IHN2Zy9TVkdTdG9wRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHVGVzdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5oOgorICAgICAg
ICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UGF0aEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyk6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5oOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVmlld0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL1NWR1ZpZXdFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR1pv
b21BbmRQYW4uaDoKKwogMjAxMS0wNS0yMCAgVG9uaXMgVGlpZ2kgIDx0b25pc3RpaWdpQGdtYWls
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTc0LDI2ICs3NSw1
MSBAQCBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKICAgICByZXR1cm4gU1ZHU3R5
bGVkRWxlbWVudDo6dGl0bGUoKTsKIH0KIAorYm9vbCBTVkdBRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAo
KSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0
cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAg
c3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhcmdldEF0dHIpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZv
aWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKQotICAgICAgICBz
ZXRTVkdUYXJnZXRCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
YXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YXJnZXRBdHRyKSB7CisgICAgICAgIHNl
dFNWR1RhcmdldEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdBRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3Rh
bmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIC8v
IFVubGlrZSBvdGhlciBTVkcqRWxlbWVudCBjbGFzc2VzLCBTVkdBRWxlbWVudCBvbmx5IGxpc3Rl
bnMgdG8gU1ZHVVJJUmVmZXJlbmNlIGNoYW5nZXMKICAgICAvLyBhcyBub25lIG9mIHRoZSBvdGhl
ciBwcm9wZXJ0aWVzIGNoYW5nZXMgdGhlIGxpbmtpbmcgYmVoYXZpb3VyIGZvciBvdXIgPGE+IGVs
ZW1lbnQuCkBAIC0xMjMsMjQgKzE0OSw0MSBAQCB2b2lkIFNWR0FFbGVtZW50OjpmaWxsQXR0cmli
dXRlVG9Qcm9wZXJ0CiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJO
YW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTVkdUYXJnZXQoKTsKICAg
ICAgICAgc3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVNWR1RhcmdldCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHQUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIHN2Z1RhcmdldCgpOyB9CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNCArODksMjkgQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6cGF0aEF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhBdHRyKSB7CiAgICAgICAgIG1fcGF0
aCA9IFBhdGgoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQ
YXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9t
U3RyaW5nKGF0dHItPnZhbHVlKCksIG1fcGF0aCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAgICAgCiBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Um90YXRlTW9kZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cm90
YXRlTW9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjQgKzgxLDM5IEBAIEFuaW1hdGVk
QXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3IKICAgICByZXR1cm4gQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0OwogfQogCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0
ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0cik7CisgICAgcmV0dXJu
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInRyYW5zbGF0ZSIp
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICBpZiAodmFsdWUgPT0gInRyYW5zbGF0ZSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgICAgICBlbHNlIGlmIChhdHRy
LT52YWx1ZSgpID09ICJzY2FsZSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJzY2FsZSIp
CiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU7
Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJvdGF0ZSIpCisgICAgICAgIGVs
c2UgaWYgKHZhbHVlID09ICJyb3RhdGUiKQogICAgICAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUo
KSA9PSAic2tld1giKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAic2tld1giKQogICAgICAg
ICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAg
ICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJza2V3WSIpCisgICAgICAgIGVsc2UgaWYgKHZh
bHVlID09ICJza2V3WSIpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1k7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLSAgICAKIHN0YXRpYyBTVkdUcmFuc2Zvcm1M
aXN0KiB0cmFuc2Zvcm1MaXN0Rm9yKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Q7CiAgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50KikgY29uc3Q7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShj
b25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMjUgKzEzNiw1NyBAQCBzdGF0
aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogfQogCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAg
IGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
a2V5VGltZXNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmtleVBvaW50c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisgICAgIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewogICAgICAgICBhdHRyLT52YWx1
ZSgpLnN0cmluZygpLnNwbGl0KCc7JywgbV92YWx1ZXMpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7CiAgICAg
ICAgIHBhcnNlS2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlUaW1lcywgdHJ1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyICYmIGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
c3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9ubHkgYnV0IGl0IGlz
IHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCi0gICAgICAgIC8vIHdoZXJlIHRoZSBvdGhlciB0aW1p
bmcgY2FsY3VsYXRhdGlvbnMgYXJlLgotICAgICAgICBwYXJzZUtleVRpbWVzKGF0dHItPnZhbHVl
KCksIG1fa2V5UG9pbnRzLCBmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgeworICAgICAgICBp
ZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgc3BlY2lmaWVkIHRvIGJlIGFuIGFuaW1hdGVNb3Rpb24gYXR0cmlidXRlIG9u
bHkgYnV0IGl0IGlzIHNpbXBsZXIgdG8gcHV0IGl0IGhlcmUgCisgICAgICAgICAgICAvLyB3aGVy
ZSB0aGUgb3RoZXIgdGltaW5nIGNhbGN1bGF0YXRpb25zIGFyZS4KKyAgICAgICAgICAgIHBhcnNl
S2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlQb2ludHMsIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6a2V5U3BsaW5lc0F0dHIpIHsKICAgICAgICAgcGFyc2VLZXlTcGxpbmVzKGF0dHItPnZhbHVl
KCksIG1fa2V5U3BsaW5lcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0
dHIsIGJvb2wgcHJlc2VydmVEZWNscykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogCiAgICAgZW51bSBDYWxjTW9kZSB7IENhbGNNb2RlRGlzY3JldGUsIENhbGNN
b2RlTGluZWFyLCBDYWxjTW9kZVBhY2VkLCBDYWxjTW9kZVNwbGluZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKIApAQCAtNTIsMzAgKzUzLDYyIEBAIFBhc3NSZWZQdHI8U1ZHQ2lyY2xlRWxlbWVudD4g
U1ZHQ2lyY2xlRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0NpcmNsZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdDaXJjbGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6ckF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRl
cy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExl
bmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOyAgICAgICAKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKSB7CisgICAgICAgIHNl
dEN4QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikgewogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKSB7CiAgICAgICAgIHNldFJCYXNlVmFsdWUoU1ZH
TGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBpZiAockJh
c2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgY2ly
Y2xlIDxyPiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5ndGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpjeUF0dHIKQEAgLTk3LDM0ICsxMzAsNTcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNW
R0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
aWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihyZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3goKTsK
ICAgICAgICAgc3luY2hyb25pemVDeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rl
c3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmN4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplQ3koKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ckF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUigpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdU
ZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAmIFNWR0NpcmNsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIApAQCAtNDksNTYgKzUwLDg2IEBAIFBhc3NSZWZQdHI8
U1ZHQ2xpcFBhdGhFbGVtZW50PiBTVkdDbGlwUGEKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0NsaXBQYXRoRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0NsaXBQ
YXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+
LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjbGlwUGF0aFVuaXRz
QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0
dHJOYW1lKTsKK30KKwogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldENsaXBQ
YXRoVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChT
VkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQorICAgIGlmICghaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmNs
aXBQYXRoVW5pdHNBdHRyCi0gICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwog
fQogCiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUg
PT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUNsaXBQYXRoVW5pdHMoKTsKICAg
ICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmNsaXBQYXRoVW5pdHNBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVDbGlwUGF0aFVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHQ2xpcFBhdGhFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVk
c1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDM2ICs0OCw3NCBAQCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dDo6U1ZHCiB7CiB9CiAKK2Jvb2wgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVk
QXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFibGVWYWx1ZXNBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNsb3BlQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbnRlcmNlcHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmFtcGxpdHVkZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZXhwb25lbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9mZnNldEF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0eXBlQXR0cikgewogICAgICAgICBDb21wb25lbnRUcmFuc2ZlclR5cGUgcHJvcGVydHlWYWx1
ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvbmVudFRyYW5zZmVyVHlwZT46OmZyb21TdHJpbmco
dmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRU
eXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cikgewog
ICAgICAgICBTVkdOdW1iZXJMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UodmFs
dWUpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFRhYmxlVmFsdWVzTGlzdFdyYXBwZXJzKG5ld0xp
c3Quc2l6ZSgpKTsKICAgICAgICAgc2V0VGFibGVWYWx1ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNsb3BlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNs
b3BlQXR0cikgewogICAgICAgICBzZXRTbG9wZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW50ZXJjZXB0QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmludGVyY2VwdEF0dHIpIHsKICAgICAgICAgc2V0SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphbXBsaXR1
ZGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YW1wbGl0dWRlQXR0cikgewogICAgICAgICBzZXRBbXBsaXR1ZGVCYXNlVmFs
dWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmV4cG9uZW50QXR0cikgewogICAgICAgICBzZXRFeHBvbmVu
dEJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAgICAgICAgc2V0T2Zm
c2V0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsKQEAgLTg2
LDIzICsxMjQsNTEgQEAgdm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudAog
ICAgICAgICBzeW5jaHJvbml6ZUFtcGxpdHVkZSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4cG9u
ZW50KCk7CiAgICAgICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIFNWR0VsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVU
eXBlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dGFibGVWYWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVGFibGVWYWx1ZXMoKTsK
LSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzbG9wZUF0dHIp
IHsKICAgICAgICAgc3luY2hyb25pemVTbG9wZSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplSW50ZXJjZXB0KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmFt
cGxpdHVkZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVBbXBsaXR1
ZGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZXhwb25lbnRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpl
eHBvbmVudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVFeHBvbmVudCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplT2Zmc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDIyICs1Niw0NCBAQCBTVkdDdXJzb3JFbGVtZW50
Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiAgICAgICAgICgqaXQpLT5jdXJzb3JFbGVtZW50UmVtb3Zl
ZCgpOwogfQogCitib29sIFNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0
aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWln
aHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgeworICAg
ICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1
ZSgpKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0N1cnNvckVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKQEAgLTEwOSw0NCArMTMyLDY0IEBAIHZvaWQgU1ZHQ3Vy
c29yRWxlbWVudDo6cmVtb3ZlUmVmZXJlbmNlZEUKIAogdm9pZCBTVkdDdXJzb3JFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eUF0dHIKLSAgICAgICAgfHwgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxl
bWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisgICAgU1ZHRWxl
bWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsK
IAotICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9CisgICAgLy8gQW55IGNoYW5nZSBvZiBhIGN1cnNv
ciBzcGVjaWZpYyBhdHRyaWJ1dGUgdHJpZ2dlcnMgdGhpcyByZWNhbGMuCisgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7CisgICAg
SGFzaFNldDxTVkdFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQo
KTsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6
ZVkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWSgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAg
IGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBl
bHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0N1cnNvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ3Vyc29yRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDdXJzb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVz
dHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTUgQEAgcHVibGljOgogCiAg
ICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgPyBt
X2VsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSA6IDA7IH0KIAorICAgIGNsYXNzIEludmFsaWRhdGlv
bkd1YXJkIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW52YWxpZGF0aW9uR3VhcmQp
OworICAgIHB1YmxpYzogICAgCisgICAgICAgIEludmFsaWRhdGlvbkd1YXJkKFNWR0VsZW1lbnQq
IGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQorICAgICAgICB+SW52YWxpZGF0aW9u
R3VhcmQoKSB7IFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxl
bWVudChtX2VsZW1lbnQpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHRWxlbWVudCogbV9l
bGVtZW50OworICAgIH07CisKICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWxsSW5zdGFuY2Vz
T2ZFbGVtZW50KFNWR0VsZW1lbnQqKTsKIAogICAgIHVzaW5nIFRyZWVTaGFyZWQ8U1ZHRWxlbWVu
dEluc3RhbmNlPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAtNTQsMzQgKzU1LDcw
IEBAIFBhc3NSZWZQdHI8U1ZHRWxsaXBzZUVsZW1lbnQ+IFNWR0VsbGlwc2UKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0VsbGlwc2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K2Jvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
Y3hBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmN5QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeEF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnlBdHRyKTsKKyAgICB9
CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQor
CiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpjeEF0dHIpIHsKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVX
aWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Y3lBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xl
bmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBz
ZXRSeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7
CiAgICAgICAgIGlmIChyeEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cng+IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKSB7CiAg
ICAgICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52
YWx1ZSgpKSk7CiAgICAgICAgIGlmIChyeUJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJv
cigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cnk+IGlzIG5vdCBhbGxvd2VkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZh
bGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgaXNMZW5n
dGhBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6Y3hBdHRyCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpjeUF0dHIKQEAgLTEwNCwxNSAr
MTQxLDE2IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRWxsaXBzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1l
KCkpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwogICAgICAgICBzeW5jaHJvbml6ZUN5KCk7
CkBAIC0xMjAsMjEgKzE1OCw0NiBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6
ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplUnkoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVSeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyeUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnJ5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVJ5KCk7Ci0gICAgZWxzZSBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBTVkdUZXN0
czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCYgU1ZHRWxsaXBzZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBA
QCBib29sIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vCiAgICAgcmV0dXJuIGF0
dHJOYW1lID09IFNWR05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQXR0cjsKIH0KIAor
dm9pZCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRB
dHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTIgQEAKICNkZWZpbmUgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZF9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNzIFF1YWxpZmllZE5hbWU7CiAKIC8vIE5vdGVz
IG9uIGEgU1ZHIDEuMSBzcGVjIGRpc2NyZXBhbmN5OgogLy8gVGhlIFNWRyBET00gZGVmaW5lcyB0
aGUgYXR0cmlidXRlIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgYXMgYmVpbmcgb2YgdHlwZSBT
VkdBbmltYXRlZEJvb2xlYW4sIHdoZXJlYXMgdGhlIApAQCAtMzgsNiArNDAsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIGJvb2wg
aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCBhZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKGNv
bnN0IGJvb2wmKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKQEAgLTQ3LDE5ICs0OCw0MyBAQCBQYXNzUmVmUHRyPFNWR0ZFQmxlbmRF
bGVtZW50PiBTVkdGRUJsZW5kCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUJsZW5kRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR0ZFQmxlbmRFbGVtZW50Ojpp
c1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0
dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1vZGVBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lk
IFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptb2RlQXR0
cikgewogICAgICAgICBCbGVuZE1vZGVUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxCbGVuZE1vZGVUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9w
ZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1
ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikgewogICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAg
ICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
Ym9vbCBTVkdGRUJsZW5kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc0LDMzICs5
OSw1NyBAQCBib29sIFNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBCiAKIHZvaWQg
U1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRo
aXMpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikgewogICAgICAg
ICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyCi0gICAgICAgIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAg
IGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1v
ZGUoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIo
KTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVNb2RlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVJbjIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVCbGVu
ZEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVCbGVuZEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CiAgICAgdmly
dHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCkBAIC00NywyMiArNDgsNDYgQEAgUGFzc1JlZlB0cjxTVkdGRUNvbG9yTWF0
cml4RWxlbWVudD4gU1ZHRgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbG9yTWF0cml4
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBl
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2YWx1ZXNB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgewor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAgICAgQ29sb3JNYXRyaXhUeXBlIHByb3BlcnR5
VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb2xvck1hdHJpeFR5cGU+Ojpmcm9tU3RyaW5nKGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAg
ICBzZXRUeXBlQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4x
QmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBu
ZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5p
bWF0ZWRWYWx1ZXNMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRWYWx1
ZXNCYXNlVmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9v
bCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTc5LDMy
ICsxMDQsNTcgQEAgYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRQogCiB2
b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNB
dHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omlu
QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
ICAgICAgICAgc3luY2hyb25pemVUeXBlKCk7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRy
KQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShh
dHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1
ZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp2YWx1ZXNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVmFsdWVzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjphdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMSArNDgsNDkg
QEAgUGFzc1JlZlB0cjxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICByZXR1cm4gc3Vw
cG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+
bmFtZSgpKSkgewogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CisgICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAorICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTUx
LDI3ICs1Miw2NyBAQCBQYXNzUmVmUHRyPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAorYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkp
OworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluMkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6b3BlcmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmsxQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjprMkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6azNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Oms0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNv
bnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHIt
Pm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewogICAgICAgICBDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3Np
dGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0
eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShwcm9wZXJ0eVZh
bHVlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAg
ICAgICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFBdHRyKSB7CiAgICAgICAgIHNldEsxQmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjprMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjprMkF0dHIpIHsKICAgICAgICAgc2V0SzJCYXNlVmFsdWUodmFsdWUudG9G
bG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmszQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmszQXR0cikgewogICAgICAgICBzZXRLM0Jhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRy
KSB7CiAgICAgICAgIHNldEs0QmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQpAQCAtOTUsMjQgKzEzNiwzMiBAQCBib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6c2V0RmlsdGVyRWZmCiAKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0
YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cgogICAgICAgICB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azFBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpr
MkF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cgotICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6azRBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIp
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3lu
Y2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5h
bWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9vcGVyYXRvcigpOwogICAgICAgICBzeW5jaHJv
bml6ZUluMSgpOwpAQCAtMTIxLDIzICsxNzAsNTEgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OnN5bmNocm9uaXplUAogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplSzMoKTsKICAgICAgICAgc3luY2hyb25pemVLNCgpOworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJv
bml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplX29wZXJhdG9yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpIHsKICAgICAgICAgc3luY2hyb25p
emVJbjIoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLMSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprMkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUsyKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cikKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSzMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
azRBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjprNEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLNCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwJiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgU1ZHRkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpAQCAtODMs
NDcgKzg0LDk5IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJpeEUKICAg
ICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBv
cnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpvcmRlckF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjplZGdlTW9kZUF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZGl2aXNvckF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Ymlhc0F0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WEF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WUF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJl
c2VydmVBbHBoYUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5j
b250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVl
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yZGVyQXR0cikgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6b3JkZXJBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAgc2V0T3JkZXJY
QmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0T3JkZXJZQmFzZVZhbHVlKHkpOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0
cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CiAgICAgICAgIEVkZ2VNb2RlVHlwZSBwcm9wZXJ0eVZh
bHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52
YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0
RWRnZU1vZGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbE1hdHJpeEF0
dHIpIHsKICAgICAgICAgU1ZHTnVtYmVyTGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBh
cnNlKHZhbHVlKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRLZXJuZWxNYXRyaXhMaXN0V3JhcHBl
cnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRLZXJuZWxNYXRyaXhCYXNlVmFsdWUobmV3
TGlzdCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpdmlzb3JB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZGl2aXNvckF0dHIpIHsKICAgICAgICAgc2V0RGl2aXNvckJhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Ymlh
c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAgICAgc2V0Qmlhc0Jhc2VWYWx1ZSh2YWx1
ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFy
Z2V0WEF0dHIpCi0gICAgICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0
KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIp
Ci0gICAgICAgIHNldFRhcmdldFlCYXNlVmFsdWUodmFsdWUudG9VSW50U3RyaWN0KCkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnRhcmdldFhBdHRyKSB7CisgICAgICAgIHNldFRhcmdldFhCYXNlVmFsdWUodmFsdWUu
c3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpIHsKKyAgICAgICAgc2V0
VGFyZ2V0WUJhc2VWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEtl
cm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExl
bmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRy
KSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCiAgICAgICAgICAgICBzZXRQcmVzZXJ2
ZUFscGhhQmFzZVZhbHVlKHRydWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAiZmFsc2Ui
KQogICAgICAgICAgICAgc2V0UHJlc2VydmVBbHBoYUJhc2VWYWx1ZShmYWxzZSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2NCw3ICsyMTcsMTIgQEAgdm9pZCBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6c2V0S2VybgogCiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQo
dGhpcyk7CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cgogICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIKQEAgLTE3MiwxOSArMjMw
LDIzIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHIKICAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6a2VybmVsVW5pdExlbmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnByZXNlcnZlQWxwaGFBdHRyKQorICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJl
c2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3JkZXJBdHRy
Ci0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxNYXRyaXhBdHRyKQorICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0cikgewogICAgICAg
ICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFZGdlTW9kZSgpOwogICAgICAgICBzeW5jaHJvbml6ZURpdmlzb3IoKTsKQEAgLTE5
NCwyNCArMjU2LDUyIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN5bmNocm8K
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWCgpOwogICAgICAgICBzeW5jaHJv
bml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBbHBo
YSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNo
cm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0dHIpCisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRWRnZU1vZGUoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRGl2aXNvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpi
aWFzQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Ymlhc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVCaWFzKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZVRhcmdldFgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dGFyZ2V0WUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
VGFyZ2V0WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZUtlcm5lbFVuaXRMZW5ndGhYKCk7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0
aFkoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhh
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBbHBoYUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFs
cGhhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
CisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdDb2xvci5oIgorI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02NiwyMyAr
NjcsNTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRURpZmZ1c2VMaWdodGluZwogICAgIHJl
dHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VT
Y2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2Vy
bmVsVW5pdExlbmd0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsgLy8gRXZlbiB0aG91Z2ggaXQncyBhIFNWRy1DU1Mg
cHJvcGVydHksIHdlIG92ZXJyaWRlIGl0cyBoYW5kbGluZyBoZXJlLgorICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSB8fCBhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxp
Z2h0aW5nX2NvbG9yQXR0cikgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHNldElu
MUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgewogICAgICAgICBzZXRT
dXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkaWZmdXNlQ29u
c3RhbnRBdHRyKSB7CiAgICAgICAgIHNldERpZmZ1c2VDb25zdGFudEJhc2VWYWx1ZSh2YWx1ZS50
b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIGZs
b2F0IHgsIHk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4
LCB5KSkgewogICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFhCYXNlVmFsdWUoeCk7CiAg
ICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMTMyLDE2ICsxNjIsMjcgQEAgYm9vbCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnNldEZpbAogCiB2b2lkIFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRh
dGlvbkd1YXJkKHRoaXMpOworICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNv
bnN0YW50QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExl
bmd0aEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9y
QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0
cikgewogICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIGludmFs
aWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE1NSwyNyArMTk2LDQ2IEBAIHZvaWQg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEUKIAogdm9pZCBTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
eW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlR
TmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiAgICAgICAgIHN5bmNocm9uaXpl
U3VyZmFjZVNjYWxlKCk7CiAgICAgICAgIHN5bmNocm9uaXplRGlmZnVzZUNvbnN0YW50KCk7CiAg
ICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25p
emVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGlnaHRpbmdfY29sb3JBdHRyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNl
U2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3VyZmFjZVNjYWxlKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VD
b25zdGFudEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEaWZmdXNlQ29uc3RhbnQoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVu
Z3RoWCgpOwogICAgICAgICBzeW5jaHJvbml6ZUtlcm5lbFVuaXRMZW5ndGhZKCk7CisgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29s
IGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00OSwyNSArNTAsNTcg
QEAgUGFzc1JlZlB0cjxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ+IAogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKK2Jvb2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojppc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgp
KTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAgICAgICAgc3Vw
cG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKTsKKyAg
ICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNjYWxlQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxlY3Rv
clR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3RvclR5
cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQog
ICAgICAgICAgICAgc2V0WENoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3Rv
ckF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENoYW5uZWxTZWxlY3Rv
clR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAw
KQogICAgICAgICAgICAgc2V0WUNoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVl
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aW5BdHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAg
ICBzZXRJbjJCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHNldFNjYWxlQmFz
ZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJv
b2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAt
ODYsMzcgKzExOSw2OSBAQCBib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2V0Rmls
CiAKIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVs
U2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0dHIpCisgICAgU1ZH
RWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlz
KTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JB
dHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpp
bkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW4yQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWENoYW5uZWxTZWxlY3Rv
cigpOwogICAgICAgICBzeW5jaHJvbml6ZVlDaGFubmVsU2VsZWN0b3IoKTsKICAgICAgICAgc3lu
Y2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVJbjIoKTsKICAgICAgICAgc3luY2hy
b25pemVTY2FsZSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVhDaGFu
bmVsU2VsZWN0b3IoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5u
ZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplWUNoYW5uZWxTZWxlY3RvcigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbjJBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplSW4yKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxl
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c2NhbGVBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU2NhbGUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjphdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogICAg
IAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2
aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQ
YXJzZXJVdGlsaXRpZXMuaCIKQEAgLTcyLDU4ICs3MywxMTIgQEAgdm9pZCBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpzZXRTdGREZXZpYQogICAgIGludmFsaWRhdGUoKTsKIH0KIAorYm9vbCBTVkdG
RURyb3BTaGFkb3dFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0
cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmluQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpkeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN0ZERldmlh
dGlvbkF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAgICAgICBmbG9hdCB4
LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkp
IHsKICAgICAgICAgICAgIHNldFN0ZERldmlhdGlvblhCYXNlVmFsdWUoeCk7CiAgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVlKHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAg
ICBzZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZHhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHNldER4QmFzZVZhbHVlKGF0
dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBzZXREeUJhc2VWYWx1ZShhdHRy
LT52YWx1ZSgpLnRvRmxvYXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJk
IGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRp
b25BdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0gICAgCiAgICAgaWYgKGF0dHJOYW1lID09
IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7CiAgICAg
ICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwogICAgICAgICBzeW5jaHJvbml6ZUR4KCk7
CiAgICAgICAgIHN5bmNocm9uaXplRHkoKTsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVBy
b3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIGlm
ICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25YKCk7
CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
SW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6ZHlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIqIGZpbHRlcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEcm9w
U2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKKyAg
ICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTY2LDQ2
ICs2Nyw4NSBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c2V0U3RkRGV2CiAgICAg
aW52YWxpZGF0ZSgpOwogfQogCitib29sIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cik7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30K
Kwogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAg
aWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25YQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0U3RkRGV2aWF0
aW9uWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZh
bHVlKHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIKLSAgICAgICAgfHwg
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpCisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFt
ZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZVN0ZERldmlhdGlvblkoKTsKICAgICAgICAgc3luY2hyb25pemVJ
bjEoKTsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTdGREZXZpYXRpb25Y
KCk7CiAgICAgICAgIHN5bmNocm9uaXplU3RkRGV2aWF0aW9uWSgpOwotICAgIH0gZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIHN5bmNocm9u
aXplSW4xKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBi
b29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIK
QEAgLTc3LDUwICs3OCw5NiBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0SW1hZ2VS
ZXNvCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKIH0KIAorYm9vbCBT
VkdGRUltYWdlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJp
YnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVk
QXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRy
KSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RS
YXRpbyh0aGlzLCB2YWx1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7Ci0gICAgICAgICAgICByZXF1ZXN0SW1h
Z2VSZXNvdXJjZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgeworICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJj
ZSgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRp
b25HdWFyZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNl
cnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNhbid0IGJlIGNvcnJlY3QsIEknbSBq
dXN0IHByZXNlcnZpbmcgZXhpc3RpbmcgY29kZS4gPGZlSW1hZ2U+ICsgU1ZHIERPTSAnaHJlZicg
Y2hhbmdlcyBuZWVkIHRlc3RpbmcuCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RS
YXRpbygpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9ICAgCisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHRkVJbWFnZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVJbWFnZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxl
bWVudC5oIgpAQCAtNzMsMzcgKzc0LDk0IEBAIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZF
TGlnaHRFbGVtZW4KICAgICByZXR1cm4gbGlnaHROb2RlLT5saWdodFNvdXJjZSgpOwogfQogCiti
b29sIFNWR0ZFTGlnaHRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVk
QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmF6aW11dGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
ekF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cG9pbnRz
QXRYQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2lu
dHNBdFlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBv
aW50c0F0WkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
c3BlY3VsYXJFeHBvbmVudEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0ZFTGlnaHRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6YXppbXV0aEF0dHIpIHsKICAgICAgICAgc2V0QXppbXV0aEJhc2VWYWx1ZSh2YWx1ZS50b0Zs
b2F0KCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZWxldmF0aW9u
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpIHsKICAgICAgICAgc2V0RWxldmF0aW9uQmFzZVZhbHVl
KHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUodmFsdWUudG9GbG9h
dCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp6QXR0cikgewogICAg
ICAgICBzZXRaQmFzZVZhbHVlKHZhbHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikgewog
ICAgICAgICBzZXRQb2ludHNBdFhCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFlBdHRyKSB7CiAgICAgICAgIHNldFBvaW50c0F0WUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WkF0dHIpIHsKICAgICAgICAgc2V0UG9pbnRzQXRaQmFzZVZhbHVlKHZhbHVl
LnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVj
dWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAgIHNl
dFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxp
bWl0aW5nQ29uZUFuZ2xlQXR0cikgewogICAgICAgICBzZXRMaW1pdGluZ0NvbmVBbmdsZUJhc2VW
YWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UKLSAgICAgICAgU1ZHRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cgogICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cgogICAgICAgICB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKQEAgLTEzMiwxMiArMTkwLDEyIEBAIHZvaWQgU1ZHRkVM
aWdodEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW4KICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZF
TGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25p
emVBemltdXRoKCk7CiAgICAgICAgIHN5bmNocm9uaXplRWxldmF0aW9uKCk7CkBAIC0xNDksMjkg
KzIwNyw2NiBAQCB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlCiAgICAg
ICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7CiAgICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJF
eHBvbmVudCgpOwogICAgICAgICBzeW5jaHJvbml6ZUxpbWl0aW5nQ29uZUFuZ2xlKCk7CisgICAg
ICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0
cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplQXppbXV0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplRWxldmF0aW9uKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp4QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
WSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVaKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQ
b2ludHNBdFgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZ
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cG9pbnRzQXRZQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVBvaW50c0F0WSgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNB
dFpBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUG9pbnRzQXRaKCk7Ci0gICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9u
ZW50QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVNwZWN1bGFyRXhwb25lbnQoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1p
dGluZ0NvbmVBbmdsZUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVMaW1pdGluZ0NvbmVBbmds
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRUxpZ2h0RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGln
aHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHJvdGVjdGVk
OgogICAgIFNWR0ZFTGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCiBwcml2YXRlOgorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2Rl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBA
IC00NSwzMSArNDYsNTIgQEAgUGFzc1JlZlB0cjxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+IFNWR0ZF
TQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVNZXJnZU5vZGVFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgIHJldHVybiBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU1lcmdl
Tm9kZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7
Ci0gICAgZWxzZQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkg
ewogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omlu
QXR0cikgeworICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgIT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBh
cmVudCkKLSAgICAgICAgcmV0dXJuOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0
aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpIHsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwor
ICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJl
ci0+aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpKQorICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVy
KTsKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9y
TGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCYgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkBA
IC04NSwxMCArMTA3LDIzIEBAIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpmaWxsQXR0cmli
dXQKIAogdm9pZCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
KyAgICAgICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0Vs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfSAgIAorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVJbjEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
ZXJnZU5vZGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgpAQCAtNjcsMjMgKzY4LDQ3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudDo6c2V0UmFkaXVzKGYKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKK2Jvb2wgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5h
bWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3Bl
cmF0b3JBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJh
ZGl1c0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFt
ZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lP
cGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFs
dWUgPiAwKQogICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpIHsKICAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsK
ICAgICAgICAgZmxvYXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIodmFsdWUsIHgsIHkpKSB7CiAgICAgICAgICAgICBzZXRSYWRpdXNYQmFzZVZhbHVlKHgpOwog
ICAgICAgICAgICAgc2V0UmFkaXVzWUJhc2VWYWx1ZSh5KTsKICAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKQEAgLTEwMCwzNiArMTI1LDU5IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6c2V0RmlsdGVyRWYKIAogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpyYWRpdXNBdHRyKQorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0
dHIpIHsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0K
ICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZV9v
cGVyYXRvcigpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwogICAgICAgICBzeW5jaHJvbml6
ZVJhZGl1c1goKTsKICAgICAgICAgc3luY2hyb25pemVSYWRpdXNZKCk7CisgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJO
YW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVfb3BlcmF0b3IoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUmFkaXVzWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVJhZGl1c1koKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YXR0
cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIApAQCAt
NDYsNDYgKzQ3LDkxIEBAIFBhc3NSZWZQdHI8U1ZHRkVPZmZzZXRFbGVtZW50PiBTVkdGRU9mZnMK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZFT2Zmc2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCitib29sIFNWR0ZFT2Zmc2V0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpkeEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsKICAgICAgICAgc2V0RHhCYXNlVmFsdWUodmFsdWUu
dG9GbG9hdCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR5QXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikgewogICAgICAgICBzZXREeUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6aW5BdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIKLSAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICBTVkdFbGVtZW50SW5zdGFu
Y2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgIAorICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgewogICAgICAgICBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsK
ICAgICAgICAgc3luY2hyb25pemVEeSgpOwogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOworICAg
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
KQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpk
eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUluMSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGRU9mZnNldEVsZW1lbnQ6OmF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNjksMjUgKzcwLDU3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVTcGVjdWxhckxpZ2h0aW4KICAgICByZXR1cm4g
c19pZGVudGlmaWVyOwogfQogCitib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0
cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aW5BdHRyKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1
cmZhY2VTY2FsZUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2VybmVsVW5pdExlbmd0aEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0
cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoteyAgICAK
LSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCit7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgc2V0
SW4xQmFzZVZhbHVlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKSB7CiAgICAgICAgIHNl
dFN1cmZhY2VTY2FsZUJhc2VWYWx1ZSh2YWx1ZS50b0Zsb2F0KCkpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxh
ckNvbnN0YW50QXR0cikgewogICAgICAgICBzZXRTcGVjdWxhckNvbnN0YW50QmFzZVZhbHVlKHZh
bHVlLnRvRmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
cGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CiAgICAgICAg
IHNldFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUudG9GbG9hdCgpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBp
ZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAg
IHNldEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0S2VybmVs
VW5pdExlbmd0aFlCYXNlVmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCkBAIC0xMzksMTYgKzE3MiwyNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OnNldEZpCiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwor
ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cgogICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIKICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyCi0gICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAg
IHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgaW52YWxpZGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hh
bmdlZChjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE2Miw4ICsyMDYsNiBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6OmxpZ2h0CiAKIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAg
ICAgICAgc3luY2hyb25pemVJbjEoKTsKICAgICAgICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUo
KTsKQEAgLTE3MSwyMSArMjEzLDQyIEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c3luY2gKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxhckV4cG9uZW50KCk7CiAgICAgICAg
IHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsKICAgICAgICAgc3luY2hyb25pemVLZXJu
ZWxVbml0TGVuZ3RoWSgpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5B
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVTdXJmYWNlU2NhbGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplU3BlY3VsYXJDb25zdGFudCgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVTcGVjdWxhckV4cG9uZW50KCk7Ci0gICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVu
aXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplS2VybmVsVW5pdExlbmd0aFgoKTsK
ICAgICAgICAgc3luY2hyb25pemVLZXJuZWxVbml0TGVuZ3RoWSgpOworICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjphdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDUsMjkgKzQ2LDY1IEBAIFBh
c3NSZWZQdHI8U1ZHRkVUaWxlRWxlbWVudD4gU1ZHRkVUaWxlRWwKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZFVGlsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBT
VkdGRVRpbGVFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjppbkF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJO
YW1lKTsKK30KKwogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBz
ZXRJbjFCYXNlVmFsdWUodmFsdWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikgewor
ICAgICAgICBzZXRJbjFCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdGRVRpbGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7Ci0gICAgCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjppbkF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAg
ICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1l
bnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KLSAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKQor
ICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSW4x
KCk7CisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hy
b25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aW5BdHRyKSB7CisgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXAmIFNWR0ZFVGlsZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVUaWxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0
aWxpdGllcy5oIgogCkBAIC02MywyOSArNjQsNjEgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdG
RVR1cmJ1bGVuY2VFbGVtZQogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKK2Jvb2wgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0
dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpzZWVkQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6dHlwZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVk
QXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmICghaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKICAgICAg
ICAgVHVyYnVsZW5jZVR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFR1cmJ1
bGVuY2VUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVl
ID4gMCkKICAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6c3RpdGNoVGlsZXNBdHRyKSB7CiAgICAgICAgIFNWR1N0aXRjaE9wdGlvbnMgcHJvcGVydHlW
YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1N0aXRjaE9wdGlvbnM+Ojpmcm9tU3RyaW5nKHZh
bHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0U3Rp
dGNoVGlsZXNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5
QXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKICAgICAgICAgICAgIHNldEJhc2VGcmVxdWVuY3lY
QmFzZVZhbHVlKHgpOwogICAgICAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUoeSk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2Vl
ZEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpzZWVkQXR0cikgewogICAgICAgICBzZXRTZWVkQmFzZVZhbHVlKHZhbHVlLnRv
RmxvYXQoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpudW1PY3Rh
dmVzQXR0cikKLSAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS50b1VJbnRTdHJp
Y3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpIHsK
KyAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJp
Y3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQpAQCAtMTA4LDIwICsxNDEsMjcgQEAgYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRG
aWx0ZXJFZgogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJ
bnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyCiAgICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c2VlZEF0dHIKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRj
aFRpbGVzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisg
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAgICBwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzeW5jaHJvbml6
ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplVHlwZSgpOwogICAgICAgICBzeW5jaHJvbml6ZVN0aXRjaFRp
bGVzKCk7CkBAIC0xMjksMjAgKzE2OSw0MiBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OnN5bmNocm9uaXplCiAgICAgICAgIHN5bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKICAgICAg
ICAgc3luY2hyb25pemVTZWVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplTnVtT2N0YXZlcygpOwor
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmli
dXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVR5cGUoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3RpdGNoVGlsZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVT
dGl0Y2hUaWxlcygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJl
cXVlbmN5QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUJh
c2VGcmVxdWVuY3lYKCk7CiAgICAgICAgIHN5bmNocm9uaXplQmFzZUZyZXF1ZW5jeVkoKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVTZWVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6Om51bU9jdGF2ZXNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZU51bU9jdGF2ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVR1cmJ1
bGVuY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKQEAgLTkwLDc1ICs5MSwxMDYgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50
OjpzZXRGaWx0ZXJSZXModW5zaQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUp
OwogfQogCitib29sIFNWR0ZpbHRlckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdVUklSZWZlcmVuY2U6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6ZmlsdGVyUmVzQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdGaWx0ZXJFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShh
dHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUg
PiAwKQogICAgICAgICAgICAgc2V0RmlsdGVyVW5pdHNCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRz
QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5
VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0UHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUocHJvcGVy
dHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRy
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRy
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CiAgICAgICAgIGZsb2F0IHgsIHk7CiAgICAgICAgIGlm
IChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewogICAgICAgICAgICAg
c2V0RmlsdGVyUmVzWEJhc2VWYWx1ZSh4KTsKICAgICAgICAgICAgIHNldEZpbHRlclJlc1lCYXNl
VmFsdWUoeSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFj
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IFNWR0ZpbHRlckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBib29sIGludmFsaWRhdGVDbGllbnRzID0g
ZmFsc2U7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlk
YXRpb25HdWFyZCh0aGlzKTsKKyAgICAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhB
dHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgogICAgICAgICB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGludmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsK
KyAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCiAgICAgICAgIHVw
ZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoaW52YWxpZGF0ZUNsaWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6cHJpbWl0aXZlVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpm
aWx0ZXJSZXNBdHRyCi0gICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5k
ZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2b2lk
IFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZKCk7CkBAIC0xNzAsMjggKzIw
Miw2MiBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAg
IHN5bmNocm9uaXplRmlsdGVyUmVzWSgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHls
ZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclVuaXRzQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRmlsdGVyVW5pdHMoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmltaXRpdmVVbml0c0F0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmltaXRpdmVVbml0cygpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVGaWx0ZXJSZXNYKCk7CiAgICAgICAgIHN5bmNocm9uaXplRmls
dGVyUmVzWSgpOwotICAgIH0gZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7
Ci0gICAgZWxzZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdGaWx0ZXJFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSop
OwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gODY4MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCkBAIC01MywyMSArNTQsNTMgQEAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpTVgogICAgIC8vIFNwZWM6IElmIHRoZSB3aWR0aC9oZWlnaHQg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCiB9CiAKK2Jvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmli
dXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0
cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlc3VsdEF0dHIp
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFt
ZSk7Cit9CisKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6cmVzdWx0QXR0cikgewogICAgICAgICBzZXRSZXN1bHRCYXNlVmFsdWUodmFsdWUpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpCkBAIC03OSwzOSArMTEyLDU4IEBAIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGUKIAogdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYg
KCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCi0gICAgICAgIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
Ci0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQotICAgICAgICBp
bnZhbGlkYXRlKCk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsgICAgCisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2b2lk
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQoreyAgICAKICAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3lu
Y2hyb25pemVZKCk7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKICAgICAgICAgc3luY2hy
b25pemVIZWlnaHQoKTsKICAgICAgICAgc3luY2hyb25pemVSZXN1bHQoKTsKKyAgICAgICAgU1ZH
U3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eEF0dHIpCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnlBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwotICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVdpZHRoKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKLSAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVJlc3VsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUq
IGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDEwIEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1h
cHBlZEF0dHJpYnUKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94
QXR0cikgewogICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCFhdHRyLT52
YWx1ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmlld0JveChkb2N1bWVu
dCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcGFyc2VWaWV3Qm94KGRvY3VtZW50LCBhdHRyLT52YWx1ZSgpLCB2aWV3Qm94KTsKICAg
ICAgICAgc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3Qm94KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2Vy
dmVBc3BlY3RSYXRpbyh0aGlzLCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMDUsMTEgKzEwNCwzMSBAQCBib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRB
dHRyaWJ1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6c3lu
Y2hyb25pemVQcm9wZXJ0aWVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9uaXplVmlld0Jv
eCgpOworICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0
dHIpCisgICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOworICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICAgICAgc3luY2hyb25p
emVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cit9CisKIGJvb2wgU1ZHRml0VG9WaWV3Qm94Ojppc0tu
b3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHJldHVy
biBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyOwogfQogCit2b2lkIFNWR0ZpdFRvVmlld0JveDo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzKQoreworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp2aWV3
Qm94QXR0cik7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnByZXNlcnZl
QXNwZWN0UmF0aW9BdHRyKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw4IEBACiAjZGVmaW5lIFNWR0ZpdFRvVmlld0JveF9oCiAKICNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTMwLDcgKzMxLDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgQXR0cmlidXRlOwog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBRdWFsaWZpZWROYW1lOwog
Y2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKIAogY2xhc3MgU1ZHRml0VG9WaWV3Qm94IHsK
QEAgLTQyLDEwICs0MiwxNSBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmli
dXRlKERvY3VtZW50KiwgQXR0cmlidXRlKik7CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiYpOworICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3Qm94QmFzZVZh
bHVlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVB
c3BlY3RSYXRpb0Jhc2VWYWx1ZShjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJikgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplVmlld0JveCgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgPSAwOworCiBwcml2YXRlOgog
ICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0
Jik7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb3Jl
aWduT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTYsMzIgKzU3LDY4IEBAIFBh
c3NSZWZQdHI8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+IFNWR0YKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K2Jvb2wgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1Nw
YWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAg
ICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6d2lkdGhB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmhlaWdodEF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3Ro
TW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFz
ZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewog
ICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIHZh
bHVlKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3Bh
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAg
CiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0
cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Ondp
ZHRoQXR0cgpAQCAtOTMsMjAgKzEzMCwxMiBAQCB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
OjpzdmdBdHRyaWJ1CiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhp
cywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNl
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCiAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVy
ZXIpOwogfQogCiB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlm
IChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwogICAg
ICAgICBzeW5jaHJvbml6ZVkoKTsKQEAgLTExNSwyMSArMTQ0LDQ2IEBAIHZvaWQgU1ZHRm9yZWln
bk9iamVjdEVsZW1lbnQ6OnN5bmNocm9uaXoKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwogICAgICAgICBT
VkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKLSAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVy
dGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0Zv
cmVpZ25PYmplY3RFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwcml2YXRlOgogICAgIFNWR0ZvcmVpZ25P
YmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9
CisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDggKzQ1LDI0IEBAIFBh
c3NSZWZQdHI8U1ZHR0VsZW1lbnQ+IFNWR0dFbGVtZW50OjpjcmUKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0dFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHR0Vs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3Vw
cG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1w
dHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAg
IH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9
CisKIHZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNWR1Rlc3RzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChTVkdMYW5n
U3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtNTMsMzkgKzcwLDUwIEBAIHZv
aWQgU1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEEKICAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7Ci0KLSAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNo
YW5nZSh0aGlzLCBhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJl
cikKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlv
bkd1YXJkKHRoaXMpOworICAgIAorICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hh
bmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFNWR0xhbmdT
cGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJl
bmRlcmVyKTsKIH0KIAogdm9pZCBTVkdHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5h
bWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlz
LCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAg
ICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAg
ICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHR0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKKyAgICBib29sIGlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKQEAgLTUxLDczICs1MiwxMTQgQEAgU1ZHR3JhZGll
bnRFbGVtZW50OjpTVkdHcmFkaWVudEVsZW1lbnQoYwogewogfQogCitib29sIFNWR0dyYWRpZW50
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIFNWR1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNm
b3JtQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzcHJl
YWRNZXRob2RBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29u
dGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwog
ICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRHcmFkaWVudFVu
aXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNm
b3JtQXR0cikgewogICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0IG5ld0xpc3Q7CiAgICAgICAgIGlm
ICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobmV3TGlzdCwgYXR0
ci0+dmFsdWUoKSkpCiAgICAgICAgICAgICBuZXdMaXN0LmNsZWFyKCk7CiAKICAgICAgICAgZGV0
YWNoQW5pbWF0ZWRHcmFkaWVudFRyYW5zZm9ybUxpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7
CiAgICAgICAgIHNldEdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzcHJlYWRNZXRob2RBdHRyKSB7CiAgICAgICAgIFNWR1NwcmVhZE1ldGhvZFR5cGUgcHJvcGVy
dHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1NwcmVhZE1ldGhvZFR5cGU+Ojpmcm9tU3Ry
aW5nKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAg
ICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVy
ZXIoKTsKLSAgICBpZiAoIW9iamVjdCkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3ByZWFkTWV0aG9kQXR0cgotICAgICAgICB8fCBTVkdVUklSZWZlcmVuY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZEVs
ZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCisgICAg
aWYgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKSkKICAgICAgICAgb2JqZWN0LT5z
ZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
U3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZUdyYWRpZW50VW5p
dHMoKTsKICAgICAgICAgc3luY2hyb25pemVHcmFkaWVudFRyYW5zZm9ybSgpOwogICAgICAgICBz
eW5jaHJvbml6ZVNwcmVhZE1ldGhvZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgc3luY2hyb25pemVIcmVmKCk7CisgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmdyYWRpZW50VW5pdHNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Z3Jh
ZGllbnRVbml0c0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVHcmFkaWVudFVuaXRzKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
Z3JhZGllbnRUcmFuc2Zvcm1BdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplR3JhZGllbnRUcmFu
c2Zvcm0oKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9k
QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3ByZWFkTWV0aG9kQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVNwcmVhZE1ldGhv
ZCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVs
c2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R0dyYWRpZW50RWxlbWVudDo6ZmlsbFBhc3NlZEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKEF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdHcmFkaWVu
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR0ltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCkBAIC02MCw0NCArNjEs
ODIgQEAgUGFzc1JlZlB0cjxTVkdJbWFnZUVsZW1lbnQ+IFNWR0ltYWdlRWxlbQogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHSW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
K2Jvb2wgU1ZHSW1hZ2VFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVk
QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1
dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Omhl
aWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJl
c2VydmVBc3BlY3RSYXRpb0F0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
LT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFs
dWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAg
ICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgp
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVj
dFJhdGlvQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7CiAgICAgICAgIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh0aGlzLCBhdHRyLT52
YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0
cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0
aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTUHJvcGVydHlXaWR0aCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmICh3
aWR0aEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBm
b3IgaW1hZ2UgYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0
cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWln
aHQsIGF0dHItPnZhbHVlKCkpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJv
cGVydHlIZWlnaHQsIGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVl
KCkudmFsdWUodGhpcykgPCAwLjApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdF
eHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBpbWFnZSBhdHRy
aWJ1dGUgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR0ltYWdlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7Ci0KLSAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKLSAgICAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudElnbm9y
aW5nUHJldmlvdXNFcnJvcigpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0ZSA9IGF0dHJOYW1lID09IFNWR05hbWVz
Ojp4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cgpAQCAtMTA5LDYgKzE0OCwxMSBAQCB2b2lkIFNWR0ltYWdlRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFu
Z2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBtX2ltYWdlTG9h
ZGVyLnVwZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CkBAIC0xMjEsMTQgKzE2
NSwxNiBAQCB2b2lkIFNWR0ltYWdlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlCiAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyCiAgICAgICAg
IHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
CisgICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHSW1hZ2VF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKQEAgLTEzOCwyNSAr
MTg0LDU2IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnQKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAgIHN5bmNo
cm9uaXplSHJlZigpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRo
aXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4
QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
V2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVB
c3BlY3RSYXRpb0F0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlv
KCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
ICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxz
ZSBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwotICAgIGVsc2Ug
aWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR0ltYWdlRWxlbWVudDo6YXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdl
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1l
bnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlk
KCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5jcHAJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xhbmdTcGFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDYgKzY4LDIxIEBAIGJvb2wgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRl
KGNvbnMKIHsKICAgICByZXR1cm4gYXR0ck5hbWUubWF0Y2hlcyhYTUxOYW1lczo6bGFuZ0F0dHIp
IHx8IGF0dHJOYW1lLm1hdGNoZXMoWE1MTmFtZXM6OnNwYWNlQXR0cik7CiB9CisgICAgCit2b2lk
IFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5h
bWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCB4bWxQcmVmaXgsICgieG1sIikpOworCisgICAgUXVhbGlmaWVkTmFtZSBsYW5n
V2l0aFByZWZpeCA9IFhNTE5hbWVzOjpsYW5nQXR0cjsKKyAgICBsYW5nV2l0aFByZWZpeC5zZXRQ
cmVmaXgoeG1sUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChsYW5nV2l0aFBy
ZWZpeCk7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoWE1MTmFtZXM6OmxhbmdBdHRyKTsK
KworICAgIFF1YWxpZmllZE5hbWUgc3BhY2VXaXRoUHJlZml4ID0gWE1MTmFtZXM6OnNwYWNlQXR0
cjsKKyAgICBzcGFjZVdpdGhQcmVmaXguc2V0UHJlZml4KHhtbFByZWZpeCk7CisgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoc3BhY2VXaXRoUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChYTUxOYW1lczo6c3BhY2VBdHRyKTsKK30KIAogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xhbmdTcGFjZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMYW5nU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEyIEBACiAjZGVmaW5l
IFNWR0xhbmdTcGFjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKLWNs
YXNzIFF1YWxpZmllZE5hbWU7CiAKIGNsYXNzIFNWR0xhbmdTcGFjZSB7CiBwdWJsaWM6CkBAIC0z
OSw2ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKik7CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKKyAgICB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1l
PiYpOwogCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2xhbmc7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
CkBAIC01NCwzMSArNTUsNjcgQEAgUGFzc1JlZlB0cjxTVkdMaW5lRWxlbWVudD4gU1ZHTGluZUVs
ZW1lbgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHTGluZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAorYm9vbCBTVkdMaW5lRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAg
aWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjph
ZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdM
YW5nU3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp4MUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eDJBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnkxQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5MkF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRy
TmFtZSk7Cit9CisKIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0
dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAg
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OngxQXR0cikgewogICAgICAgICBzZXRYMUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVu
Z3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpIHsKICAgICAgICAgc2V0WTFCYXNlVmFs
dWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikgewogICAg
ICAgICBzZXRYMkJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1
ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MkF0dHIpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5MkF0dHIpIHsKICAgICAgICAgc2V0WTJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVI
ZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBT
VkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgU1ZH
RWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlz
KTsKKyAgICAKICAgICBib29sIGlzTGVuZ3RoQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OngxQXR0cgogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eTFBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjp4MkF0dHIKQEAgLTEwMCwxNSArMTM3LDE2IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChT
VkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAg
IGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAg
ICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZh
bGlkYXRpb24ocmVuZGVyZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAg
aWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVYMSgpOwog
ICAgICAgICBzeW5jaHJvbml6ZVkxKCk7CkBAIC0xMTYsMjEgKzE1NCw0NiBAQCB2b2lkIFNWR0xp
bmVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5CiAgICAgICAgIHN5bmNocm9uaXplWTIoKTsK
ICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAgICAg
IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAg
ICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0cikKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OngxQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVgxKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkxQXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eTFBdHRyKSB7CiAgICAgICAg
IHN5bmNocm9uaXplWTEoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp4MkF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYMigpOwotICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp5MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnkyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6
ZVkyKCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAg
ZWxzZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJO
YW1lKSkgewogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0
dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTGluZUVsZW1lbnQ6OmF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
aW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxp
ZCgpOyB9CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIKKyNp
bmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgpAQCAtNjEsNTgg
KzYyLDEwMCBAQCBQYXNzUmVmUHRyPFNWR0xpbmVhckdyYWRpZW50RWxlbWVudD4gU1ZHCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpKTsKIH0KIAorYm9vbCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmlzU3VwcG9ydGVk
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywg
KCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eDFBdHRyKTsKKyAgICAgICAgc3VwcG9y
dGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OngyQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5MUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6eTJBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngxQXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngxQXR0cikgewogICAgICAgICBzZXRYMUJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpIHsK
ICAgICAgICAgc2V0WTFCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHIt
PnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OngyQXR0cikgewogICAgICAgICBzZXRYMkJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3Ro
TW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5MkF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MkF0dHIpIHsKICAgICAgICAgc2V0WTJCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlCi0g
ICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp4MUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnkxQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyCi0gICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5MkF0dHIpIHsKLSAgICAgICAgdXBkYXRlUmVsYXRp
dmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKLQotICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9
IHJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3Vh
cmQodGhpcyk7CisgICAgCisgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsK
IAorICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9i
amVjdC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgfQogfQogCiB2b2lkIFNWR0xpbmVhckdy
YWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKLXsKLSAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
YXR0ck5hbWUpOwotCit7ICAgIAogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAg
ICAgICAgIHN5bmNocm9uaXplWDEoKTsKICAgICAgICAgc3luY2hyb25pemVZMSgpOwogICAgICAg
ICBzeW5jaHJvbml6ZVgyKCk7CiAgICAgICAgIHN5bmNocm9uaXplWTIoKTsKKyAgICAgICAgU1ZH
R3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDFBdHRyKQor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR0dy
YWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9ICAgCisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OngxQXR0cikg
ewogICAgICAgICBzeW5jaHJvbml6ZVgxKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnkxQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eTFBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWTEoKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eDJBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4MkF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVYMigpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5MkF0
dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnkyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAmIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQuaAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0
aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0
aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNyArNDMsNTMgQEAgUGFzc1JlZlB0
cjxTVkdNUGF0aEVsZW1lbnQ+IFNWR01QYXRoRWxlbQogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHTVBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHTVBhdGhF
bGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1
cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgIH0K
KyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisK
IHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7Cisg
ICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCiAgICAgICAgIHJldHVybjsKLSAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR01QYXRoRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
U1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBz
eW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHTVBhdGhF
bGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01QYXRoRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdNUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOSBAQCBwdWJs
aWM6CiAgICAgCiBwcml2YXRlOgogICAgIFNWR01QYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKLSAgICAKKworICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFu
Z2VkIG1pc3NpbmcuCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFw
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTc4LDcxICs3OSw5OSBAQCBB
ZmZpbmVUcmFuc2Zvcm0gU1ZHTWFya2VyRWxlbWVudDo6dmlld0JvCiAgICAgcmV0dXJuIFNWR0Zp
dFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3Qm94KCksIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KTsKIH0KIAorYm9vbCBTVkdNYXJrZXJF
bGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1
cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBT
VkdGaXRUb1ZpZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRl
cyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXJrZXJVbml0
c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cmVmWEF0
dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cmVmWUF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VyV2lkdGhB
dHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hcmtlckhl
aWdodEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6b3Jp
ZW50QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5z
KGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7
CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFya2Vy
VW5pdHNBdHRyKSB7CiAgICAgICAgIFNWR01hcmtlclVuaXRzVHlwZSBwcm9wZXJ0eVZhbHVlID0g
U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7
CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKICAgICAgICAgICAgIHNldE1hcmtlclVu
aXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpyZWZYQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKSB7CiAgICAgICAgIHNldFJlZlhC
YXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVmWUF0dHIpIHsKICAg
ICAgICAgc2V0UmVmWUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUp
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0
cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6Om1hcmtlcldpZHRoQXR0cikgewogICAgICAgICBzZXRNYXJrZXJXaWR0aEJhc2VWYWx1
ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0
dHIpIHsKICAgICAgICAgc2V0TWFya2VySGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhN
b2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6b3JpZW50QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6b3JpZW50QXR0cikgewogICAgICAgICBTVkdBbmdsZSBhbmds
ZTsKICAgICAgICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmllbnRUeXBlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcodmFsdWUsIGFuZ2xlKTsKICAg
ICAgICAgaWYgKG9yaWVudFR5cGUgPiAwKQogICAgICAgICAgICAgc2V0T3JpZW50VHlwZUJhc2VW
YWx1ZShvcmllbnRUeXBlKTsKICAgICAgICAgaWYgKG9yaWVudFR5cGUgPT0gU1ZHX01BUktFUl9P
UklFTlRfQU5HTEUpCiAgICAgICAgICAgICBzZXRPcmllbnRBbmdsZUJhc2VWYWx1ZShhbmdsZSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
U1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50KCksIGF0
dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgYm9vbCBpbnZhbGlkYXRlQ2xpZW50
cyA9IGZhbHNlOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52
YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpyZWZYQXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWUF0dHIKICAg
ICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cgotICAgICAgICB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikgewotICAgICAgICBpbnZh
bGlkYXRlQ2xpZW50cyA9IHRydWU7CisgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpt
YXJrZXJIZWlnaHRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlv
bigpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAg
ICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGludmFsaWRhdGVDbGll
bnRzCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIKLSAg
ICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIKLSAgICAgICAgfHwgU1ZH
TGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAg
ICB8fCBTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAg
IHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlm
IChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHls
ZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRy
TmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VyVW5pdHMoKTsK
ICAgICAgICAgc3luY2hyb25pemVSZWZYKCk7CkBAIC0xNTIsMzAgKzE4MSw1OCBAQCB2b2lkIFNW
R01hcmtlckVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAgIHN5bmNocm9uaXplT3Jp
ZW50QW5nbGUoKTsKICAgICAgICAgc3luY2hyb25pemVPcmllbnRUeXBlKCk7CiAgICAgICAgIHN5
bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgICAgICBzeW5jaHJvbml6
ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cisg
ICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsK
KyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRl
KGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bWFya2VyVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VyVW5pdHMo
KTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlZlhBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplUmVmWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpyZWZZQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cmVmWUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVSZWZZ
KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
bWFya2VyV2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplTWFya2VyV2lkdGgoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFya2Vy
SGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZU1hcmtlckhlaWdodCgpOwotICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcmllbnRBdHRyKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpIHsK
ICAgICAgICAgc3luY2hyb25pemVPcmllbnRBbmdsZSgpOwogICAgICAgICBzeW5jaHJvbml6ZU9y
aWVudFR5cGUoKTsKLSAgICB9IGVsc2UgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
OwotICAgIGVsc2UgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXpl
UHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYg
KFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdNYXJrZXJFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3Bl
cnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHJl
dmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBi
b29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5o
IgpAQCAtNjMsODggKzY0LDE1NCBAQCBQYXNzUmVmUHRyPFNWR01hc2tFbGVtZW50PiBTVkdNYXNr
RWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdNYXNrRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCitib29sIFNWR01hc2tFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAg
ICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNW
R0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6bWFza0NvbnRlbnRVbml0c0F0dHIpOworICAgICAgICBzdXBwb3J0ZWRB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6d2lkdGhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6OmhlaWdodEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXNrVW5pdHNBdHRyKSB7CiAgICAgICAgIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+Ojpmcm9tU3RyaW5nKGF0dHItPnZhbHVlKCkpOwog
ICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCiAgICAgICAgICAgICBzZXRNYXNrVW5pdHNC
YXNlVmFsdWUocHJvcGVydHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0
cikgewogICAgICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBT
VkdQcm9wZXJ0eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyhh
dHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAg
ICAgc2V0TWFza0NvbnRlbnRVbml0c0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAg
ICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVl
KCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc2V0WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdo
dCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVl
KFNWR0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7
CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwg
YXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHls
ZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
U3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBib29sIGludmFsaWRhdGVDbGllbnRzID0gZmFsc2U7CisgICAgU1ZHRWxlbWVudElu
c3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAK
ICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjp5QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lk
dGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0g
ICAgICAgIGludmFsaWRhdGVDbGllbnRzID0gdHJ1ZTsKKyAgICAgICAgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmhlaWdodEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9y
bWF0aW9uKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigp
OwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaW52YWxpZGF0
ZUNsaWVudHMKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIK
LSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyCi0g
ICAgICAgIHx8IFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8
fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0g
ICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQor
ICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVj
dC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
U3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAo
YXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZU1hc2tVbml0cygp
OwogICAgICAgICBzeW5jaHJvbml6ZU1hc2tDb250ZW50VW5pdHMoKTsKICAgICAgICAgc3luY2hy
b25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOworICAgICAgICBzeW5jaHJvbml6ZVdp
ZHRoKCk7CisgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7CiAgICAgICAgIHN5bmNocm9uaXpl
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25p
emVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdT
dHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWFza1VuaXRzQXR0
cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tVbml0c0F0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVNYXNrVW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bWFza0NvbnRlbnRVbml0c0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplTWFza0NvbnRlbnRVbml0cygpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVYKCk7Ci0g
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAg
ICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CisgICAgICAgIHN5
bmNocm9uaXplV2lkdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgeworICAgICAgICBzeW5jaHJvbml6ZUhlaWdo
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3Rz
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAg
U1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuaAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogICAgIHZpcnR1YWwgYm9v
bCBuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njgy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR1BhdGhQYXJzZXJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgpAQCAt
MTgyLDMxICsxODMsNTkgQEAgUGFzc1JlZlB0cjxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
bwogICAgIHJldHVybiBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Y3JlYXRl
KHRoaXMsIHJvbGUsIHgsIHkpOwogfQogCitib29sIFNWR1BhdGhFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Cisg
ICAgICAgIFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9y
dGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmRBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBv
cnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1BhdGhFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFp
c1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRBdHRy
KSB7CiAgICAgICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNl
ckZhY3Rvcnk6OnNlbGYoKTsKICAgICAgICAgaWYgKCFmYWN0b3J5LT5idWlsZFNWR1BhdGhCeXRl
U3RyZWFtRnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpLCBtX3BhdGhCeXRlU3RyZWFtLCBVbmFsdGVy
ZWRQYXJzaW5nKSkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVwb3J0RXJyb3IoIlByb2JsZW0gcGFyc2luZyBkPVwiIiArIGF0dHItPnZhbHVlKCkgKyAi
XCIiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0aExlbmd0
aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKSB7CiAgICAgICAgIHNldFBhdGhMZW5ndGhCYXNl
VmFsdWUoYXR0ci0+dmFsdWUoKS50b0Zsb2F0KCkpOwotICAgICAgICBpZiAocGF0aExlbmd0aEJh
c2VWYWx1ZSgpIDwgMC4wZikKKyAgICAgICAgaWYgKHBhdGhMZW5ndGhCYXNlVmFsdWUoKSA8IDAp
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVy
cm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBwYXRoIGF0dHJpYnV0ZSA8cGF0aExlbmd0aD4gaXMg
bm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1BhdGhF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTVkdFbGVtZW50
SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAg
IAogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1l
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAsNDMgKzI0OSw1MSBAQCB2b2lkIFNWR1BhdGhF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAgICAgICBtX3BhdGhTZWdMaXN0LnZh
bHVlID0gbmV3TGlzdDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgp
OwotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291
cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
cmVuZGVyZXIpCisgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CiAg
ICAgfQogCi0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cgotICAgICAgICB8fCBTVkdMYW5nU3Bh
Y2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChyZW5k
ZXJlcikKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRS
ZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVEKCk7CiAgICAgICAgIHN5bmNocm9uaXplUGF0aExlbmd0aCgpOwogICAgICAgICBz
eW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAgU1ZHVGVzdHM6
OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZEF0
dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpkQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUQoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplUGF0aExlbmd0aCgpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdUZXN0czo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9u
aXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdQYXRoRWxlbWVudDo6c3lu
Y2hyb25pemVEKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9v
bCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU1ZHU1ZH
RWxlbWVudC5oIgpAQCAtNzEsODUgKzcyLDExNiBAQCBQYXNzUmVmUHRyPFNWR1BhdHRlcm5FbGVt
ZW50PiBTVkdQYXR0ZXJuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQYXR0ZXJuRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1BhdHRlcm5FbGVtZW50Ojppc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJp
YnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgU1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0
dHJpYnV0ZXMpOworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBw
b3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRy
aWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOwor
ICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVk
QXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpw
YXR0ZXJuVW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKTsKKyAgICAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OndpZHRoQXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJp
YnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOworfQorCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBv
cnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikgewogICAg
ICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0
eVRyYWl0czxTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1
ZSgpKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0UGF0
dGVyblVuaXRzQmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cikgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVy
bkNvbnRlbnRVbml0c0F0dHIpIHsKICAgICAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZT46OmZyb21TdHJpbmcoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVl
ID4gMCkKICAgICAgICAgICAgIHNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUocHJvcGVy
dHlWYWx1ZSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRl
cm5UcmFuc2Zvcm1BdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikgewogICAgICAgICBT
VkdUcmFuc2Zvcm1MaXN0IG5ld0xpc3Q7CiAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobmV3TGlzdCwgYXR0ci0+dmFsdWUoKSkpCiAgICAgICAg
ICAgICBuZXdMaXN0LmNsZWFyKCk7CiAKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRQYXR0ZXJuVHJh
bnNmb3JtTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAgICAgc2V0UGF0dGVyblRy
YW5zZm9ybUJhc2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikgewogICAgICAgICBzZXRYQmFzZVZhbHVlKFNW
R0xlbmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc2V0
WUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3
aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1v
ZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52
YWx1ZSh0aGlzKSA8IDAuMCkKKyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkudmFsdWUodGhp
cykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5y
ZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0dGVybiBhdHRyaWJ1dGUgPHdpZHRo
PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHNldEhlaWdodEJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwotICAg
ICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlm
IChoZWlnaHRCYXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVu
dCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVl
IGZvciBwYXR0ZXJuIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNW
R0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgYXR0cikpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R1BhdHRlcm5FbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgYm9vbCBpbnZhbGlkYXRlQ2xpZW50cyA9IGZh
bHNlOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0
aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0
cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6aGVpZ2h0QXR0cikgewotICAgICAgICBpbnZhbGlkYXRlQ2xpZW50cyA9IHRydWU7Cisg
ICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQogICAgICAgICB1cGRh
dGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVj
dCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGludmFsaWRhdGVDbGllbnRzCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVz
OjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6cGF0dGVyblRyYW5zZm9ybUF0dHIKLSAgICAgICAgfHwgU1ZHVVJJUmVmZXJlbmNlOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdGaXRUb1ZpZXdCb3g6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpCi0gICAgICAgIHx8IFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJl
bmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKIHZv
aWQgU1ZHUGF0dGVybkVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0eShhdHRyTmFtZSk7Ci0KK3sgICAgCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkp
IHsKICAgICAgICAgc3luY2hyb25pemVQYXR0ZXJuVW5pdHMoKTsKICAgICAgICAgc3luY2hyb25p
emVQYXR0ZXJuQ29udGVudFVuaXRzKCk7CkBAIC0xNTksMzcgKzE5MSw3NCBAQCB2b2lkIFNWR1Bh
dHRlcm5FbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlCiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgo
KTsKICAgICAgICAgc3luY2hyb25pemVIZWlnaHQoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwot
ICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKICAgICAgICAgc3luY2hy
b25pemVIcmVmKCk7CisgICAgICAgIFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0
aWVzKGF0dHJOYW1lKTsKICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0
aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSB7CiAgICAgICAgIHN5bmNo
cm9uaXplUGF0dGVyblVuaXRzKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cikgewogICAg
ICAgICBzeW5jaHJvbml6ZVBhdHRlcm5Db250ZW50VW5pdHMoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1B
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUGF0dGVyblRyYW5zZm9ybSgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0
cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVXaWR0
aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWln
aHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3luY2hyb25pemVF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpCi0g
ICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIGVsc2UgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgICAgICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGll
cyhhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6
ZUhyZWYoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdQ
YXR0ZXJuRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYg
KzU3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQZW5kaW5n
UmVzb3VyY2VIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBib29sIGlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGgu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCkBAIC00Miw4ICs0MywyNSBAQCBT
VkdQb2x5RWxlbWVudDo6U1ZHUG9seUVsZW1lbnQoY29uc3QgUXVhCiB7CiB9CiAKK2Jvb2wgU1ZH
UG9seUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1l
Piwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVz
LmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhz
dXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cG9pbnRzQXR0cik7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyKQogeworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgp
KSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpwb2ludHNBdHRyKSB7CiAgICAgICAgIFNWR1BvaW50TGlzdCBuZXdMaXN0OwpA
QCAtNTQsMjEgKzcyLDI4IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXQKICAgICAgICAgICAgIGxpc3QtPmRldGFjaExpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7
CiAKICAgICAgICAgbV9wb2ludHMudmFsdWUgPSBuZXdMaXN0OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxp
ZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKQEAgLTgyLDkgKzEw
NywxMiBAQCB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKQotICAgICAgICB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjppc0tub3duQXR0
cmlidXRlKGF0dHJOYW1lKSB8fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R1BvbHlFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDg2
ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAg
IGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsgCiAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1N0
b3BFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCkBAIC02Myw2NiArNjQsMTE0
IEBAIFBhc3NSZWZQdHI8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PiBTVkcKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCitib29sIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cisg
ICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjeEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChTVkdOYW1lczo6Y3lBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmZ4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpmeUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6ckF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250
YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Y3hBdHRyKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0
ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKSB7CiAgICAgICAgIHNldEN4QmFzZVZhbHVlKFNWR0xl
bmd0aChMZW5ndGhNb2RlV2lkdGgsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikgewogICAgICAgICBzZXRD
eUJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgYXR0ci0+dmFsdWUoKSkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRy
KSB7CiAgICAgICAgIHNldFJCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0
ci0+dmFsdWUoKSkpOwotICAgICAgICBpZiAockJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4w
KQorICAgICAgICBpZiAockJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAg
IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRp
dmUgdmFsdWUgZm9yIHJhZGlhbCBncmFkaWVudCByYWRpdXMgPHI+IGlzIG5vdCBhbGxvd2VkIik7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4
QXR0cikgewogICAgICAgICBzZXRGeEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRo
LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpmeUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpmeUF0dHIpIHsKICAgICAgICAgc2V0RnlCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIFNW
R0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpjeEF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN5QXR0cgot
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnhBdHRyCi0gICAgICAgIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpmeUF0dHIKLSAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnJBdHRyKSB7Ci0gICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7Cisg
ICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFy
ZCh0aGlzKTsKKyAgICAKKyAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOwog
ICAgICAgICAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwotICAg
ICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLQorICAgIGlmIChSZW5kZXJP
YmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlv
dXQodHJ1ZSk7Ci0gICAgfQogfQogCiB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6c3lu
Y2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBT
VkdHcmFkaWVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAg
aWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hyb25pemVDeCgpOwog
ICAgICAgICBzeW5jaHJvbml6ZUN5KCk7CiAgICAgICAgIHN5bmNocm9uaXplRngoKTsKICAgICAg
ICAgc3luY2hyb25pemVGeSgpOwogICAgICAgICBzeW5jaHJvbml6ZVIoKTsKKyAgICAgICAgU1ZH
R3JhZGllbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRy
TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmN4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmN4QXR0cikgewog
ICAgICAgICBzeW5jaHJvbml6ZUN4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6Y3lBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplQ3koKTsKLSAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZnhBdHRyKQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmeEF0dHIpIHsKICAgICAgICAgc3lu
Y2hyb25pemVGeCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmeUF0dHIp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmZ5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUZ5KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnJBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpyQXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojph
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBA
IC01Nyw0MyArNTgsODcgQEAgUGFzc1JlZlB0cjxTVkdSZWN0RWxlbWVudD4gU1ZHUmVjdEVsZW1l
bgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUmVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAorYm9vbCBTVkdSZWN0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChI
YXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CisgICAgaWYg
KHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1Rlc3RzOjphZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdMYW5n
U3BhY2U6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAg
ICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
c3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
Ojp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp3aWR0
aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6aGVpZ2h0
QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyeEF0dHIp
OworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cnlBdHRyKTsKKyAg
ICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOwor
fQorCiB2b2lkIFNWR1JlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0
aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChM
ZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBzZXRSeEJh
c2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAg
ICAgIGlmIChyeEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAocnhC
YXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0
IDxyeD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cnlBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeUF0dHIpIHsKICAgICAgICAgc2V0UnlCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgaWYg
KHJ5QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwLjApCisgICAgICAgIGlmIChyeUJhc2VWYWx1
ZSgpLnZhbHVlKHRoaXMpIDwgMCkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJlY3QgPHJ5PiBp
cyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp3aWR0aEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1
ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlm
ICh3aWR0aEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAod2lkdGhC
YXNlVmFsdWUoKS52YWx1ZSh0aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0
IDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRI
ZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkp
KTsKLSAgICAgICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAg
ICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2
ZSB2YWx1ZSBmb3IgcmVjdCA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlm
IChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAorICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQg
aW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgCiAgICAgYm9vbCBpc0xlbmd0aEF0dHJpYnV0
ZSA9IGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cgogICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgpAQCAtMTE3LDE1ICsxNjIsMTYg
QEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkgCi0gICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5
b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHUmVj
dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJv
cGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAg
ICAgICAgc3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwpAQCAtMTM1LDI1
ICsxODEsNTYgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eQogICAg
ICAgICBzeW5jaHJvbml6ZVJ5KCk7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRo
aXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5
bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5
bmNocm9uaXplWCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXpl
V2lkdGgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aGVpZ2h0QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZUhlaWdodCgpOwotICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpyeEF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJ4QXR0cikgewogICAgICAgICBzeW5jaHJv
bml6ZVJ4KCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJ5QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cnlB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplUnkoKTsKLSAgICBlbHNlIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICBlbHNlIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHVGVz
dHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwJiBTVkdSZWN0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNNSUxUaW1lQ29u
dGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKQEAgLTI5OSw5ICszMDAsNyBA
QCBzdGF0aWMgdm9pZCB1cGRhdGVDU1NGb3JBdHRyaWJ1dGUoU1ZHU1ZHCiB9CiAKIHZvaWQgU1ZH
U1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKLQoreyAKICAgICAvLyBGSVhNRTogVWdseSwgdWdseSBoYWNrIHRvIGFyb3VuZCB0aGF0
IHBhcnNlTWFwcGVkQXR0cmlidXRlIGlzIG5vdCBjYWxsZWQKICAgICAvLyB3aGVuIHN2Zy53aWR0
aC5iYXNlVmFsdWUgPSAxMDAgaXMgZXZhbHVhdGVkLgogICAgIC8vIFRodXMgdGhlIENTUyBsZW5n
dGggdmFsdWUgZm9yIHdpZHRoIGlzIG5vdCB1cGRhdGVkLCBhbmQgd2lkdGgoKSBjb21wdXRlTG9n
aWNhbFdpZHRoKCkKQEAgLTMyNCwzMyArMzIzLDMzIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZCgKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRp
b24oKTsKICAgICB9CiAKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJk
IGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmli
dXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFy
ZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAodXBkYXRlUmVsYXRpdmVMZW5n
dGhzCiAgICAgICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkK
ICAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHWm9vbUFuZFBhbjo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkKLSAgICAgICAgfHwgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6aXNLbm93bkF0
dHJpYnV0ZShhdHRyTmFtZSkpCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5
b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIoKSk7CisgICAgICAgIHx8
IFNWR1pvb21BbmRQYW46OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIGlm
IChyZW5kZXJlcigpKQorICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55
UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJvbml6ZVgoKTsKICAgICAgICAgc3luY2hyb25pemVZ
KCk7CiAgICAgICAgIHN5bmNocm9uaXplV2lkdGgoKTsKICAgICAgICAgc3luY2hyb25pemVIZWln
aHQoKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0g
ICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAgICAgICBzeW5jaHJvbml6ZVByZXNlcnZl
QXNwZWN0UmF0aW8oKTsKKyAgICAgICAgU1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXMoYXR0ck5hbWUpOwogICAgICAgICBTVkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVz
KHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM2NCwxMiAr
MzYzLDEyIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eSgKICAgICAg
ICAgc3luY2hyb25pemVIZWlnaHQoKTsKICAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKICAgICAgICAgc3luY2hyb25p
emVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnZpZXdCb3hBdHRyKQotICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIp
Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgIGVsc2UgaWYg
KFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIAorICAgICAgICBT
VkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CiAgICAgZWxz
ZSBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQogICAgICAgICBTVkdU
ZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICBlbHNlCisg
ICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwog
fQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHU1ZHRWxlbWVudDo6YXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVt
ZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJF
dmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKIApAQCAtNDksMzEgKzUwLDYxIEBAIFBh
c3NSZWZQdHI8U1ZHU2NyaXB0RWxlbWVudD4gU1ZHU2NyaXB0RWwKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGluc2VydGVkQnlQYXJz
ZXIsIGZhbHNlKSk7CiB9CiAKK2Jvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7
CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNWR1VS
SVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OnR5cGVBdHRyKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQo
SFRNTE5hbWVzOjpvbmVycm9yQXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdTY3JpcHRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp0eXBlQXR0cikgewogICAgICAgICBzZXRUeXBlKGF0dHItPnZhbHVlKCkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6Om9uZXJyb3JBdHRyKQotICAgICAgICBz
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBjcmVhdGVB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6b25lcnJvckF0dHIp
IHsKKyAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JF
dmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAo
IWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3Vh
cmQodGhpcyk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyIHx8IGF0
dHJOYW1lID09IEhUTUxOYW1lczo6b25lcnJvckF0dHIpCisgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAg
IGhhbmRsZVNvdXJjZUF0dHJpYnV0ZShocmVmKCkpOwotICAgIGVsc2UgaWYgKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgLy8gSGFuZGxlIGR5bmFtaWMg
dXBkYXRlcyBvZiB0aGUgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnIGF0dHJpYnV0ZS4gT25s
eSBwb3NzaWJsZSBjYXNlOiBjaGFuZ2luZyBmcm9tICd0cnVlJyB0byAnZmFsc2UnCiAgICAgICAg
IC8vIGNhdXNlcyBhbiBpbW1lZGlhdGUgZGlzcGF0Y2ggb2YgdGhlIFNWR0xvYWQgZXZlbnQuIElm
IHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2FzICdmYWxzZScgYmVmb3JlIGluc2VydGluZyB0aGUgc2Ny
aXB0IGVsZW1lbnQKICAgICAgICAgLy8gaW4gdGhlIGRvY3VtZW50LCB0aGUgU1ZHTG9hZCBldmVu
dCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQuCkBAIC04MywyMyArMTE0LDM3IEBAIHZvaWQg
U1ZHU2NyaXB0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmcKIAogICAgICAgICAgICAgc2VuZFNW
R0xvYWRFdmVudElmUG9zc2libGUoKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlm
IChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBzeW5jaHJvbml6ZUhyZWYoKTsKKyAgICAgICAg
U1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICAgICAgU1ZHRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9ICAgCisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwJiBTVkdTY3JpcHRFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1NjcmlwdEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2Vy
LCBib29sIGFscmVhZHlTdGFydGVkKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0dyYWRpZW50
U3RvcC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKIApAQCAtNDcsMzUgKzQ4LDcyIEBAIFBhc3NSZWZQdHI8U1ZHU3RvcEVs
ZW1lbnQ+IFNWR1N0b3BFbGVtZW4KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1N0b3BFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK2Jvb2wgU1ZHU3RvcEVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmli
dXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9mZnNldEF0dHIpOworICAgIHJl
dHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBT
VkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewor
ICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBT
VkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0
dHIpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAg
ICAgIGlmICh2YWx1ZS5lbmRzV2l0aCgiJSIpKQogICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZh
bHVlKHZhbHVlLmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0Zsb2F0KCkgLyAxMDAuMGYpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRPZmZzZXRCYXNlVmFsdWUodmFsdWUudG9GbG9h
dCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdTdG9wRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7
CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om9mZnNldEF0dHIpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0
b3BFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CisgICAgICAgIHN5bmNocm9u
aXplT2Zmc2V0KCk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1l
ID09IGFueVFOYW1lKCkgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpCisgICAg
aWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpIHsKICAg
ICAgICAgc3luY2hyb25pemVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYg
U1ZHU3RvcEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHU3RvcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNSArODYsMzMgQEAgdm9pZCBTVkdTdHlsZUVs
ZW1lbnQ6OnNldFRpdGxlKGNvbnN0IEF0bwogICAgIHNldEF0dHJpYnV0ZShTVkdOYW1lczo6dGl0
bGVBdHRyLCB0aXRsZSwgZWMpOwogfQogCitib29sIFNWR1N0eWxlRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVz
LCAoKSk7CisgICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IFNWR0xhbmdTcGFjZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRpdGxlQXR0cik7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0aXRsZUF0
dHIgJiYgbV9zaGVldCkKLSAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnRpdGxlQXR0cikgeworICAgICAgICBpZiAobV9zaGVldCkKKyAg
ICAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiB2b2lkIFNWR1N0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAorICAgIGJvb2wg
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2
aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NywxMCArMjk3LDkgQEAgYm9vbCBTVkdTdHlsZWRFbGVtZW50
OjptYXBUb0VudHJ5KGNvbnN0IAogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKICAgICAvLyBOT1RFOiBBbnkgc3ViY2xhc3Mgd2hpY2gg
b3ZlcnJpZGVzIHBhcnNlTWFwcGVkQXR0cmlidXRlIGZvciBhIHByb3BlcnR5IGhhbmRsZWQgYnkK
ICAgICAvLyBjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZSB3aWxsIGFsc28gaGF2ZSB0
byBvdmVycmlkZSBtYXBUb0VudHJ5IHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZVNWRyBtYXBwaW5n
Ci0gICAgaW50IHByb3BJZCA9IFNWR1N0eWxlZEVsZW1lbnQ6OmNzc1Byb3BlcnR5SWRGb3JTVkdB
dHRyaWJ1dGVOYW1lKGF0dHJOYW1lKTsKKyAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVkRWxlbWVu
dDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoYXR0ci0+bmFtZSgpKTsKICAgICBp
ZiAocHJvcElkID4gMCkgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBwcm9wSWQsIGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CkBAIC0zMTEsMTEg
KzMxMCwxMyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAg
Ly8gdGhlIGNsYXNzTmFtZSBoZXJlLiAgc3ZnQXR0cmlidXRlQ2hhbmdlZCBhY3R1YWxseSBjYXVz
ZXMgdGhlIHJlc3VsdGluZwogICAgIC8vIHN0eWxlIHVwZGF0ZXMgKGluc3RlYWQgb2YgU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpLiBXZSBkb24ndAogICAgIC8vIHRlbGwgU3R5
bGVkRWxlbWVudCBhYm91dCB0aGUgY2hhbmdlIHRvIGF2b2lkIHBhcnNpbmcgdGhlIGNsYXNzIGxp
c3QgdHdpY2UKLSAgICBpZiAoYXR0ck5hbWUubWF0Y2hlcyhIVE1MTmFtZXM6OmNsYXNzQXR0cikp
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0cikgewogICAgICAg
ICBzZXRDbGFzc05hbWVCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZQotICAgICAg
ICAvLyBpZCBpcyBoYW5kbGVkIGJ5IFN0eWxlZEVsZW1lbnQgd2hpY2ggU1ZHRWxlbWVudCBpbmhl
cml0cyBmcm9tCi0gICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gaWQgaXMgaGFuZGxlZCBieSBTdHls
ZWRFbGVtZW50IHdoaWNoIFNWR0VsZW1lbnQgaW5oZXJpdHMgZnJvbQorICAgIFNWR0VsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCiBib29sIFNWR1N0eWxlZEVsZW1lbnQ6
OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0zMjUs
MjggKzMyNiwzMSBAQCBib29sIFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoCiAK
IHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKKyAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVkRWxlbWVudDo6Y3NzUHJvcGVy
dHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoYXR0ck5hbWUpOworICAgIGlmIChwcm9wSWQgPiAwKSB7
CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxl
bWVudCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChhdHRyTmFtZS5t
YXRjaGVzKEhUTUxOYW1lczo6Y2xhc3NBdHRyKSkKKyAgICBpZiAoYXR0ck5hbWUgPT0gSFRNTE5h
bWVzOjpjbGFzc0F0dHIpIHsKICAgICAgICAgY2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKGNsYXNzTmFt
ZSgpKTsKLQotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVuZGVyZXIoKTsKKyAgICAgICAg
U1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KHRoaXMp
OworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKGF0
dHJOYW1lKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7CiAg
ICAgICAgIC8vIE5vdGlmeSByZXNvdXJjZXMgYWJvdXQgaWQgY2hhbmdlcywgdGhpcyBpcyBpbXBv
cnRhbnQgYXMgd2UgY2FjaGUgcmVzb3VyY2VzIGJ5IGlkIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9u
cwogICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigp
KQogICAgICAgICAgICAgb2JqZWN0LT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCktPmlk
Q2hhbmdlZCgpOworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0
YW5jZXNPZkVsZW1lbnQodGhpcyk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBJ
bnZhbGlkYXRlIGFsbCBTVkdFbGVtZW50SW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB1cwotICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVudCh0aGlz
KTsKIH0KIAogdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwg
YXR0ck5hbWUubWF0Y2hlcyhIVE1MTmFtZXM6OmNsYXNzQXR0cikpCisgICAgaWYgKGF0dHJOYW1l
ID09IGFueVFOYW1lKCkgfHwgYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIpCiAgICAg
ICAgIHN5bmNocm9uaXplQ2xhc3NOYW1lKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24g
ODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjksNDQgKzcwLDc0IEBAIEFmZmlu
ZVRyYW5zZm9ybSogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUUKICAgICByZXR1cm4gbV9zdXBwbGVt
ZW50YWxUcmFuc2Zvcm0uZ2V0KCk7CiB9CiAKK2Jvb2wgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3Vw
cG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1w
dHkoKSkKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRyYW5zZm9y
bUF0dHIpOworICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJOYW1l
KTsKK30KKwogdm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChTVkdUcmFuc2Zvcm1hYmxlOjpp
c0tub3duQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7CiAgICAg
ICAgIFNWR1RyYW5zZm9ybUxpc3QgbmV3TGlzdDsKICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1h
YmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShuZXdMaXN0LCBhdHRyLT52YWx1ZSgpKSkKICAg
ICAgICAgICAgIG5ld0xpc3QuY2xlYXIoKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRUcmFuc2Zv
cm1MaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRUcmFuc2Zvcm1CYXNl
VmFsdWUobmV3TGlzdCk7Ci0gICAgfSBlbHNlIAotICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOwotCi0gICAgaWYgKCFTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1
YXJkKHRoaXMpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpOwogICAg
IGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBvYmplY3QtPnNldE5lZWRzVHJh
bnNmb3JtVXBkYXRlKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQ
YXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihvYmplY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dHJhbnNmb3JtQXR0cikgeworICAgICAgICBvYmplY3QtPnNldE5lZWRzVHJhbnNm
b3JtVXBkYXRlKCk7CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5k
UGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ob2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7Cisg
ICAgICAgIHN5bmNocm9uaXplVHJhbnNmb3JtKCk7CisgICAgICAgIFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkgfHwgU1ZHVHJhbnNmb3Jt
YWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAgICAgICAg
c3luY2hyb25pemVUcmFuc2Zvcm0oKTsKLX0KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotYm9v
bCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIFNWR0VsZW1lbnQqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpuZWFyZXN0Vmll
d3BvcnRFbGVtZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdl
dEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogCi0g
ICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIC8v
ICJiYXNlIGNsYXNzIiBtZXRob2RzIGZvciBhbGwgdGhlIGVsZW1lbnRzIHdoaWNoIHJlbmRlciBh
cyBwYXRocwogICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdCB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJikgY29uc3Q7CkBAIC01Nyw2ICs1NSw3IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1N5bWJvbEVsZW1lbnQuaCIKIAorI2lu
Y2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAgLTQ0LDggKzQ1LDI0IEBAIFBhc3NSZWZQdHI8
U1ZHU3ltYm9sRWxlbWVudD4gU1ZHU3ltYm9sRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R1N5bWJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAorYm9vbCBTVkdTeW1ib2xF
bGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1
cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgU1ZHTGFuZ1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBT
VkdGaXRUb1ZpZXdCb3g6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRl
cyk7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGF0dHJO
YW1lKTsKK30KKwogdm9pZCBTVkdTeW1ib2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5u
YW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCkBA
IC01Myw0MCArNzAsNDggQEAgdm9pZCBTVkdTeW1ib2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YgogICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGRvY3VtZW50
KCksIGF0dHIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBTVkdTeW1ib2xFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOworICAgIGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJ
bnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAorICAgIC8vIEV2ZXJ5
IG90aGVyIHByb3BlcnR5IGNoYW5nZSBpcyBpZ25vcmVkLgogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dmlld0JveEF0dHIpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9y
bWF0aW9uKCk7CiB9CiAKIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdTdHlsZWRFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBh
bnlRTmFtZSgpKSB7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwot
ICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplVmlld0JveCgpOwotICAg
ICAgICBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgU1ZHRml0VG9W
aWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAgICBTVkdTdHls
ZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RS
YXRpb0F0dHIpCi0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikKLSAgICAgICAgc3lu
Y2hyb25pemVWaWV3Qm94KCk7Ci0gICAgZWxzZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAg
ZWxzZSBpZiAoU1ZHRml0VG9WaWV3Qm94Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewot
ICAgICAgICBzeW5jaHJvbml6ZVZpZXdCb3goKTsKLSAgICAgICAgc3luY2hyb25pemVQcmVzZXJ2
ZUFzcGVjdFJhdGlvKCk7Ci0gICAgfSAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAg
IFNWR0ZpdFRvVmlld0JveDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBBdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHU3ltYm9sRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N5bWJvbEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCShy
ZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBT
VkdTeW1ib2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAg
Ym9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCkBAIC01NiwzMyArNTcsNjggQEAgdm9pZCBT
VkdUUmVmRWxlbWVudDo6dXBkYXRlUmVmZXJlbmNlZFRleAogICAgIHNldFRleHRDb250ZW50KHRl
eHRDb250ZW50LCBpZ25vcmUpOwogfQogCitib29sIFNWR1RSZWZFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMs
ICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgIFNW
R1VSSVJlZmVyZW5jZTo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVz
KTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9
CisKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsK
KyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNl
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewogICAgICAgICB1cGRhdGVSZWZlcmVuY2Vk
VGV4dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRl
ZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlv
bkd1YXJkKHRoaXMpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAg
ICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52
YWxpZGF0aW9uKHJlbmRlcmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYg
KGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKKyAgICAgICAgc3luY2hyb25pemVIcmVmKCk7Cisg
ICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0
dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSB8fCBTVkdVUklSZWZlcmVuY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdUUmVmRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHJldmlzaW9u
IDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdUUmVmRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBw
b3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGVzdHMuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsMTMgQEAgYm9vbCBTVkdUZXN0
czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKGNvbgogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lk
IFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4m
IHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnJlcXVpcmVkRmVhdHVyZXNBdHRyKTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6cmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CisgICAgc3VwcG9ydGVkQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnN5c3RlbUxhbmd1YWdlQXR0cik7Cit9CisKIHZvaWQgU1ZHVGVz
dHM6OnN5bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFO
YW1lKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3
IEBAIHB1YmxpYzoKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwog
ICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKKyAgICB2
b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogICAg
IGJvb2wgaGFuZGxlQXR0cmlidXRlQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnQqLCBjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUg
IlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHVGV4dFF1ZXJ5LmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTE3OSw2MiArMTgwLDEw
OCBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAgICAgc2VsZWN0
aW9uLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kKSk7CiB9CiAKK2Jv
b2wgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9y
dGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRl
ZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIFNWR0xhbmdTcGFjZTo6
YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
Omxlbmd0aEFkanVzdEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6dGV4dExlbmd0aEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgaWYgKCFpc1N1
cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikgewog
ICAgICAgICBTVkdMZW5ndGhBZGp1c3RUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxTVkdMZW5ndGhBZGp1c3RUeXBlPjo6ZnJvbVN0cmluZyhhdHRyLT52YWx1ZSgpKTsKICAg
ICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0TGVuZ3RoQWRqdXN0
QmFzZVZhbHVlKHByb3BlcnR5VmFsdWUpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpIHsKICAgICAg
ICAgbV90ZXh0TGVuZ3RoLnZhbHVlID0gU1ZHTGVuZ3RoKExlbmd0aE1vZGVPdGhlciwgYXR0ci0+
dmFsdWUoKSk7CiAgICAgICAgIGlmIChtX3RleHRMZW5ndGgudmFsdWUudmFsdWUodGhpcykgPCAw
KQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdGV4dCBhdHRyaWJ1dGUgPHRleHRMZW5ndGg+IGlz
IG5vdCBhbGxvd2VkIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYg
KFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKLSAgICAgICAgICAg
IGlmIChhdHRyLT5uYW1lKCkubWF0Y2hlcyhYTUxOYW1lczo6c3BhY2VBdHRyKSkgewotICAgICAg
ICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBwcmVzZXJ2
ZVN0cmluZywgKCJwcmVzZXJ2ZSIpKTsKLQotICAgICAgICAgICAgICAgIGlmIChhdHRyLT52YWx1
ZSgpID09IHByZXNlcnZlU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlUHJlKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1By
b3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVOb3dyYXApOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICBTVkdTdHlsZWRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoU1ZHTGFuZ1NwYWNl
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgeworICAgICAgICBpZiAoYXR0ci0+bmFtZSgp
Lm1hdGNoZXMoWE1MTmFtZXM6OnNwYWNlQXR0cikpIHsKKyAgICAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBwcmVzZXJ2ZVN0cmluZywgKCJwcmVzZXJ2ZSIp
KTsKKworICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gcHJlc2VydmVTdHJpbmcpCisg
ICAgICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNl
LCBDU1NWYWx1ZVByZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1ZU5vd3JhcCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5h
bWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgc3luY2hy
b25pemVMZW5ndGhBZGp1c3QoKTsKICAgICAgICAgc3luY2hyb25pemVUZXh0TGVuZ3RoKCk7CiAg
ICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogICAgICAgICBT
VkdUZXN0czo6c3luY2hyb25pemVQcm9wZXJ0aWVzKHRoaXMsIGF0dHJOYW1lKTsKKyAgICAgICAg
U1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1l
KSkgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJO
YW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omxl
bmd0aEFkanVzdEF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVMZW5ndGhBZGp1c3QoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRMZW5n
dGhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplVGV4dExlbmd0aCgpOwotICAgIGVsc2UgaWYg
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9u
aXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3RzOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgU1ZH
VGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsK
KyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFs
aWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOwogCiAgICAgaWYgKFNWR1Rlc3Rz
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47
CkBAIC0yNDIsMTIgKzI4OSw3IEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRy
aWJ1dGUKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyKQogICAg
ICAgICBtX3NwZWNpZmllZFRleHRMZW5ndGggPSBtX3RleHRMZW5ndGgudmFsdWU7CiAKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRl
eHRMZW5ndGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpsZW5ndGhBZGp1
c3RBdHRyKQorICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KSkKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNv
dXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2
ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJTVkdUU3BhbkVsZW1lbnQuaCIKQEAgLTQ4LDE3ICs0OSwzMiBAQCBQYXNzUmVmUHRyPFNW
R1RleHRFbGVtZW50PiBTVkdUZXh0RWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdU
ZXh0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitib29sIFNWR1RleHRFbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkp
CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRy
KTsKKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9
CisKIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKIHsKLSAgICBpZiAoU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
LT5uYW1lKCkpKSB7CisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5uYW1lKCkp
KSB7CisgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikgewogICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0
IG5ld0xpc3Q7CiAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1B
dHRyaWJ1dGUobmV3TGlzdCwgYXR0ci0+dmFsdWUoKSkpCiAgICAgICAgICAgICBuZXdMaXN0LmNs
ZWFyKCk7CiAKICAgICAgICAgZGV0YWNoQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0V3JhcHBlcnMobmV3
TGlzdC5zaXplKCkpOwogICAgICAgICBzZXRUcmFuc2Zvcm1CYXNlVmFsdWUobmV3TGlzdCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKIFNWR0VsZW1lbnQqIFNWR1RleHRFbGVtZW50OjpuZWFyZXN0Vmll
d3BvcnRFbGVtZW50KCkgY29uc3QKQEAgLTEyNCwyNCArMTQwLDQ1IEBAIGJvb2wgU1ZHVGV4dEVs
ZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmUKIAogdm9pZCBTVkdUZXh0RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBTVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW52YWxpZGF0aW9u
R3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CiAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24o
cmVuZGVyZXIpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgaWYgKGF0dHJOYW1lID09
IGFueVFOYW1lKCkpIHsKKyAgICAgICAgc3luY2hyb25pemVUcmFuc2Zvcm0oKTsKKyAgICAgICAg
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUo
KSB8fCBTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHJhbnNmb3Jt
QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVRyYW5zZm9ybSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBTVkdUZXh0RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdUZXh0RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKIAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBz
dXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0
UGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0
UGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5j
ZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUw
LDYxICs1MSwxMDQgQEAgUGFzc1JlZlB0cjxTVkdUZXh0UGF0aEVsZW1lbnQ+IFNWR1RleHRQYQog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVGV4dFBhdGhFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKK2Jvb2wgU1ZHVGV4dFBhdGhFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAg
ICBpZiAoc3VwcG9ydGVkQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHVVJJUmVm
ZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAg
ICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKTsK
KyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1ldGhvZEF0dHIpOwor
ICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3BhY2luZ0F0dHIpOwor
ICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmlidXRlcy5jb250YWlucyhhdHRyTmFtZSk7
Cit9CisKIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKQorICAg
IGlmICghaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpKSkgeworICAgICAgICBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZh
bHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRy
KSB7CiAgICAgICAgIHNldFN0YXJ0T2Zmc2V0QmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2Rl
T3RoZXIsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpt
ZXRob2RBdHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjptZXRob2RBdHRyKSB7CiAgICAgICAgIFNWR1RleHRQYXRoTWV0aG9k
VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVGV4dFBhdGhNZXRob2RU
eXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkK
ICAgICAgICAgICAgIHNldE1ldGhvZEJhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BhY2luZ0F0dHIpIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwYWNp
bmdBdHRyKSB7CiAgICAgICAgIFNWR1RleHRQYXRoU3BhY2luZ1R5cGUgcHJvcGVydHlWYWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1RleHRQYXRoU3BhY2luZ1R5cGU+Ojpmcm9tU3RyaW5nKHZh
bHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQogICAgICAgICAgICAgc2V0U3Bh
Y2luZ0Jhc2VWYWx1ZShwcm9wZXJ0eVZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
U1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChTVkdVUklSZWZl
cmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAg
ICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFy
ZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3RhcnRPZmZzZXRBdHRyKQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1h
dGlvbigpOwogCi0gICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0YXJ0T2Zmc2V0QXR0cgotICAgICAgICB8fCBTVkdV
UklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQotICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJl
bmRlcmVyKCkpOworICAgIGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCisg
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJ
bnZhbGlkYXRpb24ob2JqZWN0KTsKIH0KIAogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsKLQogICAg
IGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RhcnRP
ZmZzZXQoKTsKICAgICAgICAgc3luY2hyb25pemVNZXRob2QoKTsKICAgICAgICAgc3luY2hyb25p
emVTcGFjaW5nKCk7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGFydE9mZnNl
dEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAg
ICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3RhcnRPZmZzZXRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplU3RhcnRPZmZzZXQoKTsKLSAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWV0aG9kQXR0cikKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1ldGhvZEF0
dHIpIHsKICAgICAgICAgc3luY2hyb25pemVNZXRob2QoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6c3BhY2luZ0F0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGFjaW5nQXR0cikgewogICAgICAgICBz
eW5jaHJvbml6ZVNwYWNpbmcoKTsKLSAgICBlbHNlIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25v
d25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAg
ICAgIHN5bmNocm9uaXplSHJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdU
ZXh0UGF0aEVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKIAorICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCkBAIC00NCwzNSArNDUsNjcgQEAgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6U1ZHVGV4dFBvc2l0aQogewogfQogCitib29sIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZp
ZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlmIChzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6eEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
eUF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZHhBdHRy
KTsKKyAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyb3RhdGVBdHRyKTsKKyAg
ICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpOwor
fQorCiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHIt
Pm5hbWUoKSkpIHsKKyAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIFNWR0xlbmd0aExpc3QgbmV3TGlz
dDsKICAgICAgICAgbmV3TGlzdC5wYXJzZShhdHRyLT52YWx1ZSgpLCBMZW5ndGhNb2RlV2lkdGgp
OwogICAgICAgICBkZXRhY2hBbmltYXRlZFhMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwog
ICAgICAgICBzZXRYQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp5QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgU1ZHTGVuZ3Ro
TGlzdCBuZXdMaXN0OwogICAgICAgICBuZXdMaXN0LnBhcnNlKGF0dHItPnZhbHVlKCksIExlbmd0
aE1vZGVIZWlnaHQpOwogICAgICAgICBkZXRhY2hBbmltYXRlZFlMaXN0V3JhcHBlcnMobmV3TGlz
dC5zaXplKCkpOwogICAgICAgICBzZXRZQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR4QXR0cikgewogICAg
ICAgICBTVkdMZW5ndGhMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+
dmFsdWUoKSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICAgICAgZGV0YWNoQW5pbWF0ZWREeExpc3RX
cmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAgICAgICAgIHNldER4QmFzZVZhbHVlKG5ld0xpc3Qp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmR5QXR0cikgewogICAgICAgICBTVkdMZW5ndGhMaXN0IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xp
c3QucGFyc2UoYXR0ci0+dmFsdWUoKSwgTGVuZ3RoTW9kZUhlaWdodCk7CiAgICAgICAgIGRldGFj
aEFuaW1hdGVkRHlMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogICAgICAgICBzZXREeUJh
c2VWYWx1ZShuZXdMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6cm90YXRlQXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6cm90YXRlQXR0cikgewogICAgICAgICBTVkdOdW1iZXJMaXN0
IG5ld0xpc3Q7CiAgICAgICAgIG5ld0xpc3QucGFyc2UoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAg
IGRldGFjaEFuaW1hdGVkUm90YXRlTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKICAgICAg
ICAgc2V0Um90YXRlQmFzZVZhbHVlKG5ld0xpc3QpOwotICAgIH0gZWxzZQotICAgICAgICBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCB1cGRhdGVQb3NpdGlvbmluZ1ZhbHVlc0luUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKQEAgLTEwMSw3ICsxMzQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0
ZVBvc2l0aW9uaW5nVmFsdQogCiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBp
ZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBp
bnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKIAogICAgIGJvb2wgdXBkYXRlUmVsYXRpdmVMZW5ndGhz
ID0gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKQEAgLTEyMCw2ICsxNTgsOCBAQCB2
b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpCiAgICAgICAgIFJlbmRlclNW
R1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVu
ZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hh
bmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAtMTM1LDI3ICsxNzUsNDcgQEAgdm9pZCBTVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50OjpjaGlsZHJlbgogCiB2b2lkIFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGF0
dHJOYW1lKTsKLQogICAgIGlmIChhdHRyTmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAgICAgIHN5
bmNocm9uaXplWCgpOwogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKICAgICAgICAgc3luY2hyb25p
emVEeCgpOwogICAgICAgICBzeW5jaHJvbml6ZUR5KCk7CiAgICAgICAgIHN5bmNocm9uaXplUm90
YXRlKCk7CisgICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0
eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzU3VwcG9y
dGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplWCgpOwotICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVZKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhB
dHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplRHgoKTsKLSAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKICAgICAgICAgc3luY2hyb25pemVEeSgpOwot
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyb3RhdGVBdHRyKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyb3RhdGVBdHRy
KSB7CiAgICAgICAgIHN5bmNocm9uaXplUm90YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50OjpmaWxsUGFzc2VkQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoQXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAmIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCShyZXZpc2lv
biA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKKyAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9
IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGlu
dCBjaGlsZENvdW50RGVsdGEgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDExICsyMDYsNiBAQCBi
b29sIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0CiAgICAgcmV0dXJuICFkZWxp
bVBhcnNlZDsKIH0KIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIHJldHVybiBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dHJhbnNmb3JtQXR0cjsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gODY4MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNv
bnN0IHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQogICAgIHZpcnR1YWwgQWZm
aW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7Ci0KLSAgICBi
b29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5j
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5j
cHAJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDE1IEBAIFN0cmluZyBTVkdVUklSZWZl
cmVuY2U6OmdldFRhcmdldChjb25zdCAKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK3ZvaWQg
U1ZHVVJJUmVmZXJlbmNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIHhsaW5rUHJlZml4LCAoInhsaW5rIikpOworICAgIFF1YWxpZmllZE5hbWUg
aHJlZldpdGhQcmVmaXggPSBYTGlua05hbWVzOjpocmVmQXR0cjsKKyAgICBocmVmV2l0aFByZWZp
eC5zZXRQcmVmaXgoeGxpbmtQcmVmaXgpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKGhy
ZWZXaXRoUHJlZml4KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChYTGlua05hbWVzOjpo
cmVmQXR0cik7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwog
ICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9p
ZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKIAogICAg
IHN0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdXJsKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gODY4MjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDMxICs5
OCw2MyBAQCBTVkdFbGVtZW50SW5zdGFuY2UqIFNWR1VzZUVsZW1lbnQ6OmFuaW1hCiAgICAgcmV0
dXJuIDA7CiB9CiAgCitib29sIFNWR1VzZUVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOworICAgIGlm
IChzdXBwb3J0ZWRBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBTVkdUZXN0czo6YWRk
U3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgU1ZHTGFu
Z1NwYWNlOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAg
ICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVz
KHN1cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBTVkdVUklSZWZlcmVuY2U6OmFkZFN1cHBv
cnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7CisgICAgICAgIHN1cHBvcnRlZEF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjp5QXR0cik7CisgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjp3aWR0aEF0dHIpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6aGVpZ2h0QXR0cik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1
dGVzLmNvbnRhaW5zKGF0dHJOYW1lKTsKK30KKwogdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eEF0dHIpCisgICAgaWYgKCFpc1N1cHBvcnRlZEF0dHJpYnV0ZShhdHRyLT5u
YW1lKCkpKSB7CisgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKSB7CiAgICAgICAgIHNldFhCYXNlVmFsdWUo
U1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewogICAgICAgICBz
ZXRZQmFzZVZhbHVlKFNWR0xlbmd0aChMZW5ndGhNb2RlSGVpZ2h0LCBhdHRyLT52YWx1ZSgpKSk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3Ro
TW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7Ci0gICAgICAgIGlmICh3aWR0aEJhc2VWYWx1ZSgp
LnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAod2lkdGhCYXNlVmFsdWUoKS52YWx1ZSh0
aGlzKSA8IDApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciB1c2UgYXR0cmlidXRlIDx3aWR0aD4g
aXMgbm90IGFsbG93ZWQiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aGVpZ2h0QXR0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNl
VmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVlKCkpKTsKLSAgICAg
ICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLnZhbHVlKHRoaXMpIDwgMC4wKQorICAgICAgICBpZiAo
aGVpZ2h0QmFzZVZhbHVlKCkudmFsdWUodGhpcykgPCAwKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBm
b3IgdXNlIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc1dlbGxGb3JtZWREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCkBA
IC0xNDgsNyArMTgwLDEyIEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCgKIAogdm9pZCBTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0
cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTVkdFbGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlv
bkd1YXJkKHRoaXMpOwogCiAgICAgYm9vbCBpc1hZQXR0cmlidXRlID0gYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnhBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cjsKICAgICBib29sIGlz
V2lkdGhIZWlnaHRBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyOwpAQCAtMTk4LDE1ICsyMzUsMTYgQEAg
dm9pZCBTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkKLSAgICAgICAgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpCisgICAgaWYgKFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyTmFtZSkgfHwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKICAgICAgICAgaW52YWxpZGF0ZVNoYWRvd1RyZWUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFNW
R1VzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOwotCiAgICAgaWYgKGF0dHJOYW1lID09IGFueVFOYW1lKCkpIHsK
ICAgICAgICAgc3luY2hyb25pemVYKCk7CiAgICAgICAgIHN5bmNocm9uaXplWSgpOwpAQCAtMjE1
LDIzICsyNTMsNTEgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KAog
ICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKICAgICAgICAg
c3luY2hyb25pemVIcmVmKCk7CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRp
ZXModGhpcywgYXR0ck5hbWUpOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnhBdHRyKQorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKICAgICAg
ICAgc3luY2hyb25pemVYKCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikgewogICAgICAgICBzeW5jaHJvbml6ZVkoKTsKLSAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc3luY2hy
b25pemVXaWR0aCgpOwotICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRB
dHRyKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHN5bmNocm9uaXplSGVpZ2h0KCk7Ci0gICAgZWxz
ZSBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7Ci0gICAgZWxzZSBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5h
bWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplSHJlZigpOwotICAgIGVsc2UgaWYgKFNWR1Rlc3Rz
Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChTVkdUZXN0czo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAg
U1ZHVGVzdHM6OnN5bmNocm9uaXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogQXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAmIFNWR1VzZUVsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkocmV2aXNpb24gODY4
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9t
RG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKIAor
ICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NjgyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDM3ICs0OCw2OCBAQCBQYXNzUmVmUHRyPFNWR1ZpZXdFbGVtZW50PiBTVkdWaWV3RWxl
bWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdWaWV3RWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCi12b2lkIFNWR1ZpZXdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCitib29sIFNWR1ZpZXdFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikKLSAgICAgICAgdmlld1RhcmdldCgpLnJlc2V0
KGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikKLSAgICAgICAgICAgfHwg
U1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKQot
ICAgICAgICAgICB8fCBTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4sIHN1cHBvcnRlZEF0dHJpYnV0ZXMsICgpKTsKKyAgICBpZiAoc3VwcG9ydGVk
QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgU1ZHRml0VG9WaWV3Qm94OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1cHBvcnRlZEF0dHJp
YnV0ZXMpOworICAgICAgICBTVkdab29tQW5kUGFuOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKHN1
cHBvcnRlZEF0dHJpYnV0ZXMpOworICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6dmlld1RhcmdldEF0dHIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkQXR0cmli
dXRlcy5jb250YWlucyhhdHRyTmFtZSk7Cit9CiAKK3ZvaWQgU1ZHVmlld0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoIWlzU3VwcG9ydGVk
QXR0cmlidXRlKGF0dHItPm5hbWUoKSkpIHsKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikgeworICAgICAgICB2
aWV3VGFyZ2V0KCkucmVzZXQoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShkb2N1bWVudCgpLCBhdHRyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgU1ZHVmll
d0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShhdHRyTmFt
ZSk7Ci0KICAgICBpZiAoYXR0ck5hbWUgPT0gYW55UU5hbWUoKSkgewogICAgICAgICBzeW5jaHJv
bml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKLSAgICAgICAgc3luY2hyb25pemVWaWV3
Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgICAg
ICBTVkdGaXRUb1ZpZXdCb3g6OnN5bmNocm9uaXplUHJvcGVydGllcyhhdHRyTmFtZSk7CisgICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgIGlmICghaXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnN5bmNocm9uaXpl
UHJvcGVydHkoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpKSB7CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
OwotICAgIGVsc2UgaWYgKFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkpIHsKLSAgICAgICAgc3luY2hyb25pemVWaWV3Qm94KCk7Ci0gICAgICAgIHN5bmNocm9uaXpl
UHJlc2VydmVBc3BlY3RSYXRpbygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KFNWR0ZpdFRvVmlld0JveDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICAgICAg
U1ZHRml0VG9WaWV3Qm94OjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBTVkdWaWV3RWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJKHJldmlzaW9u
IDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdWaWV3RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorICAgIC8vIEZJWE1FOiBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCisgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3Bw
CShyZXZpc2lvbiA4NjgyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgYm9vbCBTVkdab29tQW5kUGFuOjpp
c0tub3duQXR0cmlidXRlKGNvbgogICAgIHJldHVybiBhdHRyTmFtZSA9PSBTVkdOYW1lczo6em9v
bUFuZFBhbkF0dHI7CiB9CiAKK3ZvaWQgU1ZHWm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQoreworICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp6b29tQW5kUGFuQXR0cik7Cit9CisK
IHN0YXRpYyBjb25zdCBVQ2hhciBkaXNhYmxlW10gPSAgeydkJywgJ2knLCAncycsICdhJywgJ2In
LCAnbCcsICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlmeVtdID0gIHsnbScsICdhJywg
J2cnLCAnbicsICdpJywgJ2YnLCAneSd9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Wm9vbUFuZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5k
UGFuLmgJKHJldmlzaW9uIDg2ODI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQ
YW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTMgKzIyLDEzIEBACiAjZGVmaW5lIFNWR1pvb21B
bmRQYW5faAogCiAjaWYgRU5BQkxFKFNWRykKLQorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdHRyaWJ1dGU7Ci1jbGFzcyBRdWFs
aWZpZWROYW1lOwogCiBjbGFzcyBTVkdab29tQW5kUGFuIHsKIHB1YmxpYzoKQEAgLTQ2LDYgKzQ2
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAg
IHZvaWQgYWRkU3VwcG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CiAK
ICAgICBib29sIHBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hh
ciogZW5kKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>