<?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>137007</bug_id>
          
          <creation_ts>2014-09-22 10:53:07 -0700</creation_ts>
          <short_desc>Use downcast&lt;HTML*Element&gt;() instead of toHTML*Element()</short_desc>
          <delta_ts>2014-09-24 10:00:45 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136839</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1036560</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-22 10:53:07 -0700</bug_when>
    <thetext>Use downcast&lt;HTML*Element&gt;() instead of toHTML*Element() and get rid of the transition macros for HTML Elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036665</commentid>
    <comment_count>1</comment_count>
      <attachid>238517</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-22 23:56:11 -0700</bug_when>
    <thetext>Created attachment 238517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036667</commentid>
    <comment_count>2</comment_count>
      <attachid>238519</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 00:19:02 -0700</bug_when>
    <thetext>Created attachment 238519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036734</commentid>
    <comment_count>3</comment_count>
      <attachid>238541</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 08:54:32 -0700</bug_when>
    <thetext>Created attachment 238541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036736</commentid>
    <comment_count>4</comment_count>
      <attachid>238543</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 08:56:22 -0700</bug_when>
    <thetext>Created attachment 238543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036811</commentid>
    <comment_count>5</comment_count>
      <attachid>238543</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-23 13:14:41 -0700</bug_when>
    <thetext>Comment on attachment 238543
Patch

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

Some comments are completely unrelated to the change, please don&apos;t fix them in the same patch.

&gt; Source/WebCore/ChangeLog:405
&gt; +        Generate helpers to SVGAElement.

Please describe &quot;why?&quot; in addition to &quot;what?&quot;.

&gt; Source/WebCore/accessibility/AccessibilityMenuListOption.cpp:86
&gt; -    toHTMLOptionElement(m_element.get())-&gt;setSelected(b);
&gt; +    downcast&lt;HTMLOptionElement&gt;(*m_element).setSelected(b);

b -&gt;isSelected/selected?

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1754
&gt;      if (isNativeTextControl() &amp;&amp; (isHTMLTextAreaElement(node) || isHTMLInputElement(node)))

It is weird this checks for (isHTMLTextAreaElement(node) || isHTMLInputElement(node)) instead of isHTMLTextFormControlElement()...

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:969
&gt;          unsigned len = list-&gt;length();
&gt;          for (unsigned i = 0; i &lt; len; ++i) {

len -&gt; length.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:970
&gt;              if (isHTMLInputElement(list-&gt;item(i))) {

list-&gt;item(i) should go in a temporary, NodeList isn&apos;t exactly cheap.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1690
&gt;          // FIXME: This is not safe!  Other elements could have a TextField renderer.

I suggest adding a RELEASE_ASSERT() or a if() here for the type of element.

At a minimum, an ASSERT().

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1693
&gt;          // FIXME: This is not safe!  Other elements could have a TextArea renderer.

ditto.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2523
&gt; -        const AtomicString&amp; type = input-&gt;getAttribute(typeAttr);
&gt; +        const AtomicString&amp; type = input.getAttribute(typeAttr);
&gt;          if (equalIgnoringCase(type, &quot;color&quot;))

This is really strange. I wonder why not use isColorControl() directly.

&gt; Source/WebCore/accessibility/AccessibilityTable.cpp:613
&gt; +        HTMLTableCaptionElement* caption = downcast&lt;HTMLTableElement&gt;(*tableElement).caption();
&gt;          if (caption)
&gt;              title = caption-&gt;innerText();

if (HTMLTableCaptionElement* caption = downcast&lt;HTMLTableElement&gt;(*tableElement).caption())
    title = caption-&gt;innerText();

&gt; Source/WebCore/accessibility/atk/AXObjectCacheAtk.cpp:-145
&gt; -    if (!select)
&gt; -        return;

Good catch.

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp:182
&gt; -        String summary = toHTMLTableElement(node)-&gt;summary();
&gt; +        String summary = downcast&lt;HTMLTableElement&gt;(*node).summary();

String -&gt; const AtomicString&amp; to avoid the implicit conversion and ref()+deref().

&gt; Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm:-72
&gt; -    if (!inputElement)
&gt; -        return false;

Another good catch.

&gt; Source/WebCore/dom/DataTransfer.cpp:260
&gt;      CachedImage* image;
&gt;      if (element &amp;&amp; isHTMLImageElement(element) &amp;&amp; !element-&gt;inDocument())
&gt; -        image = toHTMLImageElement(element)-&gt;cachedImage();
&gt; +        image = downcast&lt;HTMLImageElement&gt;(*element).cachedImage();
&gt;      else
&gt; -        image = 0;
&gt; +        image = nullptr;

For simplicity, this could be:
    CachedImage* image = nullptr;
    if (element &amp;&amp; isHTMLImageElement(element) &amp;&amp; !element-&gt;inDocument())
        image = downcast&lt;HTMLImageElement&gt;(*element).cachedImage();

&gt; Source/WebCore/editing/Editor.cpp:335
&gt;      if (!document.isImageDocument())
&gt; -        return 0;
&gt; +        return nullptr;
&gt;      
&gt;      HTMLElement* body = document.body();
&gt;      if (!body)
&gt; -        return 0;
&gt; +        return nullptr;
&gt;      
&gt;      Node* node = body-&gt;firstChild();
&gt;      if (!node)
&gt; -        return 0;
&gt; +        return nullptr;
&gt;      if (!isHTMLImageElement(node))
&gt; -        return 0;
&gt; -    return toHTMLImageElement(node);
&gt; +        return nullptr;
&gt; +    return downcast&lt;HTMLImageElement&gt;(node);

This whole thing should be 2 lines with ImageDocument::imageElement().

+ a test obviously :)

&gt; Source/WebCore/html/ColorInputType.cpp:228
&gt;      HTMLDataListElement* dataList = element().dataList();

I did not know we had datalist. We should totally finish the implementation and enable the flag.

&gt; Source/WebCore/html/ColorInputType.cpp:231
&gt; -        for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement(options-&gt;item(i)); i++) {
&gt; +        for (unsigned i = 0; HTMLOptionElement* option = downcast&lt;HTMLOptionElement&gt;(options-&gt;item(i)); i++) {

i++ -&gt; ++i

Gosh, we should have an iterator for HTMLCollection, this for() loop is disgusting.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:103
&gt; -        HTMLFormElement* newForm = 0;
&gt; +        HTMLFormElement* newForm = nullptr;
&gt;          Element* newFormCandidate = element-&gt;treeScope().getElementById(formId);
&gt;          if (newFormCandidate &amp;&amp; isHTMLFormElement(newFormCandidate))
&gt; -            newForm = toHTMLFormElement(newFormCandidate);
&gt; +            newForm = downcast&lt;HTMLFormElement&gt;(newFormCandidate);
&gt;          return newForm;

I wonder if there is a test for &lt;label&gt; with a for=&quot;id&quot; where there are multiple #id... if not we should have one.

&gt; Source/WebCore/html/HTMLElement.cpp:430
&gt;          if (hasTagName(templateTag))

Should this be is&lt;HTMLTemplateElement&gt;(templateTag)?

&gt; Source/WebCore/html/HTMLElement.cpp:920
&gt;  TextDirection HTMLElement::directionality(Node** strongDirectionalityTextNode) const

Node**...you don&apos;t see those every day

&gt; Source/WebCore/html/HTMLInputElement.cpp:1856
&gt; -        for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement(options-&gt;item(i)); ++i) {
&gt; +        for (unsigned i = 0; HTMLOptionElement* option = downcast&lt;HTMLOptionElement&gt;(options-&gt;item(i)); ++i) {

arg :(

&gt; Source/WebCore/html/MediaDocument.cpp:103
&gt;      m_mediaElement-&gt;setAttribute(controlsAttr, &quot;&quot;);
&gt;      m_mediaElement-&gt;setAttribute(autoplayAttr, &quot;&quot;);

&quot;&quot; -&gt; emptyAtom

&gt; Source/WebCore/rendering/HitTestResult.cpp:347
&gt; -    if (element-&gt;serviceType() == &quot;application/pdf&quot; || (element-&gt;serviceType().isEmpty() &amp;&amp; url.path().lower().endsWith(&quot;.pdf&quot;)))
&gt; +    if (element.serviceType() == &quot;application/pdf&quot; || (element.serviceType().isEmpty() &amp;&amp; url.path().lower().endsWith(&quot;.pdf&quot;)))

url.path().lower().endsWith(&quot;.pdf&quot;) does an allocation for the lower() string before doing endsWith.

endsWith() can be really cheap, allocation aren&apos;t. This should use the case insensitive endsWidth() instead of transforming the string.

This also mean we can lower() 4 characters instead of an entire string.

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:243
&gt;      if (snapshot)
&gt;          paintSnapshotImage(paintInfo, paintOffset, snapshot);

if (Image* snapshot = downcast&lt;HTMLPlugInImageElement&gt;(plugInElement).snapshotImage())
    paintSnapshotImage(paintInfo, paintOffset, snapshot);

&gt; Source/WebCore/rendering/RenderMenuList.cpp:66
&gt;      for (size_t i = 0; i &lt; numberOfItems; ++i) {

We don&apos;t really need numberOfItems, it could be numberOfItems-&gt;listItems.size()

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2072
&gt; -        size_t count = element-&gt;listItems().size();
&gt; +        size_t count = element.listItems().size();

Let&apos;s put element.listItems() in a temporary.

This code should not modify the listItem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036824</commentid>
    <comment_count>6</comment_count>
      <attachid>238568</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 13:50:22 -0700</bug_when>
    <thetext>Created attachment 238568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036852</commentid>
    <comment_count>7</comment_count>
      <attachid>238568</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-23 15:03:21 -0700</bug_when>
    <thetext>Comment on attachment 238568
Patch

Clearing flags on attachment: 238568

Committed r173893: &lt;http://trac.webkit.org/changeset/173893&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036853</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-23 15:03:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036857</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 15:28:09 -0700</bug_when>
    <thetext>Debug build fix landed in http://trac.webkit.org/changeset/173895</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036980</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-09-24 10:00:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 238568 [details])
&gt; Clearing flags on attachment: 238568
&gt; 
&gt; Committed r173893: &lt;http://trac.webkit.org/changeset/173893&gt;

This broke the iOS build. Committed fix in &lt;http://trac.webkit.org/changeset/173923&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238517</attachid>
            <date>2014-09-22 23:56:11 -0700</date>
            <delta_ts>2014-09-23 00:18:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137007-20140922235608.patch</filename>
            <type>text/plain</type>
            <size>285929</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1MGU1ZWEwYmYyNzQw
OWUxOGNiMTZlOTUzMTBiNjlhMzAzNjNiMi4uZTE4N2VlYjlhNzA1ZjQ3ZTQ2MTg3ZDliZjYxNDY4
YmVmNTUxYmJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxNyBAQAorMjAxNC0wOS0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50
PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKSBhbmQgZHJvcAorICAgICAgICB0cmFuc2l0
aW9uIG1hY3JvcyBmb3IgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFs
c28gY2xlYW5zIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVs
ZW1lbnRGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hh
bmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZWRD
aGlsZHJlbkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb246OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc1NlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c2V0U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzdHJp
bmdWYWx1ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6
YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZUFjdGlvbkVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29udGFpbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVybmFsTGlua0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmFkaW9CdXR0b25Hcm91cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1p
bmVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGRUZXh0RmllbGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZUZvck1TQUEpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNMaW5rZWQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5U2xpZGVyOjppbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNsaWRlclRodW1iOjplbGVtZW50UmVjdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlOjp0aXRsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZHJlblNlbGVjdGlvbkNoYW5n
ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChvcHRpb25Gcm9tU2VsZWN0aW9uKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcDoKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENhcHRpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxkTGVuZ3RoKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
YW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c1JlYWNoYWJsZUZyb21ET00pOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICog
Y3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
Q2hlY2tlZCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6Z2V0
TmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZO
ZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6Om1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJ
c1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
aXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKiBkb20vQ3VycmVudFNjcmlwdEluY3JlbWVu
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50U2NyaXB0SW5jcmVtZW50ZXI6OkN1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlcik6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OnNldERyYWdJbWFnZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aWNvblVSTHMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc01hcE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNl
ZFVzZW1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAgICogZG9tL1Zp
c2l0ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0hhc2hGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50
VHlwZUhlbHBlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpp
bWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRmly
c3RNYXJrYWJsZSk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dp
dGhOYW1lc3BhY2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQ
ZXJmb3JtU21hcnRSZXBsYWNlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6bm9uQm91bmRhcnlTaGFk
b3dUcmVlUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6aXNJ
blBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6CisgICAgICAgICog
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRU
ZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6
CisgICAgICAgICogaHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMpOgorICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9y
eURvY3VtZW50UGFyc2VyOjpjcmVhdGVCYXNpY0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01hdGNoaW5nRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50OjpzZXRJbm5lckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OmRpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpmb3JtSW1hZ2VFbGVtZW50cyk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50Ojphc3NlcnRJdGVtQ2FuQmVJblBhc3ROYW1lc01hcCk6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hU
TUxLZXlnZW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
OjpzaGFkb3dTZWxlY3QpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OnZpcnR1YWxGb3JtKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVs
ZW1lbnRNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXMp
OgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6
Om93bmVyRGF0YUxpc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRk
KToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGh0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRQbHVn
SW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4pOgorICAgICAgICAqIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
Omhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6c2VsZWN0T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRpb25zRm9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleCk6CisgICAg
ICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN1bW1hcnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRUYWJsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Ojpyb3dBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6
bGFzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3Vz
dG9tRWxlbWVudEFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNsb25lTm9kZSk6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6
CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YWJlbHNOb2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMpOgorICAgICAgICAqIGh0bWwvTWVkaWFEb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVE
b2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNjZW5kZW50VmlkZW9FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKToK
KyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICog
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlw
ZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBl
Ojppc0tleWJvYXJkRm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6Y2hlY2tFbGVtZW50TWF0Y2hlc1Jh
ZGlvTm9kZUxpc3RGaWx0ZXIpOgorICAgICAgICAqIGh0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpvd25lckRvY3VtZW50Rm9yQ3VycmVudE5vZGUpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGV0YWlsc01hcmtlckNvbnRyb2w6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXRlclNoYWRvd0VsZW1lbnQ6Om1ldGVy
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzU2hhZG93RWxlbWVudDo6cHJvZ3Jlc3NFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAgICogbG9h
ZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6aGFuZGxlRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKiBs
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OmRp
c3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2Jq
ZWN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU3VibWl0SW1h
Z2UpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRF
bWJlZGRlZE9iamVjdFRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBk
YXRlRW1iZWRkZWRPYmplY3QpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q2FuZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZSk6CisgICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6Om1lZGlhQ29udHJvbHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OmlzTGl2ZUxpbmspOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGxhbkNvdW50ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OmZyYW1lRWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZyYW1lU2V0OjpmcmFtZVNldEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxD
YW52YXM6OmNhbnZhc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OlJlbmRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpw
YWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjppbWFnZU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0ZWRPcHRpb25Db3VudCk6
CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0
OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQp
OgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6
Om1ldGVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyOjplbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU25hcHNob3R0ZWRQbHVnSW46
OnBsdWdJbkltYWdlRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp0ZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OnRleHRBcmVhRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWRlbzo6dmlkZW9FbGVtZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVy
KToKKyAgICAgICAgKiBzdmcvc3ZndGFncy5pbjoKKyAgICAgICAgR2VuZXJhdGUgaGVscGVycyB0
byBTVkdBRWxlbWVudC4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6d2FzTGFzdENoYW5nZVVzZXJFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVu
UG9zdExheW91dFRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQ
b3B1cFZpc2libGUpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1l
bnROcyk6CisKIDIwMTQtMDktMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRW5zdXJlIHRoYXQgbGF5b3V0IGlzIHVwLXRvLWRhdGUgYmVmb3JlIGhp
dC10ZXN0aW5nIHZpYSBSZW5kZXJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKaW5kZXggNDcyNzJlMmZlM2Q3
ODFjYjg2MzdjNWM5NzY3YTQ3NWI4MjBlYmU5My4uYmIxMDlmNzA1YzRiMzkxNzZiY2I1YjExMTM1
MjA3Yjg0ZDJjMTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5
LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGRvd25j
YXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzAwNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50SU9TOjpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorCiAyMDE0LTA5LTE3ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTczNjk1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDNlNDBkMmE2MzZkNDM4N2ZjZDgxNGEwM2Rk
YzRjOTE5MTg5NWRjODUuLmRjYzJlODdjZTBiMmE2ZDBlZjQxYjEyZTQ1MjU1ZDRlM2U1ZTFhYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNC0wOS0yMiAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1MKkVsZW1l
bnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGlu
c3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRp
b25zLm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IF9zZXRBdXRvZmlsbGVkOl0p
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlk
Q2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVs
ZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJl
RGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEFyZWEpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tOgorICAgICAgICAoaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIx
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxl
bWVudCBjYXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA1MWY3YzIx
YTQzNzkwZDVhNDBlYzA3NDgwOWNmN2JhMDI3MmFmOWI2Li4zYWMwNzM1Y2RiOTNlZDAzMTAyMjUx
ZDE4MDg3OTljNmNjNDVkZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIw
MTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
ZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGRvd25jYXN0
PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkuCisKKyAgICAgICAg
KiBET01IVE1MQ2xhc3Nlcy5jcHA6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OlVSTCk6Cisg
ICAgICAgIChET01IVE1MRG9jdW1lbnQ6OmJvZHkpOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50
Ojpmb3Jtcyk6CisgICAgICAgIChET01IVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbik6CisgICAgICAg
IChET01IVE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxl
bWVudDo6b3B0aW9ucyk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxlbWVudDo6YWN0aXZhdGVJ
dGVtQXRJbmRleCk6CisgICAgICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCk6CisgICAg
ICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoRE9NSFRNTElucHV0
RWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpkaXNhYmxlZCk6
CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6
OnZhbHVlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0
aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAg
IChET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2Zp
bGxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJFZGl0ZWQpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MVGV4
dEFyZWFFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKERP
TUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUpOgorICAgICAgICAqIFdlYkZyYW1lLmNw
cDoKKyAgICAgICAgKGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQpOgorICAgICAgICAoaW5wdXRF
bGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIxICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxlbWVudCBjYXN0aW5nIGhlbHBlciBm
dW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkZTQ2Y2RlNDA5ZGQ2NTgyZDllNGI5N2IxYjM2YzI3MWU3
MmRlYzc1Li5hYjQ5YjE4ZmViODE3ZTRhYzcxNzA0NDdiM2RkNWJmMTlmNzljNThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQg
b2YgdG9IVE1MKkVsZW1lbnQoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRN
TCpFbGVtZW50KCkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9J
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVudEF1
dG9maWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjpodG1sSW5wdXRFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFF
bGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjppc1RleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29u
dGVudEZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNo
b2ljZUFubm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbkNob2ljZUFubm90
YXRpb246OmNvbW1pdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW5UZXh0QW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luVGV4dEFubm90
YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luVGV4dEFubm90YXRpb246OnZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmluaXRpYWxpemVQ
bHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNl
ckludGVyYWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Zm9jdXNl
ZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4
dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50
Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVB
c051bWJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVNlbGVj
dGVkSW5kZXgpOgorICAgICAgICAoV2ViS2l0Ojppc0Fzc2lzdGFibGVOb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBE
ZWxldGVkLgorCiAyMDE0LTA5LTIyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQ29jb2FdIEFkZCBVSSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHdpbmRvdy5j
bG9zZSgpIGlzIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKaW5kZXggZjE5NTNkNmM1YTc2OGI1MjU3YTJmNjZhZGFkNGQ0N2ZjMWU2OTVi
Ni4uZWFhMTYyM2UwNDU2YzRkMWEzNmU4MTExNTQzMmQyZTgxYzBjNGI2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xNzcsNyArMTc3
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVu
dEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKICAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50
ID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQo
KTsKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNl
ZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgaXNIVE1MQXJlYUVsZW1lbnQo
Zm9jdXNlZEVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZm9jdXNlZEltYWdlTWFwVUlFbGVtZW50
KHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KSk7CisgICAgICAgIHJldHVybiBmb2N1
c2VkSW1hZ2VNYXBVSUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxl
bWVudCkpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZm9jdXNlZERvY3VtZW50
LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWRFbGVtZW50ID8gc3RhdGljX2Nh
c3Q8Tm9kZSo+KGZvY3VzZWRFbGVtZW50KSA6IGZvY3VzZWREb2N1bWVudCk7CiAgICAgaWYgKCFv
YmopCkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KIHZvaWQgQVhP
YmplY3RDYWNoZTo6bGFiZWxDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGlzSFRNTExhYmVsRWxlbWVudChlbGVtZW50KSk7Ci0gICAgSFRNTEVsZW1lbnQqIGNvcnJlc3Bv
bmRpbmdDb250cm9sID0gdG9IVE1MTGFiZWxFbGVtZW50KGVsZW1lbnQpLT5jb250cm9sKCk7Cisg
ICAgSFRNTEVsZW1lbnQqIGNvcnJlc3BvbmRpbmdDb250cm9sID0gZG93bmNhc3Q8SFRNTExhYmVs
RWxlbWVudD4oZWxlbWVudCktPmNvbnRyb2woKTsKICAgICB0ZXh0Q2hhbmdlZChjb3JyZXNwb25k
aW5nQ29udHJvbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKaW5kZXggNjJiOTM0ZDdkM2I4NTU2M2JiZmY0NWNm
Nzg1ZTZlNzJkNzI3NjE3Yi4uMGY4ZTFkOWI1NmU3ODhmODE3NTNiMWYyMDBjZmIyNzUzYmIxYjBi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TGlzdEJveC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6Y2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0CiAgICAgaWYgKCFzZWxl
Y3ROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuICF0b0hUTUxT
ZWxlY3RFbGVtZW50KHNlbGVjdE5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKKyAgICBy
ZXR1cm4gIWRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0Tm9kZSkuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmFkZENoaWxk
cmVuKCkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hp
bGRyZW4oKQogICAgIAogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+
bGlzdEl0ZW1zKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogZG93bmNhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3ROb2RlKS5saXN0SXRlbXMoKSkgewogICAgICAgICAv
LyBUaGUgY2FzdCB0byBIVE1MRWxlbWVudCBiZWxvdyBpcyBzYWZlIGJlY2F1c2UgdGhlIG9ubHkg
b3RoZXIgcG9zc2libGUgbGlzdEl0ZW0gdHlwZQogICAgICAgICAvLyB3b3VsZCBiZSBhIFdNTEVs
ZW1lbnQsIGJ1dCBXTUwgYnVpbGRzIGRvbid0IHVzZSBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzIGF0
IGFsbC4KICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hP
cHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAK
aW5kZXggYTlmYWQ4ZDQ3MmE3M2EyYzA5Y2ZjODA1NDllYWYxMDQ2Y2U2ZDllNi4uZDg2NWM4OTVl
M2VlNjVjNjYxZGViYzFiNTBjNGFmMWYxODc5YjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxl
Y3RlZCgpIGNvbnN0CiAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVt
ZW50KG1fb3B0aW9uRWxlbWVudCktPnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5zZWxlY3RlZCgpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29u
c3QKQEAgLTE1NywxMCArMTU3LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bjo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIAog
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiB0b0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCktPnRleHQoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS50
ZXh0KCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVsZW1l
bnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxlbWVu
dCktPmdyb3VwTGFiZWxUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0R3Jv
dXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIAogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTIwMywxMCArMjAzLDEwIEBAIEhUTUxTZWxlY3RFbGVt
ZW50KiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6bGlzdEJveE9wdGlvblBhcmVudE5vZGUo
KSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hUTUxPcHRpb25F
bGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVt
ZW50KG1fb3B0aW9uRWxlbWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2Vs
ZWN0RWxlbWVudCgpOwogCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVs
ZW1lbnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxl
bWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdEdyb3VwRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkub3duZXJTZWxlY3RFbGVtZW50KCk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKaW5kZXggYTA3
MzViNGZlZmExYjNhN2QxMWZiMzM0ODZlMjEwZDdiOTcxYzljNS4uZGViMDkyMGY4Yjk4MzZjYzk4
NmEyMzgyOTY1ZGE2MDY2MmJhNmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKQEAgLTI3Nyw3
ICsyNzcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OnZhbHVlRGVzY3Jp
cHRpb24oKSBjb25zdAogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBmbG9hdCB0aW1lID0gdG9IVE1MSW5wdXRFbGVtZW50
KG5vZGUpLT52YWx1ZSgpLnRvRmxvYXQoKTsKKyAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwogICAgIHJldHVybiBsb2Nh
bGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24u
Y3BwCmluZGV4IDg4ZTJlNmVlMTU2MGRiOWMwMjgyMjJkNjMyNzIyYzE0YjcwMDZmZTYuLmVkMTdk
NGEzNzdmZTYxODVlYmRhZjAxMTdjOGVmNjg4MTdkODM0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
bi5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246
OmlzRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgLy8gaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgcmV0
dXJucyB0cnVlIGlmIHRoZSBwYXJlbnQgPHNlbGVjdD4gZWxlbWVudCBpcyBkaXNhYmxlZCwKICAg
ICAvLyB3aGljaCB3ZSBkb24ndCB3YW50LgotICAgIHJldHVybiAhdG9IVE1MT3B0aW9uRWxlbWVu
dChtX2VsZW1lbnQuZ2V0KCkpLT5vd25FbGVtZW50RGlzYWJsZWQoKTsKKyAgICByZXR1cm4gIWRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50KS5vd25FbGVtZW50RGlzYWJsZWQo
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzVmlzaWJsZSgpIGNv
bnN0CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpp
c09mZlNjcmVlbigpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpp
c1NlbGVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MT3B0aW9uRWxlbWVudChtX2Vs
ZW1lbnQuZ2V0KCkpLT5zZWxlY3RlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKm1fZWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5
TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKICAgICBp
ZiAoIWNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRv
SFRNTE9wdGlvbkVsZW1lbnQobV9lbGVtZW50LmdldCgpKS0+c2V0U2VsZWN0ZWQoYik7CisgICAg
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnNldFNlbGVjdGVkKGIpOwog
fQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9yTVNBQSgpIGNv
bnN0CkBAIC0xMTQsNyArMTE0LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb246OmVsZW1lbnRSZWN0KCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlNZW51TGlz
dE9wdGlvbjo6c3RyaW5nVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxPcHRpb25F
bGVtZW50KG1fZWxlbWVudC5nZXQoKSktPnRleHQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnRleHQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAppbmRleCAxZDUyMTlkNjMzYjA1ZDc1NmUxNDhk
NzVmNzQ3ZDg3MTMzODdhM2NlLi5mYzI1ODVkMWVmYzEzYjRkY2U0MmEzZGIwNjBlY2Q1YzYxZGI2
MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKCkKIAogICAgIG1faGF2ZUNoaWxk
cmVuID0gdHJ1ZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbGlzdEl0ZW0gOiB0b0hUTUxTZWxl
Y3RFbGVtZW50KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0
byYgbGlzdEl0ZW0gOiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdE5vZGUpLmxp
c3RJdGVtcygpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9u
ID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKICAgICAgICAg
aWYgKG9wdGlvbikgewogICAgICAgICAgICAgb3B0aW9uLT5zZXRQYXJlbnQodGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCmluZGV4IDZlY2FlMTgyNWQ4N2RiYjk3YmI4ODIzNTI4ZTkxMTBlMjM1MzExMzgu
LjY3ZjI4YjMwNzRlNmU5ZDY0ZTBhOTM2Zjc3Y2VmYWY3ZjRiZjFmNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCkBAIC0yOTEsMTggKzI5MSwxOCBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7
CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIGlm
IChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOworICAgICAgICBpZiAoaW5wdXQu
aXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKLSAgICAgICAg
aWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgIGlmIChpbnB1dC5pc1JhZGlvQnV0
dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOwotICAgICAgICBpZiAo
aW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICAgICAgaWYgKGlucHV0
LT5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICBpZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkK
ICAgICAgICAgICAgIHJldHVybiBTbGlkZXJSb2xlOwogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LT5nZXRBdHRy
aWJ1dGUodHlwZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1
dC5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dHlwZSwgImNvbG9yIikpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3JXZWxsUm9sZTsKICNlbmRp
ZgpAQCAtMzEwLDggKzMxMCw4IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0
RmllbGRSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
IHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBs
ZSgpID8gTGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIEhUTUxTZWxlY3RF
bGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2Rl
KCkpOworICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC5tdWx0aXBsZSgpID8gTGlzdEJveFJv
bGUgOiBQb3BVcEJ1dHRvblJvbGU7CiAgICAgfQogICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1l
bnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKQEAgLTQ2OSw4ICs0Njks
OCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50
KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRF
bGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzVGV4dCgpIHx8IGlucHV0LT5p
c051bWJlckZpZWxkKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICByZXR1cm4gaW5wdXQuaXNUZXh0
KCkgfHwgaW5wdXQuaXNOdW1iZXJGaWVsZCgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTUxOSw4ICs1MTksOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2
ZUltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5w
dXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9I
VE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0
b24oKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC5pc0ltYWdlQnV0dG9uKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1NCw4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAKICAgICBpZiAocm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZSAmJiBpc0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBpbnB1dC0+aXNJbWFnZUJ1
dHRvbigpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0LmlzSW1hZ2VCdXR0b24o
KTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjksNyArNzI5LDcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNU
YWdOYW1lKHNlbGVjdFRhZykgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5tdWx0aXBs
ZSgpOworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykg
JiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKCkpLm11bHRpcGxlKCk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdApAQCAtNzQy
LDkgKzc0Miw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBj
b25zdAogICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpLT5pc1Jl
YWRPbmx5KCk7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAg
ICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXQt
PmlzUmVhZE9ubHkoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmIChpbnB1dC5pc1RleHRGaWVs
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKQEAgLTgzOCw5ICs4MzgsOSBAQCBT
dHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewog
ICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlu
cHV0LT52YWx1ZUFzTnVtYmVyKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5p
c1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlQXNOdW1iZXIo
KTsKICAgICB9CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NTIsOSArODUyLDkg
QEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ewogICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsK
LSAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGlucHV0LT5tYXhpbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1Jh
bmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsKICAgICB9
CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NjYsOSArODY2LDkgQEAgZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAogZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAg
IGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0
LT5taW5pbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29u
dHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1pbmltdW0oKTsKICAgICB9CiAKICAg
ICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC05NzQsOCArOTc0LDggQEAgRWxlbWVudCogQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogc3RhdGljIGJvb2wg
aXNOb2RlQWN0aW9uRWxlbWVudChOb2RlKiBub2RlKQogewogICAgIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpICYmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LT5pc0NoZWNrYm94KCkg
fHwgaW5wdXQtPmlzVGV4dEJ1dHRvbigpIHx8IGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1
dC0+aXNJbWFnZUJ1dHRvbigpKSkKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmICghaW5wdXQuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgJiYgKGlucHV0LmlzUmFkaW9CdXR0b24oKSB8fCBpbnB1dC5p
c0NoZWNrYm94KCkgfHwgaW5wdXQuaXNUZXh0QnV0dG9uKCkgfHwgaW5wdXQuaXNGaWxlVXBsb2Fk
KCkgfHwgaW5wdXQuaXNJbWFnZUJ1dHRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzA3LDcgKzEzMDcs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlcm5hdGl2ZVRleHQoVmVjdG9y
PEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZAogICAgIAogICAgIC8vIFRoZSBmaWVsZHNldCBl
bGVtZW50IGRlcml2ZXMgaXRzIGFsdGVybmF0aXZlIHRleHQgZnJvbSB0aGUgZmlyc3QgYXNzb2Np
YXRlZCBsZWdlbmQgZWxlbWVudCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAgIGlmIChpc0hUTUxG
aWVsZFNldEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0b0hUTUxGaWVsZFNldEVsZW1lbnQo
bm9kZSktPmxlZ2VuZCgpKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb3duY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50
Pigqbm9kZSkubGVnZW5kKCkpOwogICAgICAgICBpZiAob2JqZWN0ICYmICFvYmplY3QtPmlzSGlk
ZGVuKCkpCiAgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGFj
Y2Vzc2libGVOYW1lRm9yTm9kZShvYmplY3QtPm5vZGUoKSksIEFsdGVybmF0aXZlVGV4dCkpOwog
ICAgIH0KQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OnZpc2libGVUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikKICAgICAK
ICAgICBib29sIGlzSW5wdXRUYWcgPSBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7CiAgICAgaWYg
KGlzSW5wdXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpIHsK
LSAgICAgICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoaW5wdXQtPnZh
bHVlV2l0aERlZmF1bHQoKSwgVmlzaWJsZVRleHQpKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlm
IChpbnB1dC5pc1RleHRCdXR0b24oKSkgeworICAgICAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VGV4dChpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCksIFZpc2libGVUZXh0KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjg1LDkgKzE2ODUs
OSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKIAogICAg
IGJvb2wgaXNJbnB1dFRhZyA9IGlzSFRNTElucHV0RWxlbWVudChub2RlKTsKICAgICBpZiAoaXNJ
bnB1dFRhZykgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0
RWxlbWVudChub2RlKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVmYXVsdCgpOworICAgICAgICBIVE1MSW5w
dXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAg
ICAgICAgaWYgKGlucHV0LmlzVGV4dEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0
LnZhbHVlV2l0aERlZmF1bHQoKTsKICAgICB9CiAKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0Nv
bnRyb2woKSkgewpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojp0ZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYg
KGlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpIHx8
IGlzSFRNTElucHV0RWxlbWVudChub2RlKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KG5vZGUpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogCiAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTE3Nzcs
MTYgKzE3NzcsMTYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1
ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7CiAKICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKTsKLSAgICAgICAgaW50
IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5s
aXN0SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOworICAgICAgICBpbnQgc2VsZWN0ZWRJ
bmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC5saXN0SXRlbXMoKTsK
ICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNl
bGVjdGVkSW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkgewogICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBvdmVycmlkZGVuRGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRl
eF0tPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogICAgICAgICAgICAgaWYgKCFv
dmVycmlkZGVuRGVzY3JpcHRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRkZW5EZXNjcmlwdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAoIXNlbGVjdEVsZW1l
bnQtPm11bHRpcGxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+dmFsdWUo
KTsKKyAgICAgICAgaWYgKCFzZWxlY3RFbGVtZW50Lm11bHRpcGxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZWN0RWxlbWVudC52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgfQogCkBAIC0xODEyLDEzICsxODEyLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKICAgICBpZiAoIW5v
ZGUoKSB8fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh0eXBl
QXR0cik7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pigqbm9kZSgpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1dC5n
ZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwg
ImNvbG9yIikpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OnZh
bHVlIGFsd2F5cyByZXR1cm5zIGEgc3RyaW5nIHBhcnNlYWJsZSBieSBDb2xvcigpLgotICAgIENv
bG9yIGNvbG9yKGlucHV0LT52YWx1ZSgpKTsKKyAgICBDb2xvciBjb2xvcihpbnB1dC52YWx1ZSgp
KTsKICAgICByID0gY29sb3IucmVkKCk7CiAgICAgZyA9IGNvbG9yLmdyZWVuKCk7CiAgICAgYiA9
IGNvbG9yLmJsdWUoKTsKQEAgLTE4NDIsNyArMTg0Miw3IEBAIHN0YXRpYyBTdHJpbmcgYWNjZXNz
aWJsZU5hbWVGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBhbHQ7CiAgICAgCiAg
ICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTElu
cHV0RWxlbWVudChub2RlKS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZSBub2RlIGNh
biBiZSB0dXJuZWQgaW50byBhbiBBWCBvYmplY3QsIHdlIGNhbiB1c2Ugc3RhbmRhcmQgbmFtZSBj
b21wdXRhdGlvbiBydWxlcy4KICAgICAvLyBJZiBob3dldmVyLCB0aGUgbm9kZSBjYW5ub3QgKGJl
Y2F1c2UgdGhlcmUncyBubyByZW5kZXJlciBlLmcuKSBmYWxsYmFjayB0byB1c2luZyB0aGUgYmFz
aWMgdGV4dCB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNWJlZTUzNTE1Yzk3
NzBjOTc0YTczYzVkNjNjN2EwODYwMTc0NjY4OC4uNDRjMzhjN2U4YzQ1NmU4Y2Q4ZGMyMGQyMjU4
OTExY2QzNGM3Yzc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC01MjQsOCArNTI0LDggQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0F0dGFjaG1lbnQoKSBjb25zdAogYm9v
bCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdAog
ewogICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbnB1
dEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgICAg
ICByZXR1cm4gaW5wdXQtPmlzRmlsZVVwbG9hZCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkp
OworICAgICAgICByZXR1cm4gaW5wdXQuaXNGaWxlVXBsb2FkKCk7CiAgICAgfQogICAgIAogICAg
IHJldHVybiBmYWxzZTsKQEAgLTc0MSw5ICs3NDEsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgIGlmIChjc3NCb3ggJiYgY3NzQm94
LT5pc01lbnVMaXN0KCkpIHsKICAgICAgICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBnbyBzdHJh
aWdodCB0byB0aGUgdGV4dCgpIG9mIGl0cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAvLyBUaGlz
IGhhcyB0byBiZSBvdmVycmlkZGVuIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3RlZCBpdGVt
IGhhcyBhbiBBUklBIGxhYmVsLgotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxl
bWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAg
aW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50
LT5saXN0SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CisgICAg
ICAgIGludCBzZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVt
ZW50Lmxpc3RJdGVtcygpOwogICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRp
Y19jYXN0PHNpemVfdD4oc2VsZWN0ZWRJbmRleCkgPCBsaXN0SXRlbXMuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJyaWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJ
dGVtc1tzZWxlY3RlZEluZGV4XS0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAg
ICAgICAgICAgICBpZiAoIW92ZXJyaWRkZW5EZXNjcmlwdGlvbi5pc051bGwoKSkKQEAgLTc4Myw3
ICs3ODMsNyBAQCBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
YWJlbEVsZW1lbnRDb250YWluZXIoKSBjb25zdAogICAgIC8vIGZpbmQgaWYgdGhpcyBoYXMgYSBw
YXJlbnQgdGhhdCBpcyBhIGxhYmVsCiAgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gbV9yZW5k
ZXJlci0+bm9kZSgpOyBwYXJlbnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpc0hUTUxMYWJlbEVsZW1lbnQocGFyZW50Tm9kZSkpCi0g
ICAgICAgICAgICByZXR1cm4gdG9IVE1MTGFiZWxFbGVtZW50KHBhcmVudE5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KHBhcmVudE5vZGUpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkxNiw5ICs5MTYsOSBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVt
ZW50KCkgY29uc3QKICAgICAvLyBSaWdodCBub3csIHdlIGRvIG5vdCBzdXBwb3J0IEFSSUEgbGlu
a3MgYXMgaW50ZXJuYWwgbGluayBlbGVtZW50cwogICAgIGlmICghaXNIVE1MQW5jaG9yRWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSFRNTEFuY2hvckVsZW1l
bnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVudCk7CisgICAgSFRNTEFuY2hv
ckVsZW1lbnQmIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCk7
CiAgICAgCi0gICAgVVJMIGxpbmtVUkwgPSBhbmNob3ItPmhyZWYoKTsKKyAgICBVUkwgbGlua1VS
TCA9IGFuY2hvci5ocmVmKCk7CiAgICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllciA9IGxpbmtV
UkwuZnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgaWYgKGZyYWdtZW50SWRlbnRpZmllci5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTUzLDExICs5NTMsMTEgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW4KICAgICBpZiAoIW5vZGUgfHwgIWlzSFRNTElucHV0RWxlbWVu
dChub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIGlmIHRoZXJl
J3MgYSBmb3JtLCB0aGVuIHRoaXMgaXMgZWFzeQotICAgIGlmIChpbnB1dC0+Zm9ybSgpKSB7Cisg
ICAgaWYgKGlucHV0LmZvcm0oKSkgewogICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3Jt
RWxlbWVudHM7Ci0gICAgICAgIGlucHV0LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQt
Pm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKKyAgICAgICAgaW5wdXQuZm9ybSgpLT5nZXROYW1lZEVs
ZW1lbnRzKGlucHV0Lm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoYXV0byYgYXNzb2NpYXRlRWxlbWVudCA6IGZvcm1FbGVtZW50cykgewogICAgICAgICAgICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUoJmFzc29jaWF0ZUVsZW1lbnQuZ2V0KCkpKQpAQCAtOTY4LDkgKzk2OCw5IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuCiAgICAgICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAg
ICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobGlzdC0+aXRlbShpKSkpIHsKLSAgICAgICAgICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBhc3NvY2lhdGVFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVFbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC0+bmFtZSgpID09IGlucHV0LT5u
YW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoYXNzb2NpYXRlRWxlbWVudCkpCisg
ICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXNzb2NpYXRlRWxlbWVudC5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC5u
YW1lKCkgPT0gaW5wdXQubmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3Nv
Y2lhdGVFbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFVJRWxlbWVudHMu
YXBwZW5kKG9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTUw
Nyw3ICsxNTA3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKIFVSTCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogewogICAgIGlmIChpc0FuY2hvcigpICYmIGlzSFRN
TEFuY2hvckVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBpZiAoSFRNTEFu
Y2hvckVsZW1lbnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yRWxlbWVudCgp
KSkKKyAgICAgICAgaWYgKEhUTUxBbmNob3JFbGVtZW50KiBhbmNob3IgPSBkb3duY2FzdDxIVE1M
QW5jaG9yRWxlbWVudD4oYW5jaG9yRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBhbmNo
b3ItPmhyZWYoKTsKICAgICB9CiAgICAgCkBAIC0xNTE1LDEwICsxNTE1LDEwIEBAIFVSTCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9yZW5k
ZXJlci0+ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKICAgICBpZiAoaXNJbWFnZSgpICYmIG1fcmVu
ZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkK
LSAgICAgICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5z
cmMoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCptX3JlbmRl
cmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChpc0lucHV0SW1hZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5u
b2RlKCkpLnNyYygpOwogICAgIAogICAgIHJldHVybiBVUkwoKTsKIH0KQEAgLTE2NzksNyArMTY3
OSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5ub2Rl
KCkgfHwgIW1fcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkp
OworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKm1fcmVuZGVyZXItPm5vZGUoKSk7
CiAKICAgICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTY4OCwxMCArMTY4OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIC8vIEZJWE1FOiBEbyB3ZSB3
YW50IHRvIGRvIGFueXRoaW5nIGhlcmUgZm9yIEFSSUEgdGV4dGJveGVzPwogICAgIGlmIChyZW5k
ZXJlci0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qgc2Fm
ZSEgIE90aGVyIGVsZW1lbnRzIGNvdWxkIGhhdmUgYSBUZXh0RmllbGQgcmVuZGVyZXIuCi0gICAg
ICAgIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KS0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICAg
ICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkuc2V0VmFsdWUoc3RyaW5nKTsK
ICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbm90IHNhZmUhICBPdGhlciBlbGVtZW50cyBjb3VsZCBoYXZlIGEgVGV4dEFy
ZWEgcmVuZGVyZXIuCi0gICAgICAgIHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KS0+c2V0
VmFsdWUoc3RyaW5nKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxl
bWVudCkuc2V0VmFsdWUoc3RyaW5nKTsKICAgICB9CiB9CiAKQEAgLTE3NjMsMTAgKzE3NjMsMTAg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXREb2N1bWVudExpbmtzKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmUKICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IGN1
cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgaXNIVE1MQXJlYUVs
ZW1lbnQoY3VycikgJiYgaXNIVE1MTWFwRWxlbWVudChwYXJlbnQpKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluayhheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1Jv
bGUpKTsKLSAgICAgICAgICAgICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gdG9IVE1MTWFwRWxl
bWVudChwYXJlbnQpOwotICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxl
bWVudCh0b0hUTUxBcmVhRWxlbWVudChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgYXJlYU9iamVj
dC0+c2V0SFRNTE1hcEVsZW1lbnQobWFwKTsKLSAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LT5z
ZXRQYXJlbnQoYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKG1hcCkpOworICAgICAgICAg
ICAgICAgIEhUTUxNYXBFbGVtZW50JiBtYXAgPSBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKnBh
cmVudCk7CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTEFyZWFFbGVtZW50KGRv
d25jYXN0PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOworICAgICAgICAgICAgICAgIGFyZWFPYmpl
Y3QtPnNldEhUTUxNYXBFbGVtZW50KCZtYXApOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3Qt
PnNldFBhcmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoJm1hcCkpOwogCiAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhcmVhT2JqZWN0KTsKICAgICAgICAgICAgIH0KQEAg
LTIxNjEsNyArMjE2MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNCiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKEVsZW1lbnQqIG1hcFBhcmVu
dCA9IGFyZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQYXJlbnQgPSBtYXBQYXJl
bnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoaXNIVE1MTWFwRWxlbWVudChtYXBQ
YXJlbnQpKSB7Ci0gICAgICAgICAgICBwYXJlbnQgPSBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1h
Z2VNYXAodG9IVE1MTWFwRWxlbWVudChtYXBQYXJlbnQpKTsKKyAgICAgICAgICAgIHBhcmVudCA9
IGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcChkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4o
bWFwUGFyZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIy
MTEsMTAgKzIyMTEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KICAgICBOb2RlKiBub2Rl
ID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9k
ZSgpOwogCiAgICAgaWYgKGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4g
YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCh0b0hUTUxBcmVhRWxlbWVudChub2RlKSwgcG9p
bnQpOworICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChkb3duY2Fz
dDxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpLCBwb2ludCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9w
dGlvbkVsZW1lbnQobm9kZSkpCi0gICAgICAgIG5vZGUgPSB0b0hUTUxPcHRpb25FbGVtZW50KG5v
ZGUpLT5vd25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50Pigqbm9kZSkub3duZXJTZWxlY3RFbGVtZW50KCk7CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0KiBvYmogPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqKQpAQCAtMjUw
NSwyMSArMjUwNSwyMSBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0QXJl
YVJvbGU7CiAKICAgICBpZiAobm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpIHsKLSAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7
Ci0gICAgICAgIGlmIChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAg
aWYgKGlucHV0LmlzQ2hlY2tib3goKSkKICAgICAgICAgICAgIHJldHVybiBDaGVja0JveFJvbGU7
Ci0gICAgICAgIGlmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQu
aXNSYWRpb0J1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIFJhZGlvQnV0dG9uUm9sZTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgaWYgKGlucHV0LmlzVGV4
dEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7CiAgICAgICAg
IC8vIE9uIGlPUywgdGhlIGRhdGUgZmllbGQgaXMgYSBwb3B1cCBidXR0b24uIE9uIG90aGVyIHBs
YXRmb3JtcyB0aGlzIGlzIGEgdGV4dCBmaWVsZC4KICNpZiBQTEFURk9STShJT1MpCi0gICAgICAg
IGlmIChpbnB1dC0+aXNEYXRlRmllbGQoKSkKKyAgICAgICAgaWYgKGlucHV0LmlzRGF0ZUZpZWxk
KCkpCiAgICAgICAgICAgICByZXR1cm4gUG9wVXBCdXR0b25Sb2xlOwogI2VuZGlmCiAgICAgICAg
IAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQuZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJjb2xvciIpKQogICAgICAgICAgICAgcmV0
dXJuIENvbG9yV2VsbFJvbGU7CiAjZW5kaWYKQEAgLTI4NDAsOCArMjg0MCw4IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRyZW4oKQogICAgIGlmICgh
bm9kZSB8fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7
Ci0gICAgSFRNTEVsZW1lbnQqIHNwaW5CdXR0b25FbGVtZW50ID0gaW5wdXQtPmlubmVyU3BpbkJ1
dHRvbkVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICBIVE1MRWxlbWVudCogc3BpbkJ1dHRvbkVsZW1l
bnQgPSBpbnB1dC5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKCFzcGluQnV0dG9u
RWxlbWVudCB8fCAhc3BpbkJ1dHRvbkVsZW1lbnQtPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zMjcxLDcgKzMyNzEsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKICAgICBpZiAoaXNMaW5r
YWJsZSgqdGhpcykpIHsKICAgICAgICAgRWxlbWVudCogYW5jaG9yID0gYW5jaG9yRWxlbWVudCgp
OwogICAgICAgICBpZiAoYW5jaG9yICYmIGlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKLSAg
ICAgICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvciktPmhyZWYoKTsKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFuY2hvcikuaHJl
ZigpOwogICAgIH0KIAogICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwpAQCAtMzI4Niw3ICszMjg2
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0CiAg
ICAgaWYgKCFhbmNob3IgfHwgIWlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuICF0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvcikt
PmhyZWYoKS5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVu
dD4oKmFuY2hvcikuaHJlZigpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpoYXNCb2xkRm9udCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAppbmRleCA5NTBmOTgyOTAyYTdh
ODYwZDhmZmY1MmNjZjJkNDE5YWJiMTBjZjAzLi5iNWUzNDZkNTZlNjdiNDQ1NGQwNGM5ZDYwYzk4
MTBhOTEyMWUxMmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNsaWRlci5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlTbGlkZXI6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIEhUTUxJbnB1dEVs
ZW1lbnQqIEFjY2Vzc2liaWxpdHlTbGlkZXI6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOworICAgIHJldHVy
biBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpOwogfQogCiAK
QEAgLTE1OSw3ICsxNTksNyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6
ZWxlbWVudFJlY3QoKSBjb25zdAogICAgIFJlbmRlck9iamVjdCogc2xpZGVyUmVuZGVyZXIgPSBt
X3BhcmVudC0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXNsaWRlclJlbmRlcmVyIHx8ICFzbGlkZXJS
ZW5kZXJlci0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICBy
ZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KHNsaWRlclJlbmRlcmVyLT5ub2RlKCkpLT5zbGlkZXJU
aHVtYkVsZW1lbnQoKS0+Ym91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oc2xpZGVyUmVuZGVyZXItPm5vZGUoKSktPnNsaWRlclRodW1iRWxlbWVudCgp
LT5ib3VuZGluZ0JveCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IGQ5ZDQzNWY4YmVh
N2MyYmIzM2Y3YzhkYzllMWI4YTExZGIwODE4NmEuLjUwZTU4ZDljZjJhYWZkMDUzYzFkZTMwZTQ1
NDQwN2JmODkwYTYxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTFRhYmxlRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdAogICAgIAogICAgIFJl
bmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CiAgICAgaWYgKHRh
YmxlLT5lbGVtZW50KCkgJiYgaXNIVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGUtPmVsZW1lbnQoKSk7
CiAgICAgCiAgICAgLy8gSWYgdGhlIHRhYmxlIGhhcyBhIGRpc3BsYXk6dGFibGUtcm93LWdyb3Vw
LCB0aGVuIHRoZSBSZW5kZXJUYWJsZSBkb2VzIG5vdCBoYXZlIGEgcG9pbnRlciB0byBpdCdzIEhU
TUxUYWJsZUVsZW1lbnQuCiAgICAgLy8gV2UgY2FuIGluc3RlYWQgZmluZCBpdCBieSBhc2tpbmcg
dGhlIGZpcnN0U2VjdGlvbiBmb3IgaXRzIHBhcmVudC4KQEAgLTEwOSw3ICsxMDksNyBAQCBIVE1M
VGFibGVFbGVtZW50KiBBY2Nlc3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCgpIGNvbnN0CiAg
ICAgaWYgKCFhY3R1YWxUYWJsZSB8fCAhaXNIVE1MVGFibGVFbGVtZW50KGFjdHVhbFRhYmxlKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxl
bWVudChhY3R1YWxUYWJsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+
KGFjdHVhbFRhYmxlKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFU
YWJsZSgpIGNvbnN0CkBAIC02MDgsNyArNjA4LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6dGl0bGUoKSBjb25zdAogICAgIC8vIHNlZSBpZiB0aGVyZSBpcyBhIGNhcHRpb24KICAgICBO
b2RlKiB0YWJsZUVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKHRhYmxlRWxl
bWVudCAmJiBpc0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50KSkgewotICAgICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVs
ZW1lbnQpLT5jYXB0aW9uKCk7CisgICAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0
aW9uID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxlRWxlbWVudCkuY2FwdGlvbigp
OwogICAgICAgICBpZiAoY2FwdGlvbikKICAgICAgICAgICAgIHRpdGxlID0gY2FwdGlvbi0+aW5u
ZXJUZXh0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCA5MzBlZjNiN2JjZmRmZGNjNDdkOWJmOWY1
NDllNjE0ZGUwYTQyNjk3Li5iODY1MTE4MDgyZDNhNzBkZDhhMzdjYjgzNjRmODNmNTkwODJlYjMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVj
dENhY2hlQXRrLmNwcApAQCAtMTQwLDEwICsxNDAsOCBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGls
ZHJlblNlbGVjdGlvbkNoYW5nZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiAgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG9iamVjdC0+d3JhcHBlcigpLCAic2VsZWN0aW9uLWNoYW5nZWQi
KTsKIAogICAgIC8vIEZpbmQgdGhlIGl0ZW0gd2hlcmUgdGhlIHNlbGVjdGlvbiBjaGFuZ2Ugd2Fz
IHRyaWdnZXJlZCBmcm9tLgotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxT
ZWxlY3RFbGVtZW50KG5vZGUpOwotICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm47Ci0g
ICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3QtPmFjdGl2ZVNlbGVjdGlvblN0YXJ0TGlz
dEluZGV4KCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Pigqbm9kZSk7CisgICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3Qu
YWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGxpc3RPYmplY3QgPSBnZXRMaXN0T2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKCFsaXN0T2Jq
ZWN0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCmluZGV4
IDZjNGNiZjkxNWZkNzBjYjFjNjRkZDgwZGQ0Y2YxNjdiODM3NDU2MjIuLjllODdmNGY1ZmJjNzdl
ZmY1Mjg1NzY1ZDY2ZmY3NDc1OTRkMDIyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VTZWxlY3Rpb24uY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9wdGlvbkZyb21TZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdp
bnQgaW4KICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9IVE1MU2VsZWN0
RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdE5vZGUgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7
CiAgICAgICAgIGlmICghc2VsZWN0Tm9kZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xOTUsOCArMTk1LDggQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlv
bkdldFNlbGVjdGlvbkNvdW50KEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQogICAgICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgaW50IHNlbGVjdGVk
SW5kZXggPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZElu
ZGV4KCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRl
eCA8IHN0YXRpY19jYXN0PGludD4odG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgp
KS0+bGlzdEl0ZW1zKCkuc2l6ZSgpKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBkb3du
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgo
KTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwg
c3RhdGljX2Nhc3Q8aW50Pihkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5v
ZGUoKSktPmxpc3RJdGVtcygpLnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAppbmRleCBmNmVkMTljMGFhNjlhYjgzMTVk
M2EzODE5MmYxODZlYTBhODQ2NTYzLi42NTliODhmOGM3OWFiYTFjNDAxMDFiNjk5MjkxNmQ0ZWI0
NjM3MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKQEAgLTIzOCwx
OSArMjM4LDE5IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJv
d0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKIHsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJ
ZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCBudWxscHRyKTsKKyAg
ICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUo
dGFibGUpLCBudWxscHRyKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0g
Y29yZSh0YWJsZSk7CiAgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUtPm5vZGUoKTsKICAgICAgICAg
aWYgKG5vZGUgJiYgaXNIVE1MVGFibGVFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudChub2RlKS0+
Y2FwdGlvbigpOworICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24g
PSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkuY2FwdGlvbigpOwogICAgICAgICAg
ICAgaWYgKGNhcHRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPmVs
ZW1lbnQoKSktPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRDb2x1bW5EZXNjcmlwdGlvbihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDM0ZDBjYjkxY2ZmOGExZDg2ODZm
NmY5NzA4ZjQ0Yzg2MzdlMWNlNmEuLjVjYjQ0MGE5MDIwODM0NmY5ZTlmNTE3MzMwOGY1YjYxMGUz
MjMwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTE3MSw3ICsxNzEsNyBA
QCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbihBdGtP
YmplY3QqIG9iamVjdCkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSwgMCk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIE5vZGUqIG5vZGUgPSAwOworICAgIE5v
ZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkKICAgICAgICAgbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBjb3JlT2JqZWN0LT5hcmlhUm9s
ZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlIHx8IGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKQEAg
LTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXRE
ZXNjcmlwdGlvbihBdGtPYmplY3QqIG9iamVjdCkKIAogICAgIC8vIGF0a190YWJsZV9nZXRfc3Vt
bWFyeSByZXR1cm5zIGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28g
ZXhwb3NlIHN1bW1hcnkgaGVyZS4KICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
VGFibGVSb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gdG9IVE1MVGFibGVFbGVtZW50
KG5vZGUpLT5zdW1tYXJ5KCk7CisgICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gZG93bmNhc3Q8SFRN
TFRhYmxlRWxlbWVudD4oKm5vZGUpLnN1bW1hcnkoKTsKICAgICAgICAgaWYgKCFzdW1tYXJ5Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KG9i
amVjdCwgQXRrQ2FjaGVkQWNjZXNzaWJsZURlc2NyaXB0aW9uLCBzdW1tYXJ5KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5
T2JqZWN0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJp
bGl0eU9iamVjdElPUy5tbQppbmRleCBlMWZkYzNiM2MyMTA0NWFiOGRjOWJjZjVmNDE0NzFlNWIz
ODQzMjdmLi4xYzliOTM5ZWZlMWFiMDdjMmUzZGExMmVmNzU2Nzk2ODNiYTk5MjA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxp
dHlPYmplY3RJT1MubW0KQEAgLTY3LDExICs2Nyw4IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpCiAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QgfHwgIXJlbmRlck9iamVjdC0+bm9kZSgpIHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKS0+aXNI
VE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KHJlbmRlck9iamVjdC0+
bm9kZSgpKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCkubGVuZ3RoKCk7CisgICAgSFRN
TElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KnJlbmRlck9iamVjdC0+bm9kZSgpKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LnZhbHVlKCku
bGVuZ3RoKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUln
bm9yZUF0dGFjaG1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IGIwZmRmNjViMjk2MmZhOWE4MWViYjk4OTViNzc4
MmNkM2U0ZTZhMTIuLjZmYmExOTk1NDFmYzkwYWE5ZjY0ZjhhOWJiNzIzOGE5OTdlMWIwNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
QEAgLTgzLDE2ICs4MywxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVtR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogICAgIEFTU0VSVChk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAKICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9t
aWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgIGlmICghYXRv
bWljUHJvcGVydHlOYW1lIHx8ICF0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05h
bWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkKKyAgICBpZiAoIWF0b21pY1Byb3BlcnR5TmFt
ZSB8fCAhZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRl
bSgqYXRvbWljUHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAotICAgIGlmIChVTkxJS0VMWSh0b0hUTUxEb2N1bWVudChkb2N1bWVu
dCktPndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVy
dHlOYW1lKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9j
dW1lbnQpLndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJv
cGVydHlOYW1lKSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9u
ID0gZG9jdW1lbnQtPndpbmRvd05hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKICAgICAg
ICAgQVNTRVJUKGNvbGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoY29sbGVjdGlvbikpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHRvSFRNTERvY3VtZW50KGRvY3VtZW50
KS0+d2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBkb3duY2Fz
dDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0
eU5hbWUpKSk7CiB9CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQpAQCAtMjQ2
LDcgKzI0Niw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7CiAgICAgaWYgKGRv
Y3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0
b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgICAgIGlm
IChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5k
b3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY1By
b3BlcnR5TmFtZSAmJiBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93
TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgbmFtZWRJ
dGVtR2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMjMs
NyArMzIzLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHUKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRv
bWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYg
KGF0b21pY1Byb3BlcnR5TmFtZSAmJiB0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRv
d05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJv
cGVydHlOYW1lICYmIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dO
YW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0
ZW1HZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRl
eCAxYWQzYzYyNjY1Y2Q2ZTExNWNhZjg4OWQ1YTI3N2JiMDM1MTVhZWY1Li43OTUzYzZjZDViZTM1
Y2I1YTg1NGJhMDAyZGYwZWM5ZTkxYzYxZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC03Myw4ICs3Myw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFCiAgICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
Y3VtZW50LmRvY3VtZW50TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpOwotICAgIGlmIChV
TkxJS0VMWShlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpKSB7Ci0gICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KGVsZW1lbnQpLT5jb250ZW50RnJhbWUo
KSkKKyAgICBpZiAoVU5MSUtFTFkoaXNIVE1MSUZyYW1lRWxlbWVudChlbGVtZW50KSkpIHsKKyAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqZWxl
bWVudCkuY29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlMoZXhlYywgZnJhbWUpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IGYy
NTFlYjJkZWJmMDIzY2QzNmVjZDRjOTI2MDFhMDBmY2U4Yjg0MTcuLjc3ZWFmZjU4MDE3ZmYxZjJi
NTZlZGYxODc3MDhmNmYyNDI0MDFlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdAogewogICAgIEhUTUxFbGVtZW50JiBlbGVt
ZW50ID0ganNDYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90QmFzZSktPmltcGwoKTsKICAgICBOb2Rl
KiBmcmFtZUVsZW1lbnQgPSBlbGVtZW50LmNoaWxkcmVuKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gdG9IVE1MRnJhbWVFbGVtZW50KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgp
KSB7CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxGcmFtZUVsZW1l
bnQ+KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChKU0RP
TVdpbmRvd1NoZWxsKiB3aW5kb3cgPSB0b0pTRE9NV2luZG93U2hlbGwoZG9jdW1lbnQtPmZyYW1l
KCksIGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHdpbmRvdyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHAKaW5kZXggNjNhMmRjNmFjOGIxMjAyZWM2ZThlNDllNzZhNGM2NTYxNmM2ZmRlYS4u
MmUxZDEyNjZlM2MyM2I4MTRkYTk5ZmVmOTgxNTg2ZWQ3OTUzZmYwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKEpTTm9kZSoganNOb2RlLCBOb2Rl
KiBub2RlLCBTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgaXMgZGVz
dHJveWVkLCBpdHMgbG9hZCBldmVudCB3aWxsIG5vdCBmaXJlLgogICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBET00gc2hvdWxkIG1hbmFnZSB0aGlzIGlzc3VlIHdpdGhvdXQgdGhlIGhlbHAgb2Yg
SmF2YVNjcmlwdCB3cmFwcGVycy4KICAgICAgICAgICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQpLmhhc1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KS5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgICAgICAgICAgZWxzZSBpZiAoaXNIVE1MQXVkaW9FbGVtZW50KGVsZW1lbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0b0hUTUxBdWRpb0VsZW1lbnQoZWxlbWVudCkucGF1c2VkKCkp
CisgICAgICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxIVE1MQXVkaW9FbGVtZW50PihlbGVtZW50
KS5wYXVzZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZjgy
ZWQyNzgxYzUwNzI1Y2VkZDE1NDcwMWYwMmRlZGZlMDhjNGVlZi4uNjI2MzIxYzZiODcxY2NjYzdk
ODFmZWEyYjFkY2YwZmRiYjNjNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTY1NSw3ICs2NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUo
Y29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAg
ICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxl
ID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxl
bWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVy
VmlzaWJsZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1
bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlv
bnMuaAppbmRleCAxZGIxOWVjZDYxYTJmZDZjNDMyZTg5NDZlOGM1YjM2NGU3MjEwNjUwLi43ZmE0
ZGM1Yjg5OTBmZWZmZjRiMTcxOWQ0ODAxODA5NTU2ODhmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTg2LDcgKzg2LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIGlzQ2hlY2tlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7CiAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVh
ckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpCisgICAgaWYg
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjE1Yzc5
Y2YzNWI0NzI4ZjA2NzU4YzM0M2NiMDk5NWI5MWU2MmY1YS4uNDI5Yzg0YTE2Njk5ODZkZGNjNTY5
N2I2NmVhOGM5ZjNhYjcxOWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApA
QCAtMTMzOCw3ICsxMzM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICBpZiAoZSAm
JiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsK
ICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9u
cy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8v
IHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2Vy
ZSBleHBsaWNpdGx5IHNpemVkLgotICAgICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlKSB8
fCAhdG9IVE1MSW5wdXRFbGVtZW50KGUpLT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgIGlmICgh
aXNIVE1MSW5wdXRFbGVtZW50KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZSku
aXNJbWFnZUJ1dHRvbigpKQogICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCAxMDNlNjQx
YWM2ZTdjNWViNDBjMTc1MzJlYTAxNDQ1ZjYxMWMxNTJmLi4wNzIwMDM3ZTlhODdkMDM0MGRkMTA5
ODA0NWJkODJhMzIzZWRiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgU3R5bGVTaGVldCogU3R5bGVTaGVldExpc3Q6Oml0ZW0odW5zaWdu
ZWQgaW5kZXgpCiBIVE1MU3R5bGVFbGVtZW50KiBTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElFIGFsc28g
c3VwcG9ydHMgcmV0cmlldmluZyBhIHN0eWxlc2hlZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUv
aWQgb2YgdGhlIDxzdHlsZT4gdGFnCiAgICAgLy8gKHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGFs
bCB0aGUgb3RoZXIgY29sbGVjdGlvbnMpCkBAIC03Nyw4ICs3Nyw4IEBAIEhUTUxTdHlsZUVsZW1l
bnQqIFN0eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAogICAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2Ug
YW55d2F5IDspCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmdldEVsZW1lbnRC
eUlkKG5hbWUpOwogICAgIGlmIChlbGVtZW50ICYmIGlzSFRNTFN0eWxlRWxlbWVudChlbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggYzBmMTgwYzgyNjk4
YjY5ZGE1Y2VmOGNmMmIyYzQ5YjYyMDUwYTkzZi4uMjAzN2JiN2ZiODMzMGQyNjgwYmZlNWMxM2Ew
OTkwODU5NjFiOWRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVy
LmNwcApAQCAtMjc4NSw3ICsyNzg1LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVu
aXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KgogICAgIGlm
IChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICBpZiAo
Y2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPmVsZW1lbnRTdHls
ZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVy
VmlzaWJsZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNzk3LDE0ICsyNzk3
LDE0IEBAIHN0YXRpYyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRl
c3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCoKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHls
ZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXRVbmlxdWUoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQ
bGFjZWhvbGRlclZpc2libGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0
aWMgYm9vbCBpc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1
cm4gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgdG9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICBy
ZXR1cm4gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJs
ZSgpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFz
UGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1cnJlbnRTY3JpcHRJbmNyZW1lbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlci5oCmluZGV4IGY3ZTg0MWE3MGI3NDFjZTE0OWMwODVlMjJmNTY2
ZGI1NDZjOTU5YmMuLjdjNDg4YzA3MTg3MmUyN2RjODM3NWY0MGMwOGU0YTA0NzZlZGI5YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VycmVudFNjcmlwdEluY3JlbWVudGVyLmgKQEAgLTQy
LDcgKzQyLDcgQEAgcHVibGljOgogICAgICAgICAsIG1faXNIVE1MU2NyaXB0RWxlbWVudChpc0hU
TUxTY3JpcHRFbGVtZW50KGVsZW1lbnQpKQogICAgIHsKICAgICAgICAgaWYgKG1faXNIVE1MU2Ny
aXB0RWxlbWVudCkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KHRv
SFRNTFNjcmlwdEVsZW1lbnQoZWxlbWVudCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cHVz
aEN1cnJlbnRTY3JpcHQoZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICB9CiAKICAgICB+Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKaW5kZXggNGNiZmFmMTM1Mzc2ZTVjYzk5YmViOWJlMDJjNjQ5NzIwZWI0ODgw
ZC4uMTljZjljMjJmOGE0NTVhNzM4OGU4ZjNhMDc0MzZjMjg5Y2EwYjBjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFUcmFuc2Zlci5jcHAKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBpbnQgeSkKIAogICAgIENh
Y2hlZEltYWdlKiBpbWFnZTsKICAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgaW1hZ2UgPSB0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCktPmNhY2hlZEltYWdlKCk7CisgICAgICAgIGltYWdlID0g
ZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKmVsZW1lbnQpLmNhY2hlZEltYWdlKCk7CiAgICAg
ZWxzZQotICAgICAgICBpbWFnZSA9IDA7CisgICAgICAgIGltYWdlID0gbnVsbHB0cjsKIAogICAg
IG1fZHJhZ0xvY2F0aW9uID0gSW50UG9pbnQoeCwgeSk7CiAKQEAgLTI3MCw3ICsyNzAsNyBAQCB2
b2lkIERhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBp
bnQgeSkKICAgICAgICAgbV9kcmFnSW1hZ2VMb2FkZXItPnN0YXJ0TG9hZGluZyhtX2RyYWdJbWFn
ZSk7CiAgICAgfQogCi0gICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gaW1hZ2UgPyAwIDogZWxlbWVu
dDsKKyAgICBtX2RyYWdJbWFnZUVsZW1lbnQgPSBpbWFnZSA/IG51bGxwdHIgOiBlbGVtZW50Owog
CiAgICAgdXBkYXRlRHJhZ0ltYWdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0
MmQwZTBkYWUyMzhkZTBhN2Y2N2EzOTM1NDFiYjY1MzI3OGExOGZjLi5lMGE3MDYxNGQ1NzRjYTlj
YzY0YzJmMmU3M2M1ZGZiMTJiOGU5MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE1
NTEsOCArMTU1MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0
bGUpCiAgICAgLy8gVGhlIERPTSBBUEkgaGFzIG5vIG1ldGhvZCBvZiBzcGVjaWZ5aW5nIGRpcmVj
dGlvbiwgc28gYXNzdW1lIExUUi4KICAgICB1cGRhdGVUaXRsZShTdHJpbmdXaXRoRGlyZWN0aW9u
KHRpdGxlLCBMVFIpKTsKIAotICAgIGlmIChtX3RpdGxlRWxlbWVudCAmJiBpc0hUTUxUaXRsZUVs
ZW1lbnQobV90aXRsZUVsZW1lbnQuZ2V0KCkpKQotICAgICAgICB0b0hUTUxUaXRsZUVsZW1lbnQo
bV90aXRsZUVsZW1lbnQuZ2V0KCkpLT5zZXRUZXh0KHRpdGxlKTsKKyAgICBpZiAobV90aXRsZUVs
ZW1lbnQgJiYgaXNIVE1MVGl0bGVFbGVtZW50KCptX3RpdGxlRWxlbWVudCkpCisgICAgICAgIGRv
d25jYXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkuc2V0VGV4dCh0aXRsZSk7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlRWxlbWVudChjb25zdCBTdHJpbmdXaXRoRGly
ZWN0aW9uJiB0aXRsZSwgRWxlbWVudCogdGl0bGVFbGVtZW50KQpAQCAtMjg4MSw3ICsyODgxLDcg
QEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNldENvb2tpZSB3
b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4u
Lj4KICAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vIEV4Y2Vw
dGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9yZWQuCi0gICAgICAgICAgICB0b0hU
TUxEb2N1bWVudCh0aGlzKS0+c2V0Q29va2llKGNvbnRlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICAgICAgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqdGhpcykuc2V0Q29va2llKGNvbnRl
bnQsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC00
NjUyLDE0ICs0NjUyLDE0IEBAIGNvbnN0IFZlY3RvcjxJY29uVVJMPiYgRG9jdW1lbnQ6Omljb25V
UkxzKGludCBpY29uVHlwZXNNYXNrKQogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuLT5p
dGVtKGkpOwogICAgICAgICBpZiAoIWNoaWxkLT5oYXNUYWdOYW1lKGxpbmtUYWcpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSB0
b0hUTUxMaW5rRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGlmICghKGxpbmtFbGVtZW50LT5pY29u
VHlwZSgpICYgaWNvblR5cGVzTWFzaykpCisgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0Vs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KCpjaGlsZCk7CisgICAgICAgIGlmICgh
KGxpbmtFbGVtZW50Lmljb25UeXBlKCkgJiBpY29uVHlwZXNNYXNrKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAobGlua0VsZW1lbnQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAg
ICAgIGlmIChsaW5rRWxlbWVudC5ocmVmKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gUHV0IGl0IGF0IHRoZSBmcm9udCB0byBlbnN1cmUgdGhhdCBpY29u
cyBzZWVuIGxhdGVyIHRha2UgcHJlY2VkZW5jZSBhcyByZXF1aXJlZCBieSB0aGUgc3BlYy4KLSAg
ICAgICAgSWNvblVSTCBuZXdVUkwobGlua0VsZW1lbnQtPmhyZWYoKSwgbGlua0VsZW1lbnQtPmlj
b25TaXplcygpLCBsaW5rRWxlbWVudC0+dHlwZSgpLCBsaW5rRWxlbWVudC0+aWNvblR5cGUoKSk7
CisgICAgICAgIEljb25VUkwgbmV3VVJMKGxpbmtFbGVtZW50LmhyZWYoKSwgbGlua0VsZW1lbnQu
aWNvblNpemVzKCksIGxpbmtFbGVtZW50LnR5cGUoKSwgbGlua0VsZW1lbnQuaWNvblR5cGUoKSk7
CiAgICAgICAgIG1faWNvblVSTHMuYXBwZW5kKG5ld1VSTCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4YjZjMWU2ZmU1NmQ3NzFjMGMy
ZmFlMmJkNWI2NTk3MDIwN2E4MDUuLjc3ZWVjM2I3NWY0OWE4MDAyNGQ2YjA5MTE1YzIzYTE5ZmQy
OWIzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC01
MywxOCArNTMsMTggQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hlc05hbWUoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogCiBpbmxpbmUgYm9vbCBrZXlN
YXRjaGVzTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgdG9I
VE1MTWFwRWxlbWVudChlbGVtZW50KS5nZXROYW1lKCkuaW1wbCgpID09ICZrZXk7CisgICAgcmV0
dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+
KGVsZW1lbnQpLmdldE5hbWUoKS5pbXBsKCkgPT0gJmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5
TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVt
ZW50KSAmJiB0b0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwo
KSA9PSAma2V5OworICAgIHJldHVybiBpc0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpICYmIGRvd25j
YXN0PEhUTUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkubG93ZXIoKS5pbXBsKCkgPT0g
JmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8v
IEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxkIG1hdGNoIGJvdGggaW1h
Z2UgYW5kIG9iamVjdCBlbGVtZW50cy4KLSAgICByZXR1cm4gaXNIVE1MSW1hZ2VFbGVtZW50KGVs
ZW1lbnQpICYmIHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5tYXRjaGVzTG93ZXJjYXNlZFVz
ZW1hcChrZXkpOworICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkubWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAo
a2V5KTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE2OCwy
MiArMTY4LDIyIEBAIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TmFt
ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBE
b2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiB0
b0hUTUxNYXBFbGVtZW50KGdldDxrZXlNYXRjaGVzTWFwTmFtZT4oa2V5LCBzY29wZSkpOworICAg
IHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZ2V0PGtleU1hdGNoZXNNYXBOYW1lPihr
ZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwg
Y29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxl
bWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3BlKSk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRN
YXBOYW1lPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50T3Jk
ZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
SFRNTEltYWdlRWxlbWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXA+KGtleSwgc2Nv
cGUpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZ2V0PGtleU1hdGNo
ZXNMb3dlcmNhc2VkVXNlbWFwPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxMYWJlbEVsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewot
ICAgIHJldHVybiB0b0hUTUxMYWJlbEVsZW1lbnQoZ2V0PGtleU1hdGNoZXNMYWJlbEZvckF0dHJp
YnV0ZT4oa2V5LCBzY29wZSkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MTGFiZWxFbGVtZW50
PihnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKSk7CiB9CiAKIEVs
ZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
LmNwcAppbmRleCBkN2E5ZDY2NjczYTZhZTNlYjAxMzFmZjAzYTNmYjMwNDBlZTBkNmNmLi42MWQ5
OWE3MWM0YjljMTk2MDM4NjRjY2IyMDI5YWM4MDBjN2I0OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yODYsNyAr
Mjg2LDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZl
U3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKICAgICAgICAgICAgIGJvb2wgZW5hYmxl
ZFZpYVNjcmlwdCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzSFRNTExpbmtFbGVtZW50KGVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGxp
bmtFbGVtZW50LmlzRGlzYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgZW5hYmxlZFZpYVNjcmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZp
YVNjcmlwdCgpOwpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTCiAg
ICAgICAgICAgICBpZiAoaXNTVkdTdHlsZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgc2hlZXQgPSBkb3duY2FzdDxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICBzaGVldCA9IHRvSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpLnNoZWV0KCk7CisgICAg
ICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpLnNo
ZWV0KCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQgPSB0b0hUTUxT
dHlsZUVsZW1lbnQoZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRv
d25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKICAgICAg
ICAgICAgIC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0
aGFuCiAgICAgICAgICAgICAvLyBQRVJTSVNURU5UKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCAzZTA2ZWQ3MGMyNTE1YTI4NTRjNTc3YTBhNjI0N2YzM2Q3YjE1ZWE2Li45MWZlMmE4NWFjN2Ix
NTYwYTljNTAxNmVkZDA4ODcxMWExNTk4ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50
UmFyZURhdGEoKS0+Y2xlYXJDbGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRy
ZWVTY29wZSogbmV3U2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRN
TERvY3VtZW50KiBuZXdEb2N1bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAm
JiBuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1
bWVudCgmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1
bWVudCogbmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgbmV3
U2NvcGUtPmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVudCgpID8gZG93bmNhc3Q8SFRNTERv
Y3VtZW50PigmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgIGlmIChu
ZXdTY29wZSAhPSAmdHJlZVNjb3BlKCkpCiAgICAgICAgIG5ld1Njb3BlID0gbnVsbHB0cjsKIApA
QCAtMTM4MSw3ICsxMzgxLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJiBpbnNlcnRpb25Qb2ludCkKIAogICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0luVHJlZVNj
b3BlKCkpIHsKICAgICAgICAgVHJlZVNjb3BlKiBvbGRTY29wZSA9ICZpbnNlcnRpb25Qb2ludC50
cmVlU2NvcGUoKTsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVudCA9IGluRG9jdW1l
bnQoKSAmJiBvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hU
TUxEb2N1bWVudCgmb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgICAg
ICBIVE1MRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVudCgpICYmIG9sZFNjb3BlLT5k
b2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IGRvd25jYXN0PEhUTUxEb2N1bWVudD4o
Jm9sZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKG9sZFNj
b3BlICE9ICZ0cmVlU2NvcGUoKSB8fCAhaXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgb2xk
U2NvcGUgPSBudWxscHRyOwogCkBAIC0yNTkwLDcgKzI1OTAsNyBAQCBpbmxpbmUgdm9pZCBFbGVt
ZW50Ojp1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkb2N1bWVudCgpLmlzSFRNTERvY3Vt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQodG9IVE1M
RG9jdW1lbnQoZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOworICAgIHVwZGF0ZU5hbWVG
b3JEb2N1bWVudChkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KCkpLCBvbGROYW1lLCBu
ZXdOYW1lKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKFRyZWVT
Y29wZSYgc2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuZXdOYW1lKQpAQCAtMjYzOCw3ICsyNjM4LDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6
dXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXcKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgdXBkYXRlSWRGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVu
dChkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1N
YXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKKyAgICB1cGRhdGVJZEZvckRvY3Vt
ZW50KGRvd25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZElkLCBuZXdJZCwgVXBk
YXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJpYnV0
ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlSWRGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBz
Y29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJ
ZCkKQEAgLTI2ODUsOSArMjY4NSw5IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlTGFiZWwoVHJlZVNj
b3BlJiBzY29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQotICAg
ICAgICBzY29wZS5yZW1vdmVMYWJlbCgqb2xkRm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCAqdG9I
VE1MTGFiZWxFbGVtZW50KHRoaXMpKTsKKyAgICAgICAgc2NvcGUucmVtb3ZlTGFiZWwoKm9sZEZv
ckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKnRoaXMp
KTsKICAgICBpZiAoIW5ld0ZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgc2Nv
cGUuYWRkTGFiZWwoKm5ld0ZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRvSFRNTExhYmVsRWxl
bWVudCh0aGlzKSk7CisgICAgICAgIHNjb3BlLmFkZExhYmVsKCpuZXdGb3JBdHRyaWJ1dGVWYWx1
ZS5pbXBsKCksIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KCp0aGlzKSk7CiB9CiAKIHZvaWQg
RWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVl
KQpAQCAtMjc0MSwxMSArMjc0MSwxMCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBFbGVt
ZW50OjplbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eQogICAgIGlm
IChIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGNhY2hlZEhUTUxDb2xsZWN0aW9uKHR5cGUp
KQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbjsKIAotICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gY29sbGVjdGlvbjsKICAgICBpZiAodHlwZSA9PSBUYWJsZVJvd3MpIHsKLSAgICAgICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlv
bjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4odG9IVE1MVGFibGVFbGVtZW50KCp0aGlzKSwgdHlw
ZSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFk
ZENhY2hlZENvbGxlY3Rpb248SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+KGRvd25jYXN0PEhUTUxU
YWJsZUVsZW1lbnQ+KCp0aGlzKSwgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFNlbGVj
dE9wdGlvbnMpIHsKLSAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxp
c3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KHRvSFRNTFNl
bGVjdEVsZW1lbnQoKnRoaXMpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24+KGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqdGhpcyksIHR5cGUpOwogICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBGb3JtQ29udHJvbHMpIHsKICAgICAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoZm9ybVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogICAgICAgICByZXR1cm4g
ZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uPigqdGhpcywgdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGFhMWEwMGFjNjllMDk3YTgwMDY3OWNjMTJhZTM5ODM1
MWIwYTY1MDIuLjQwOTRmMzNjOTIyZGY1MDFkNDk1ZWYzNWRlMjkxYWFkNThkMDA3NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zNTcsMTcgKzM1NywxNyBAQCBi
b29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQ
dHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBjbGlja0hh
bmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlLmdldCgpKSkKLSAg
ICAgICAgdG9IVE1MSW5wdXRFbGVtZW50KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQs
IGNsaWNrSGFuZGxpbmdTdGF0ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAK
ICAgICBpZiAoIWV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgZGlzcGF0Y2hFdmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5k
b3dFdmVudENvbnRleHQpOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCgmZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgw
KTsKKyAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKICAgICBldmVudC0+c2V0
RXZlbnRQaGFzZSgwKTsKIAogICAgIGlmIChjbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0g
ICAgICAgIHRvSFRNTElucHV0RWxlbWVudCgqbm9kZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpl
dmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdT
dGF0ZSk7CiAKICAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBE
T00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCiAgICAgLy8gZGVmYXVsdCBoYW5k
bGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVy
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggNjA5NmM1ODQxZmZjOTg2
NWY5MGZmMjJmODNjYjE2NzcyNTA5NDMyYi4uZTMwNTZjMzYwMTI0OWVlMzllMzE4MjdjYWQyY2I4
OGVjYTI2YWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMzgzLDcg
KzM4Myw3IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKIFNj
cmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICBpZiAoaXNIVE1MU2NyaXB0RWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJu
IHRvSFRNTFNjcmlwdEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MU2NyaXB0RWxlbWVudD4oZWxlbWVudCk7CiAKICAgICBpZiAoaXNTVkdTY3JpcHRFbGVtZW50
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU2NyaXB0RWxlbWVudD4oZWxl
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggNzViOTY4
OWM4MGQzN2Y1NDdlYmVmZTU0N2ZmNDE1Mzk1ZGUxNTQ2Zi4uNGMyMmQwMDczNmRmZmUwMzI1ZTFi
YTExYzA4ODk2MDRkZTYyZWUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRl
LmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVT
dHlsZUZvckFsbExpbmtzKCkKIGlubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXNI
VE1MQW5jaG9yRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTEFuY2hvckVs
ZW1lbnQoZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CiAgICAgaWYg
KGNvbnN0IEF0b21pY1N0cmluZyogYXR0cmlidXRlID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudC5iYXNlVVJM
KCksICphdHRyaWJ1dGUpOwogICAgIHJldHVybiAwOwpAQCAtMTAxLDcgKzEwMSw3IEBAIEVJbnNp
ZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1l
bnQmIGVsZW1lbnQpCiAKICAgICBMaW5rSGFzaCBoYXNoOwogICAgIGlmIChpc0hUTUxBbmNob3JF
bGVtZW50KGVsZW1lbnQpKQotICAgICAgICBoYXNoID0gdG9IVE1MQW5jaG9yRWxlbWVudChlbGVt
ZW50KS52aXNpdGVkTGlua0hhc2goKTsKKyAgICAgICAgaGFzaCA9IGRvd25jYXN0PEhUTUxBbmNo
b3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBlbHNlCiAgICAgICAg
IGhhc2ggPSBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goZWxlbWVudC5kb2N1bWVudCgpLmJhc2VV
UkwoKSwgKmF0dHJpYnV0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtl
X25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNDViOGRi
NTE4ZDg4NGU3NDQ2ZmM2MzU4ZDlmM2JmMWM5ZmIyOGJlOS4uNGRkZWRjMTdjODkyOWY4ODhjMmVj
ZWJkNzI2Y2Q2YmVkODI1ODQzZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2Vf
bmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTY2Niwx
NCArNjY2LDYgQEAgc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFy
Z1R5cGU+IHsKIH07CiBFTkQKICAgICAgICAgOwotICAgICAgICBpZiAoJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfSBlcSAiSFRNTCIpIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKLS8vIEZJWE1F
OiBSZW1vdmUgdGhlc2UgbWFjcm9zIG9uY2UgdGhlIGNvZGUgaGFzIGJlZW4gcG9ydGVkIHRvIHVz
aW5nCi0vLyBkb3duY2FzdDwqRWxlbWVudD4oKS4KLSNkZWZpbmUgdG8kY2xhc3MoeCkgV2ViQ29y
ZTo6ZG93bmNhc3Q8V2ViQ29yZTo6JGNsYXNzPih4KQotRU5ECi0gICAgICAgICAgICA7Ci0gICAg
ICAgIH0KICAgICAgICAgcHJpbnQgRiAiXG4iOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCBiMmU1ZDNhODAwM2VlNGEwYTQ4OGFhNWE1NWEwZjFmMGJkY2Y1M2UwLi5l
OTBmZGZhMzNkYzI0ZmI1MzJjMTQ4YTlmNDMyYmI2MWMzNDkyOTQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6
OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogICAgIC8vIElmIHRoZSB0YXJnZXQg
aXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBv
ZiBpdHMgc2hhZG93IHRyZWUsCiAgICAgLy8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBm
b3IgdGhhdCB0ZXh0IGNvbnRyb2wuCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHRGb3JtQ29udHJvbE9mU2VsZWN0aW9uU3RhcnQgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
c2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
RnJvbUNvbnRyb2xPZlRhcmdldCA9IGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmV2ZW50
LT50YXJnZXQoKS0+dG9Ob2RlKCkpID8gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpKSA6IG51bGxwdHI7CisgICAgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQqIHRleHRGcm9tQ29udHJvbE9mVGFyZ2V0ID0gaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgqZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgPyBkb3duY2FzdDxIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudD4oZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgOiBudWxscHRyOwog
ICAgIGlmICh0ZXh0RnJvbUNvbnRyb2xPZlRhcmdldCAmJiAoc2VsZWN0aW9uLnN0YXJ0KCkuaXNO
dWxsKCkgfHwgdGV4dEZyb21Db250cm9sT2ZUYXJnZXQgIT0gdGV4dEZvcm1Db250cm9sT2ZTZWxl
Y3Rpb25TdGFydCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0ZXh0RnJv
bUNvbnRyb2xPZlRhcmdldC0+c2VsZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVNlbGVjdGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgc2VsZWN0aW9uLmlzRGlyZWN0aW9u
YWwoKSk7CkBAIC0zMjEsMTggKzMyMSwxOCBAQCBib29sIEVkaXRvcjo6Y2FuQ3V0KCkgY29uc3QK
IHN0YXRpYyBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudC5pc0ltYWdlRG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IEhUTUxFbGVtZW50KiBib2R5ID0gZG9jdW1lbnQuYm9keSgpOwogICAgIGlmICghYm9keSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUq
IG5vZGUgPSBib2R5LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFpc0hUTUxJbWFnZUVsZW1l
bnQobm9kZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0hUTUxJbWFnZUVsZW1l
bnQobm9kZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50Pihub2RlKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25z
dApAQCAtMzUzMywxOCArMzUzMywxOCBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIHsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoIW5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0T3JMaW5lQnJlYWsoKSkK
ICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCgqbm9kZSkpCi0gICAgICAgICAgICBub2RlID0gdG9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudChub2RlKS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkudmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSku
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBlbHNlIGlmIChub2Rl
LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAwZTNmM2ZlMDM5YzA3ZDVhMjFmMTkwNWQ5
ZmVkMDUyODQ2MDAzZjQyLi44ZGI3MmNmOWFjYWQyZDlkZjI0NGQyZjY0MWJlMTU0MTgyOGMwMGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTY3MCwx
NiArMTY3MCwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAKICAgICBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmIChmb2N1c2Vk
RWxlbWVudCAmJiBmb2N1c2VkRWxlbWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVu
dChkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChzZWxlY3RFbGVtZW50
LT5jYW5TZWxlY3RBbGwoKSkgewotICAgICAgICAgICAgc2VsZWN0RWxlbWVudC0+c2VsZWN0QWxs
KCk7CisgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGlzSFRNTFNlbGVjdEVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CisgICAgICAgIGlm
IChzZWxlY3RFbGVtZW50LmNhblNlbGVjdEFsbCgpKSB7CisgICAgICAgICAgICBzZWxlY3RFbGVt
ZW50LnNlbGVjdEFsbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwotICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFyZ2V0
ID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4gcm9vdDsKKyAgICBOb2RlKiBzZWxlY3RTdGFydFRhcmdl
dCA9IG51bGxwdHI7CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsK
ICAgICAgICAgcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7
CiAgICAgICAgIGlmIChOb2RlKiBzaGFkb3dSb290ID0gbV9zZWxlY3Rpb24ubm9uQm91bmRhcnlT
aGFkb3dUcmVlUm9vdE5vZGUoKSkKQEAgLTE2ODksNyArMTY4OSw3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEFsbCgpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fc2VsZWN0aW9u
LmlzTm9uZSgpICYmIGZvY3VzZWRFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAoZm9jdXNlZEVs
ZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICB0b0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KGZvY3VzZWRFbGVtZW50KS0+c2VsZWN0KCk7CisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVu
dCkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcm9vdCA9IGZvY3VzZWRFbGVtZW50LT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290
Tm9kZSgpOwpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2Nh
bkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiAgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMu
ZnJvbSgqc3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gKml0OwogICAgICAgICBpZiAoaXNIVE1M
Rm9ybUVsZW1lbnQoJmVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVt
ZW50KCZlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1l
bnQ+KCZlbGVtZW50KTsKICAgICAgICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVu
dCkuZm9ybSgpOwogICAgICAgICBpZiAoaXNIVE1MRnJhbWVFbGVtZW50QmFzZShlbGVtZW50KSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCAy
MTVhYTdhZWUyMDVlMmU1OGY3YTdjZTMxYzJmMjNjNTE5NjZmMmJiLi4xOGU1ODk0ZDJjYjFjNWY0
YWUxZjRlMjI5Mzk0OGU5NmIzMTczN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9k
ZSogbm9kCiAKICAgICBpZiAoISh0YXJnZXROb2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyh0YXJnZXROb2RlKSkpIHsKICNpZiBFTkFCTEUo
VEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFz
VGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQodGFyZ2V0Tm9kZSku
Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJnZXROb2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyBk
b3duY2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50Pih0YXJnZXROb2RlKS5jb250ZW50KCktPmZpcnN0
Q2hpbGQoKSA6IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2Vsc2UKICAgICAgICAgTm9kZSog
Y3VycmVudCA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDBiMDI0
NjI3MmQ5NTU3MmUyNDJlNjAwZWJlNDdkZmE3YTY3NTE0OWQuLmJkNTM2ZjA3OWYyMWZhY2U4M2Jk
ZTRiZjgzODM2MDcxYjEyZjcxOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMjczLDcgKzEyNzMsNyBAQCBib29sIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNs
b3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVt
ZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bh
c3N3b3JkRmllbGQoKSkKKyAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50
KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wp
LmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERpc2FibGUgc21h
cnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA0MDIyNWYwNmZh
YzZlY2VjMzg3ZmU1NGQxMmRhYmM0NTc2NmYyMjY0Li5iYTgzMjVmNTZjZWE0OWE4YzFjNTY4YWFi
MDBkYzRiOGRkNTU4MTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5jcHAKQEAgLTY1OCwxMyArNjU4LDEzIEBAIEVsZW1lbnQqIFZpc2libGVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogCiBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpu
b25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRh
cnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRl
ZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVl
Um9vdE5vZGUoKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdAogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0
ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAgICByZXR1
cm4gdGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hU
TUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1
cm4gdGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpOwog
fQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCmluZGV4IDhiYjc0OTZiOTVlMjQwMjIxZjRlN2E2YjNkMzg5YmY0MTdkMjgz
NzMuLjI0YmE1ZTFhMDIyNGU1MDk3MGQ4OTcwMzQ0ZmI3ODYxNjhhMTAyODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTIwMzUsNyArMjAz
NSw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSAiZGVjaW1h
bCI7CiAgICAgICAgIGxpc3QgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRMaXN0IGFsbG9jXSBp
bml0V2l0aE1hcmtlckZvcm1hdDpTdHJpbmcoInsiICsgbGlzdFN0eWxlVHlwZSArICJ9Iikgb3B0
aW9uczowXSk7CiAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSB0b0hUTUxPTGlzdEVsZW1l
bnQoZWxlbWVudCkuc3RhcnQoKTs7CisgICAgICAgICAgICBOU0ludGVnZXIgc3RhcnRpbmdJdGVt
TnVtYmVyID0gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oZWxlbWVudCkuc3RhcnQoKTsKICAg
ICAgICAgICAgIFtsaXN0IHNldFN0YXJ0aW5nSXRlbU51bWJlcjpzdGFydGluZ0l0ZW1OdW1iZXJd
OwogICAgICAgICB9CiAgICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsK
QEAgLTIwNDMsNyArMjA0Myw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgX2FkZFF1b3RlRm9y
RWxlbWVudChlbGVtZW50LCBZRVMsIF9xdW90ZUxldmVsKyspOwogICAgIH0gZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1l
bnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50
KTsKICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQudHlwZSgpID09ICJ0ZXh0IikgewogICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSgpOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3RoXSA+IDApCkBAIC0yMDUyLDcg
KzIwNTIsNyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCBOU0ludGVnZXIgZGVwdGgpCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKICAgICAgICAgaWYgKGlzSFRNTFRleHRBcmVh
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4
dEFyZWFFbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAg
ICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dEFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB0
ZXh0QXJlYUVsZW1lbnQudmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUg
bGVuZ3RoXSA+IDApCiAgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAwYWFjYWQ0NTdmMDUw
YjA0MmVmYzZjYWMwNDhkNTdiZmY4Y2QwODdjLi5lMGViMzY5YzI0M2IwMGYyZDg0MjhjMDAyZTA0
N2I2ODNlOWRkZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBA
IC0xODEsMTIgKzE4MSwxMiBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5n
ZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgICAgICByZXR1
cm47CiAKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGZvY3VzZWRFbGVt
ZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCAoZm9jdXNlZEVsZW1lbnQtPmhhc1RhZ05h
bWUoaW5wdXRUYWcpICYmCi0gICAgICAgICh0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNlZEVsZW1l
bnQpLT5pc1RleHRGaWVsZCgpIHx8Ci0gICAgICAgICB0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpLT5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKKyAgICBpZiAoZm9jdXNlZEVsZW1lbnQg
JiYgKGlzSFRNTFRleHRBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkgfHwgKGlzSFRNTElucHV0
RWxlbWVudChmb2N1c2VkRWxlbWVudCkKKyAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQorICAgICAgICAgICAgfHwgZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkp
KSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdG9IVE1MRWxlbWVudChmb2N1c2VkRWxlbWVu
dCktPnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKKyAgICAgICAgdG9IVE1MRWxl
bWVudCgqZm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsK
ICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmMyMmJm
ZTI4YTEwNGViYWYxNTQ2MDFkZmU4Yzk4ODliMmYyMWVkZC4uNDNlNjk1NzM0MGFkYmU0NTZiZmNi
ZmNiMzQ1ZmM3MGM4YmU0ODgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzQ2
LDcgKzc0Niw3IEBAIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSogbm9kZSkKICAgICBpZiAo
IWlzSFRNTERpdkVsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhU
TUxEaXZFbGVtZW50JiBlbGVtZW50ID0gdG9IVE1MRGl2RWxlbWVudCgqbm9kZSk7CisgICAgSFRN
TERpdkVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRGl2RWxlbWVudD4oKm5vZGUpOwog
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCmluZGV4IDJlMmQ5YmQzYjBhM2Ri
ZTRjODIyNmU2MDk1Yjc3YjBhMDgwZDAyOGQuLmVhOTEzMTE4YTA5N2MzZDAyYjNkY2YzNjgwMTE4
MzAwOGI4MWYxNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCkBAIC0y
MjgsNyArMjI4LDcgQEAgVmVjdG9yPENvbG9yPiBDb2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMo
KSBjb25zdAogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRh
dGFMaXN0KCk7CiAgICAgaWYgKGRhdGFMaXN0KSB7CiAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gb3B0aW9ucyA9IGRhdGFMaXN0LT5vcHRpb25zKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50
KG9wdGlvbnMtPml0ZW0oaSkpOyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
SFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pihv
cHRpb25zLT5pdGVtKGkpKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1Zh
bGlkVmFsdWUob3B0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIENvbG9yIGNvbG9yKG9wdGlvbi0+dmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDM1ZTMyZDM4MTRlMDdjMGExYWY2
MzExMDIwODFmNGU3MjhhOWM3M2YuLmQ2ZjE0ZDczNTM1MzIzNjkxZmM5NmY4YjBmOGZjZjNiMzg2
ODhmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
CkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6bG9h
ZERvY3VtZW50VGVtcGxhdGUoKQogICAgIGVsc2UgaWYgKCFpc0hUTUxUYWJsZUVsZW1lbnQodGFi
bGVFbGVtZW50LmdldCgpKSkKICAgICAgICAgTE9HX0VSUk9SKCJFbGVtZW50IG9mIGlkIFwiZnRw
RGlyZWN0b3J5VGFibGVcIiBpcyBub3QgYSB0YWJsZSBlbGVtZW50Iik7CiAgICAgZWxzZSAKLSAg
ICAgICAgbV90YWJsZUVsZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50Lmdl
dCgpKTsKKyAgICAgICAgbV90YWJsZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50
Pih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogCiAgICAgLy8gQmFpbCBpZiB3ZSBmb3VuZCB0aGUgdGFi
bGUgZWxlbWVudAogICAgIGlmIChtX3RhYmxlRWxlbWVudCkKQEAgLTMxMSw3ICszMTEsNyBAQCBi
b29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAK
ICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIG9uZSBtYW51YWxseQogICAgIHRhYmxlRWxlbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKLSAgICBtX3RhYmxl
RWxlbWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQuZ2V0KCkpOworICAgIG1f
dGFibGVFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50Lmdl
dCgpKTsKICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRy
LCAiZnRwRGlyZWN0b3J5VGFibGUiKTsKIAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSB0
YWJsZSBlbGVtZW50LCBsZXRzIHRyeSB0byBhcHBlbmQgb3VyIG93biB0byB0aGUgYm9keQpAQCAt
MzM2LDcgKzMzNiw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZUJh
c2ljRG9jdW1lbnQoKQogICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKGJvZHlFbGVtZW50LCBJ
R05PUkVfRVhDRVBUSU9OKTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBk
b2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhYmxlVGFnLCBmYWxzZSk7Ci0gICAgbV90YWJsZUVs
ZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50LmdldCgpKTsKKyAgICBtX3Rh
YmxlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlRWxlbWVudC5nZXQo
KSk7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwg
ImZ0cERpcmVjdG9yeVRhYmxlIik7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnN0eWxlQXR0ciwgIndpZHRoOjEwMCUiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDQ0ZWUwNTA3YWQ3NWU0NmY2NGY1
YThhZTJhMGYwNDdkODEwYjA2NzUuLjlkZjQwNTk4OTI0OThjZWRjZjIzNmRjNDZhY2VhM2RhMTAz
ZDExYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5j
cHAKQEAgLTk2LDEwICs5NiwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6ZmluZEFzc29jaWF0ZWRGb3JtKGNvbnN0IEhUTUxFbGVtZW50KiBlbAogICAgICAgICAv
LyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVx
dWFsIHRvCiAgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0
IHRoZSByZXN1bHQgb2YKICAgICAgICAgLy8gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoKSBv
dmVyIHRoZSBnaXZlbiBlbGVtZW50LgotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0g
PSAwOworICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSBudWxscHRyOwogICAgICAg
ICBFbGVtZW50KiBuZXdGb3JtQ2FuZGlkYXRlID0gZWxlbWVudC0+dHJlZVNjb3BlKCkuZ2V0RWxl
bWVudEJ5SWQoZm9ybUlkKTsKICAgICAgICAgaWYgKG5ld0Zvcm1DYW5kaWRhdGUgJiYgaXNIVE1M
Rm9ybUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSkpCi0gICAgICAgICAgICBuZXdGb3JtID0gdG9I
VE1MRm9ybUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBuZXdGb3JtID0g
ZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0
dXJuIG5ld0Zvcm07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCmluZGV4IGYxNjBhMmI4MWQxNDY0NjlkMWNlYWNmMmJmYTg5ZDljNTJiMTk4NDEuLjM0
YWZlYjlmODlmZDNmMjM4MTk4NDU0N2M3MDI0NzMwNWI4ZDM4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNjEsMTYgKzE2MSwxNiBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZl
bnQqIGV2ZW50KQogICAgIGlmICghaXNIVE1MSW1hZ2VFbGVtZW50KHRhcmdldCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHRvSFRNTElt
YWdlRWxlbWVudCh0YXJnZXQpOwotICAgIGlmICghaW1hZ2VFbGVtZW50IHx8ICFpbWFnZUVsZW1l
bnQtPmlzU2VydmVyTWFwKCkpCisgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2VFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKnRhcmdldCk7CisgICAgaWYgKCFpbWFnZUVsZW1l
bnQuaXNTZXJ2ZXJNYXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpbWFnZUVsZW1l
bnQtPnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFn
ZSgpKQorICAgIGlmICghaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC5y
ZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJJ
bWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7
CisgICAgUmVuZGVySW1hZ2UmIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZSgqaW1hZ2VFbGVtZW50
LnJlbmRlcmVyKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3Mg
dHJ1ZSBmb3IgdXNlVHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24g
PSByZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50
KS0+cGFnZVgoKSwgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVkoKSkpOworICAgIEZsb2F0UG9p
bnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50
KHRvTW91c2VFdmVudChldmVudCktPnBhZ2VYKCksIHRvTW91c2VFdmVudChldmVudCktPnBhZ2VZ
KCkpKTsKICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJz
b2x1dGVQb3NpdGlvbi55KCk7CiAgICAgdXJsLmFwcGVuZCgnPycpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXJlYUVsZW1lbnQuY3BwCmluZGV4IGIzNzk1NmMyMWJjNGE3NTZiMjc5OWE5YmRhMjE1
YTBhN2ZhYjUyYTMuLmRkODRiZGM2ODQwYzdhYjc2OTQxM2ZmZDFmMWEzNzNjMTY5NTc0MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKQEAgLTE4Myw5ICsxODMsOSBA
QCBIVE1MSW1hZ2VFbGVtZW50KiBIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCgpIGNvbnN0
CiB7CiAgICAgTm9kZSogbWFwRWxlbWVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1hcEVs
ZW1lbnQgfHwgIWlzSFRNTE1hcEVsZW1lbnQobWFwRWxlbWVudCkpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxl
bWVudChtYXBFbGVtZW50KS0+aW1hZ2VFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxNYXBFbGVtZW50PigqbWFwRWxlbWVudCkuaW1hZ2VFbGVtZW50KCk7CiB9CiAKIGJvb2wgSFRN
TEFyZWFFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCAzMzI3YWJiYjNhYjliZjI1
ZGNiYWZkYWZhN2U5MzVhOGFjZGVhY2Y3Li45MWJiMjgxZjMxMjRjODgyYTRmNzcwNTcyYTIyNzBk
MjVjOTg5MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMTkx
LDEwICsxOTEsMTAgQEAgaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENv
bGxlY3Rpb24mIGh0bWxDb2xsZWN0aW9uLCBFbGVtZW50JiBlbGUKICAgICBjYXNlIFNlbGVjdE9w
dGlvbnM6CiAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKTsKICAg
ICBjYXNlIFNlbGVjdGVkT3B0aW9uczoKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFt
ZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkuc2VsZWN0ZWQoKTsK
KyAgICAgICAgcmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLnNlbGVjdGVkKCk7CiAgICAgY2FzZSBEYXRhTGlz
dE9wdGlvbnM6Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewot
ICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCk7CisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7
CisgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFvcHRpb24uaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgJiYgIW9wdGlvbi52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIGlubGluZSBi
b29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBodG1sQ29sbGVjdGlv
biwgRWxlbWVudCYgZWxlCiAgICAgY2FzZSBNYXBBcmVhczoKICAgICAgICAgcmV0dXJuIGVsZW1l
bnQuaGFzVGFnTmFtZShhcmVhVGFnKTsKICAgICBjYXNlIERvY0FwcGxldHM6Ci0gICAgICAgIHJl
dHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1l
KG9iamVjdFRhZykgJiYgdG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5jb250YWluc0phdmFB
cHBsZXQoKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxl
bWVudD4oZWxlbWVudCkuY29udGFpbnNKYXZhQXBwbGV0KCkpOwogICAgIGNhc2UgRG9jRW1iZWRz
OgogICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFnKTsKICAgICBjYXNl
IERvY0xpbmtzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBmNDY5ZWM1MjM3
NDRiNzVmN2EyZDM0YmQwNDk1NzQxMjgyNzk1NjdjLi5jODcwYzMwNDBhYzlhYzJlM2NiODQ0YmZi
ZTE3YTcxNGNiNTA3MGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzc5
LDcgKzM3OSw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFz
cygpIGNvbnN0CiAKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVu
dCgpOwogICAgIGlmIChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0
IEhUTUxEb2N1bWVudCYgaHRtbERvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpOwor
ICAgICAgICBjb25zdCBIVE1MRG9jdW1lbnQmIGh0bWxEb2N1bWVudCA9IGRvd25jYXN0PEhUTUxE
b2N1bWVudD4oZG9jdW1lbnQpOwogICAgICAgICByZXR1cm4gaHRtbERvY3VtZW50LmluRGVzaWdu
TW9kZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjgsNyArNDI4LDcgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHRoaXM7CiAjaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIGlmIChoYXNUYWdOYW1lKHRlbXBsYXRl
VGFnKSkKLSAgICAgICAgICAgIGNvbnRhaW5lciA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0aGlz
KS0+Y29udGVudCgpOworICAgICAgICAgICAgY29udGFpbmVyID0gZG93bmNhc3Q8SFRNTFRlbXBs
YXRlRWxlbWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKICNlbmRpZgogICAgICAgICByZXBsYWNlQ2hp
bGRyZW5XaXRoRnJhZ21lbnQoKmNvbnRhaW5lciwgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAg
ICAgfQpAQCAtOTIwLDExICs5MjAsMTEgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb24KIFRleHRE
aXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rp
b25hbGl0eVRleHROb2RlKSBjb25zdAogewogICAgIGlmIChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KCp0aGlzKSkgewotICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4
dEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0X2Nhc3Q8SFRNTEVs
ZW1lbnQqPih0aGlzKSk7CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihjb25zdF9jYXN0
PEhUTUxFbGVtZW50Jj4oKnRoaXMpKTsKICAgICAgICAgYm9vbCBoYXNTdHJvbmdEaXJlY3Rpb25h
bGl0eTsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRleHRFbGVtZW50
LT52YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0
eSk7CisgICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVudC52
YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7
CiAgICAgICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQotICAgICAgICAgICAg
KnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/
IHRleHRFbGVtZW50IDogbnVsbHB0cjsKKyAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlID0gaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPyAmdGV4dEVsZW1lbnQgOiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/
IExUUiA6IFJUTDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwCmluZGV4IGNhMjU2NGEyMGQyYTJiNjExMzE4ODdiMjhjNGEyZmFlMTRlZGJlNTYuLjM2NDJi
ODVjYjZjYjU3Mjg1ZDZjZDA3ZTVhYjNlOWE1NDQxMWZhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMTg4LDEyICsxODgsMTIgQEAgYm9vbCBIVE1MRW1i
ZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAog
ICAgIC8vIElmIG15IHBhcmVudCBpcyBhbiA8b2JqZWN0PiBhbmQgaXMgbm90IHNldCB0byB1c2Ug
ZmFsbGJhY2sgY29udGVudCwgSQogICAgIC8vIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgZ2V0
IGEgcmVuZGVyZXIuCi0gICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKLSAgICBp
ZiAocCAmJiBwLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgaWYgKCFwLT5yZW5k
ZXJlcigpKQorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBp
ZiAocGFyZW50ICYmIGlzSFRNTE9iamVjdEVsZW1lbnQocGFyZW50KSkgeworICAgICAgICBpZiAo
IXBhcmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCF0b0hUTUxPYmplY3RFbGVtZW50KHApLT51c2VGYWxsYmFja0NvbnRlbnQoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFwLT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOworICAg
ICAgICBpZiAoIWRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PigqcGFyZW50KS51c2VGYWxsYmFj
a0NvbnRlbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFwYXJlbnQtPnJlbmRlcmVyKCktPmlz
RW1iZWRkZWRPYmplY3QoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRl
eCBkYjUwYjI3YWYzYzBmMzlmMmM4NDY2MjNlNDVhZjJhNDEyYTk3ZmIzLi4wNDYxOWI1ODc4YzM1
YzAxYThkYjQ4YmJhMTdmMjVhN2YyZGIzYjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEhUTUxGaWVsZFNl
dEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKCkgY29uc3QKIAogICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRNTEZp
ZWxkU2V0RWxlbWVudCY+KCp0aGlzKSkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShvYmplY3RUYWcpKQotICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0
b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKTsKKyAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLmFwcGVuZCgmZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAg
ICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
ZWxlbWVudCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCmluZGV4IGEzMWY5MjZlN2E3ZmNkZTVlZDA5OTZmMjJlYjViYTUzNTA4M2Q4
MTkuLjEyYWNmYjNhYzU4MmZlYmI1NDA2OWRhNGYyYjY3MzU0YmVjMDNkMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMTA0LDcgKzEw
NCw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZp
ZWxkc2V0QW5jZXN0b3IoKSBjb25zdAogICAgIEVsZW1lbnQqIHByZXZpb3VzQW5jZXN0b3IgPSBu
dWxscHRyOwogICAgIGZvciAoRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnRFbGVtZW50KCk7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAg
aWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChhbmNlc3RvcikgJiYgYW5jZXN0b3ItPmZhc3RIYXNB
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgewotICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVu
dCYgZmllbGRTZXRBbmNlc3RvciA9IHRvSFRNTEZpZWxkU2V0RWxlbWVudCgqYW5jZXN0b3IpOwor
ICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmllbGRTZXRBbmNlc3RvciA9IGRvd25j
YXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KCphbmNlc3Rvcik7CiAgICAgICAgICAgICBib29sIGlz
SW5GaXJzdExlZ2VuZCA9IHByZXZpb3VzQW5jZXN0b3IgJiYgaXNIVE1MTGVnZW5kRWxlbWVudChw
cmV2aW91c0FuY2VzdG9yKSAmJiBwcmV2aW91c0FuY2VzdG9yID09IGZpZWxkU2V0QW5jZXN0b3Iu
bGVnZW5kKCk7CiAgICAgICAgICAgICByZXR1cm4gIWlzSW5GaXJzdExlZ2VuZDsKICAgICAgICAg
fQpAQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9mb2N1cyhIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBzZXQg
b2YgaGFzVGFnTmFtZSBjaGVja3MgYmUgcmVwbGFjZWQgYnkgYQogICAgIC8vIHZpcnR1YWwgbWVt
YmVyIGZ1bmN0aW9uPwogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCi0gICAg
ICAgIHJldHVybiAhdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLT5pc0lucHV0VHlwZUhpZGRl
bigpOworICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50
KS5pc0lucHV0VHlwZUhpZGRlbigpOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KGtleWdlblRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwCmluZGV4IDc3YWQ3NDIzOGYyZDQzMTBhMmNlZDkyNDhjOGMyYWNjMDY1
YjAwZTcuLjY4YzFkZWVmMjQ3NzMyNzMxZjdlMDUzNmEwMzAwNzVkZGYzZjk3ZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCkBA
IC01NiwxNCArNTYsMTQgQEAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGUKIHsKICAgICBBU1NFUlQo
aXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpIHx8IG93bmVyTm9kZSgpLmhhc1RhZ05hbWUo
ZmllbGRzZXRUYWcpKTsKICAgICBpZiAoaXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpLmFzc29jaWF0ZWRF
bGVtZW50cygpOwotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQob3duZXJOb2RlKCkp
LmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1F
bGVtZW50Pihvd25lck5vZGUoKSkuYXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG93bmVyTm9kZSgpKS5hc3NvY2lhdGVkRWxlbWVu
dHMoKTsKIH0KIAogY29uc3QgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiYgSFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb246OmZvcm1JbWFnZUVsZW1lbnRzKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKTsKLSAgICByZXR1cm4gdG9IVE1MRm9ybUVs
ZW1lbnQob3duZXJOb2RlKCkpLmltYWdlRWxlbWVudHMoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTEZvcm1FbGVtZW50Pihvd25lck5vZGUoKSkuaW1hZ2VFbGVtZW50cygpOwogfQogCiBzdGF0
aWMgdW5zaWduZWQgZmluZEZvcm1Bc3NvY2lhdGVkRWxlbWVudChjb25zdCBWZWN0b3I8Rm9ybUFz
c29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGM4OGVhYzk1MWRlMDI5M2E1
NzE5NzdhYWNhYjIwZjcyN2Y5ZGMzMGEuLjQ1ODliNDc3NzU3ZjZkYjJhM2IwM2M4MmI1ZjYzNWE1
OWM0OWQ4YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTMx
OCw3ICszMTgsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0VGV4dEZpZWxkVmFsdWVzKFN0
cmluZ1BhaXJWZWN0b3ImIGZpZWxkTmFtZXNBbmRWYWx1ZXMpCiAgICAgICAgIEhUTUxFbGVtZW50
JiBlbGVtZW50ID0gY29udHJvbC5hc0hUTUxFbGVtZW50KCk7CiAgICAgICAgIGlmICghaXNIVE1M
SW5wdXRFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlucHV0LmlzVGV4dEZpZWxkKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgZmllbGROYW1lc0FuZFZhbHVlcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoaW5wdXQubmFtZSgpLnN0cmluZygpLCBpbnB1dC52YWx1ZSgpKSk7CkBAIC03NDUsNyAr
NzQ1LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVz
TWFwKEZvcm1OYW1lZEl0ZW0qIGl0ZW0pIGNvbnN0CiAgICAgfQogCiAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oZWxlbWVudC5oYXNUYWdOYW1lKGltZ1RhZykpOwotICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1faW1hZ2VFbGVtZW50cy5maW5kKCZ0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihtX2ltYWdlRWxlbWVudHMuZmluZCgmZG93bmNhc3Q8SFRNTElt
YWdlRWxlbWVudD4oZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKIH0KICNlbHNlCiBpbmxpbmUgdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVzTWFwKEZvcm1OYW1l
ZEl0ZW0qKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNzM4YTkxOThlNzkxZjc5MWUyNGYyN2VmNmIwZGRmZDA0MmM1OWEzZi4uMjhjZjMwMjdiMWM2
YTI4OWVjYTBhNjQ5ZGQ2MDA1YTBiNGRkMzE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCkBAIC0xODMsMTMgKzE4MywxMyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cgogICAgICAgICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICAgICAgYm9vbCB3
aWxsSGF2ZU5hbWUgPSAhdmFsdWUuaXNOdWxsKCk7CiAgICAgICAgICAgICBpZiAoaGFzTmFtZSgp
ICE9IHdpbGxIYXZlTmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHRvSFRN
TERvY3VtZW50KCZ0aGlzLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBIVE1MRG9jdW1l
bnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERvY3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0
cmlidXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5hZGREb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1w
bCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGREb2N1bWVu
dE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRl
bSgqaWQuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5y
ZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUxvYWRlci5jcHAKaW5kZXggMTg3OWRiYzI5NTA0ZWMyMzEzNDc5MmY3MzViNjUwMTgxMmE2YThk
Mi4uZmIzNGM4Y2NkOTIwNjZmNGUwZjAzMzZhODFlNzVkMzIxMmNkNWM1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxJ
bWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQogICAgIH0KIAogICAg
IGlmIChsb2FkRXJyb3IgJiYgaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAg
ICB0b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7
CisgICAgICAgIGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZh
bGxiYWNrQ29udGVudCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAppbmRleCBhOGViYWE5ZDM2ZDYyYTU2ZjA3OTJhMzhlZWFjNWRkM2I5MzgxOTU4Li5l
MmQ1NWUzMzUxNDViYTI5OWNiNzIxZjdkOGRhNzdkNmNiZGU2NTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTE1MTUsMTggKzE1MTUsMTYgQEAgSFRNTEVs
ZW1lbnQqIEhUTUxJbnB1dEVsZW1lbnQ6Omxpc3QoKSBjb25zdAogSFRNTERhdGFMaXN0RWxlbWVu
dCogSFRNTElucHV0RWxlbWVudDo6ZGF0YUxpc3QoKSBjb25zdAogewogICAgIGlmICghbV9oYXNO
b25FbXB0eUxpc3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmICghbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGxp
c3RBdHRyKSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
IWVsZW1lbnQtPmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcpKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIWVsZW1lbnQgfHwgIWlzSFRNTERhdGFMaXN0RWxlbWVudChlbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50KGVs
ZW1lbnQpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50
KTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZXNldExpc3RBdHRyaWJ1dGVUYXJnZXRP
YnNlcnZlcigpCkBAIC0xODU1LDcgKzE4NTMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dHVwRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyhEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzJgog
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGlmIChIVE1MRGF0YUxpc3RFbGVtZW50
KiBkYXRhTGlzdCA9IHRoaXMtPmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQob3B0aW9ucy0+aXRlbShpKSk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KG9wdGlvbnMtPml0ZW0oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghaXNWYWxpZFZhbHVl
KG9wdGlvbi0+dmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBwYXJhbWV0ZXJzLnN1Z2dlc3Rpb25WYWx1ZXMuYXBwZW5kKHNhbml0aXplVmFsdWUob3B0aW9u
LT52YWx1ZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCmlu
ZGV4IDcxNGJkYjJlMWJkOGNhYjNhOGY1YmUxYmNjNzFjZDE0MzI0N2JkODQuLjFmNWQ2N2ZjOTQw
YzU5M2UyZGI2ZTg2ODk5MWFkNDMzMjZiNmIyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEtleWdlbkVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxl
bWVudDo6c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIEhUTUxT
ZWxlY3RFbGVtZW50KiBIVE1MS2V5Z2VuRWxlbWVudDo6c2hhZG93U2VsZWN0KCkgY29uc3QKIHsK
ICAgICBTaGFkb3dSb290KiByb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHJldHVy
biByb290ID8gdG9IVE1MU2VsZWN0RWxlbWVudChyb290LT5maXJzdENoaWxkKCkpIDogMDsKKyAg
ICByZXR1cm4gcm9vdCA/IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihyb290LT5maXJzdENo
aWxkKCkpIDogbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKaW5kZXggNTk3M2JjMjA3MzlkYWFlMmRkNDQyMzRhMGNj
ZTE2MWI5YmUzMGZjYi4uMmZiNGQyNTBmMjUxYjBmZjk1MjlmODdhOGU4ODc4MzFhZDdlZTQyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKQEAgLTc5LDEwICs3
OSwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSgp
IGNvbnN0CiAgICAgLy8gaXRzIHBhcmVudCwgdGhlbiB0aGUgZm9ybSBhdHRyaWJ1dGUgbXVzdCBy
ZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlCiAgICAgLy8gZm9ybSBhdHRyaWJ1dGUgb24gdGhh
dCBmaWVsZHNldCBlbGVtZW50LiBPdGhlcndpc2UsIGl0IG11c3QgcmV0dXJuIG51bGwuCiAgICAg
Q29udGFpbmVyTm9kZSogZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFmaWVsZHNl
dCB8fCAhZmllbGRzZXQtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIWZpZWxkc2V0IHx8ICFpc0hUTUxGaWVsZFNldEVsZW1lbnQoZmllbGRzZXQp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVs
ZW1lbnQoZmllbGRzZXQpLT5mb3JtKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNl
dEVsZW1lbnQ+KCpmaWVsZHNldCkuZm9ybSgpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDNkMjFjNTJhZmE4M2Iz
MjY0NzhlMTZjNGQ5YTJiYzU3YWNkODI4NmEuLmQzNjhiYWRhNWRhMGJhNjJjNjUxYTQ4MTY3NDkz
ZWI3OTJmMjU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApA
QCAtMzg3Niw3ICszODc2LDcgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3Vy
Y2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyoga2UKICAgICB9CiAKICAg
ICBVUkwgbWVkaWFVUkw7Ci0gICAgSFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IDA7CisgICAg
SFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IG51bGxwdHI7CiAgICAgU3RyaW5nIHR5cGU7CiAg
ICAgU3RyaW5nIHN5c3RlbTsKICAgICBib29sIGxvb2tpbmdGb3JTdGFydE5vZGUgPSBtX25leHRD
aGlsZE5vZGVUb0NvbnNpZGVyOwpAQCAtMzg5Nyw3ICszODk3LDcgQEAgVVJMIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0
cmluZyoga2UKICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpICE9IHRoaXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBzb3VyY2UgPSB0b0hUTUxTb3VyY2VFbGVtZW50KCZu
b2RlKTsKKyAgICAgICAgc291cmNlID0gZG93bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+KCZub2Rl
KTsKIAogICAgICAgICAvLyBJZiBjYW5kaWRhdGUgZG9lcyBub3QgaGF2ZSBhIHNyYyBhdHRyaWJ1
dGUsIG9yIGlmIGl0cyBzcmMgYXR0cmlidXRlJ3MgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZyAu
Li4ganVtcCBkb3duIHRvIHRoZSBmYWlsZWQgc3RlcCBiZWxvdwogICAgICAgICBtZWRpYVVSTCA9
IHNvdXJjZS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0cik7CkBAIC00ODgzLDkgKzQ4
ODMsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgaWYg
KGhhc01lZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5lbnRlcmVkRnVs
bHNjcmVlbigpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpc0hUTUxWaWRlb0VsZW1l
bnQodGhpcykpIHsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogYXNWaWRlbyA9IHRvSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKTsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgYXNWaWRlbyA9IGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCku
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRl
b0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoYXNWaWRlbyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRl
b0VsZW1lbnQoJmFzVmlkZW8pOwogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVz
KCkud2Via2l0YmVnaW5mdWxsc2NyZWVuRXZlbnQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4IDY2MDE3NDYwYmNhZTI5
M2E1ZTQ2MmQ3YWI4NjdkMTA5M2FiNTU5ZDkuLmZlZjQxZmRkZTNlY2ZkZTlhNDhjNGFjMTRlZWJi
OTUyZTE5YzA2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAKQEAgLTY2LDE0ICs2NiwxNCBAQCBib29sIFdpbmRvd05hbWVDb2xsZWN0aW9uOjplbGVtZW50
TWF0Y2hlcyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdAogYm9vbCBEb2N1
bWVudE5hbWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hlc0lmSWRBdHRyaWJ1dGVNYXRjaChjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGZpeCBIVE1M
SW1hZ2VFbGVtZW50IHRvIHVwZGF0ZSB0aGUgaGFzaCBtYXAgZm9yIHVzIHdoZW4gbmFtZSBhdHRy
aWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGFw
cGxldFRhZykgfHwgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIHRvSFRNTE9iamVj
dEVsZW1lbnQoZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0oKSkKKyAgICByZXR1cm4gZWxlbWVudC5o
YXNUYWdOYW1lKGFwcGxldFRhZykgfHwgKGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkgJiYg
ZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCkpCiAg
ICAgICAgIHx8IChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5oYXNOYW1l
KCkpOwogfQogCiBib29sIERvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZO
YW1lQXR0cmlidXRlTWF0Y2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
aXNIVE1MRm9ybUVsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYg
dG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpKQorICAgICAgICB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoaXNIVE1MT2JqZWN0RWxlbWVudChl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuaXNEb2NOYW1l
ZEl0ZW0oKSkKICAgICAgICAgfHwgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwogfQogCkBA
IC04NSw4ICs4NSw4IEBAIGJvb2wgRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNo
ZXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljCiAgICAgICAgIHJldHVybiBl
bGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZTsKICAgICBpZiAoZWxlbWVu
dC5oYXNUYWdOYW1lKGFwcGxldFRhZykpCiAgICAgICAgIHJldHVybiBlbGVtZW50LmdldE5hbWVB
dHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSB8fCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkuaW1w
bCgpID09IG5hbWU7Ci0gICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAg
ICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8
IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSkgJiYgdG9IVE1MT2JqZWN0
RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpOworICAgIGlmIChpc0hUTUxPYmplY3RF
bGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0
ZSgpLmltcGwoKSA9PSBuYW1lIHx8IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0g
bmFtZSkgJiYgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJ
dGVtKCk7CiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8IChlbGVtZW50
LmdldElkQXR0cmlidXRlKCkuaW1wbCgpID09IG5hbWUgJiYgZWxlbWVudC5oYXNOYW1lKCkpOwog
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKaW5kZXggOTE3N2VhYTMwZGFmOWM5NThhYTcwNGZlN2JhY2ZhZmZmZDg2ZDVhMS4uYzA1YTQw
NWZmMDJhYjI4YWZlNDI0Y2NmMTFmZGZjNmI5ZmZiMWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTQzNiwyMiArNDM2LDIyIEBAIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCiAgICAgICAgIGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CiAgICAgfQogICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0
ZW0gJiYgaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewotICAg
ICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoJnRoaXMtPmRvY3Vt
ZW50KCkpOworICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERv
Y3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKIAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGlmIChpc05hbWVkSXRlbSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
RG9jdW1lbnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmFkZERvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0
ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZURv
Y3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSAmJiBpZCAhPSBuYW1lKSB7CiAgICAgICAgICAgICBpZiAoaXNO
YW1lZEl0ZW0pCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmFkZERvY3VtZW50TmFtZWRJdGVt
KCpuYW1lLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZERvY3Vt
ZW50TmFtZWRJdGVtKCpuYW1lLmltcGwoKSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBs
KCksICp0aGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVEb2N1bWVudE5hbWVk
SXRlbSgqbmFtZS5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2RvY05h
bWVkSXRlbSA9IGlzTmFtZWRJdGVtOwpAQCAtNDY2LDcgKzQ2Niw3IEBAIGJvb2wgSFRNTE9iamVj
dEVsZW1lbnQ6OmNvbnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0CiAgICAgICAgIGlmIChjaGlsZC5o
YXNUYWdOYW1lKHBhcmFtVGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC5nZXROYW1lQXR0
cmlidXRlKCksICJ0eXBlIikKICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKGNoaWxkLmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShv
YmplY3RUYWcpICYmIHRvSFRNTE9iamVjdEVsZW1lbnQoY2hpbGQpLmNvbnRhaW5zSmF2YUFwcGxl
dCgpKQorICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIGRvd25jYXN0
PEhUTUxPYmplY3RFbGVtZW50PihjaGlsZCkuY29udGFpbnNKYXZhQXBwbGV0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGNoaWxkLmhhc1RhZ05hbWUoYXBwbGV0VGFn
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dEdyb3VwRWxlbWVudC5jcHAKaW5kZXggYzBhYjcwZDhlZTY5OTQ3Y2U0YTk5MmM4MTMzYmFjZThl
MzEwMzBmYS4uOTVkNmFiYzFmZWU2M2JlOTA4NzJhMjUwYzBlMzc2NGUwOGMxZTIxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC04NiwxMCArODYs
MTAgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWMKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6
cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFy
ZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxl
Y3RUYWcpKQorICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0
KSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVj
dCkKLSAgICAgICAgdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRl
bXMoKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3QpLnNldFJl
Y2FsY0xpc3RJdGVtcygpOwogfQogCiBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBM
YWJlbFRleHQoKSBjb25zdApAQCAtMTA3LDEzICsxMDcsMTMgQEAgU3RyaW5nIEhUTUxPcHRHcm91
cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29uc3QKIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRh
aW5lck5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFz
ZWxlY3QtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFpc0hU
TUxTZWxlY3RFbGVtZW50KHNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50
Tm9kZSgpOwogICAgIAogICAgIGlmICghc2VsZWN0KQotICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChz
ZWxlY3QpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KTsK
IH0KIAogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggYTZiMTQ3MDU5NjRh
NTRmYjE4ODQwN2ZiNzczMDAwY2Q2N2M2NDg3Ny4uMWFiN2EwNDA4YmY0ZjhhYmNkZGFjZTdjMjFi
MWFlNzk5ZGQwMjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKQEAgLTI1NywyMyArMjU3LDIzIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogSFRNTERhdGFMaXN0RWxlbWVudCog
SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBm
b3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50IDsgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFt
ZShkYXRhbGlzdFRhZykpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50
KHBhcmVudCk7CisgICAgICAgIGlmIChpc0hUTUxEYXRhTGlzdEVsZW1lbnQocGFyZW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihwYXJlbnQpOwog
ICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KICNlbmRpZgogCiBI
VE1MU2VsZWN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgp
IGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAg
IHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgIHdo
aWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KSkKICAgICAgICAgc2Vs
ZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIXNlbGVjdCkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvSFRNTFNl
bGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQ+KHNlbGVjdCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCmluZGV4
IGYxZGY0YzQxZWYwZGJiNjEyMjBlNTQxOWVjZDAyODE4Yjg1MmYwYWYuLmYyOTIxMmQ1YjZmOWE0
NTkyMDBjMjFiNTllMzM0MDk3ZmYxMjNiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgdm9pZCBIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OmFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50LCBp
bnQgaW5kZXgKICAgICBlYyA9IDA7CiAKICAgICBpZiAoaW5kZXggPT0gLTEgfHwgdW5zaWduZWQo
aW5kZXgpID49IGxlbmd0aCgpKQotICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlv
biwgMCwgZWMpOworICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlvbiwgbnVsbHB0
ciwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgc2VsZWN0RWxlbWVudCgpLmFkZChuZXdPcHRpb24s
IHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbShpbmRleCkpLCBlYyk7CisgICAgICAgIHNlbGVjdEVs
ZW1lbnQoKS5hZGQobmV3T3B0aW9uLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbShp
bmRleCkpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCmluZGV4IDFjNWU2ODg5YmY4NTlhYzk1OTlmZTBmNzM4
MDEyMWRlYTQ1MThkNmMuLjljNzkyNTY1ZTE0YWE1MzJhODZjOTkzOTBlYzA0NTRlYjQ3OGE4ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApAQCAtMzcs
OCArMzcsOCBAQCBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgSFRN
TENvbGxlY3Rpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPEhUTUxPcHRpb25zQ29s
bGVjdGlvbj4gY3JlYXRlKEhUTUxTZWxlY3RFbGVtZW50JiwgQ29sbGVjdGlvblR5cGUpOwogCi0g
ICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQoKSB7IHJldHVybiB0b0hUTUxTZWxl
Y3RFbGVtZW50KG93bmVyTm9kZSgpKTsgfQotICAgIGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50JiBz
ZWxlY3RFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChvd25lck5v
ZGUoKSk7IH0KKyAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIHsgcmV0dXJu
IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KKyAgICBjb25zdCBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KIAogICAgIHZvaWQgYWRkKFBhc3NS
ZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNDk2ZWQ1YjAwYTBiYzRiODYxZjFlZjVmM2ZlYTM2YTlkMWIyNDgzMC4uOThmNWM4NWMyNmZh
YTIzMGM5MzNhZDg2OTM2M2ZkM2Q4NWJmMTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC00MTcsMTEgKzQxNywxMSBAQCBzdGF0aWMg
dm9pZCBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oSFRNTFBsdWdJ
bkltYWdlRWxlbWVudExpcwogICAgICAgICBpZiAobm9kZS0+aXNQbHVnaW5FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0gdG9IVE1MUGx1
Z0luRWxlbWVudChub2RlKTsKICAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJ
bkltYWdlRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5vZGUpOwot
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTCYgbG9hZGVkVVJMID0gcGx1Z0luSW1hZ2VFbGVtZW50
LT5sb2FkZWRVcmwoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3RoZXJNaW1lVHlwZSA9IHBs
dWdJbkltYWdlRWxlbWVudC0+bG9hZGVkTWltZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICAgICAgY29uc3QgVVJMJiBsb2Fk
ZWRVUkwgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIG90aGVyTWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkTWltZVR5cGUo
KTsKICAgICAgICAgICAgICAgICBpZiAocGx1Z0luT3JpZ2luID09IGxvYWRlZFVSTC5ob3N0KCkg
JiYgbWltZVR5cGUgPT0gb3RoZXJNaW1lVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcGx1Z0lu
TGlzdC5hcHBlbmQocGx1Z0luSW1hZ2VFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcGx1
Z0luTGlzdC5hcHBlbmQoJnBsdWdJbkltYWdlRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmlu
ZGV4IDQxNDI3NTk3ODBmMGRiYmI5MjI3OTc2NDUxMTQxMzUzNDMyNWEyNjAuLjQ4MmI4MmY4NWFj
NjIyMGUzOTliZTI4Y2IzNGQyNGMxYzFhMzJkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCkBAIC0xNDksOCArMTQ5LDggQEAgYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6aGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpIGNvbnN0CiAgICAgQVNTRVJUKGxpc3RJ
bmRleCA+PSAwKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGxp
c3RJdGVtcygpW2xpc3RJbmRleF0pOwotICAgIHJldHVybiAhbGlzdEluZGV4ICYmIG9wdGlvbi0+
dmFsdWUoKS5pc0VtcHR5KCk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zKClbbGlzdEluZGV4XSk7CisgICAgcmV0
dXJuICFsaXN0SW5kZXggJiYgb3B0aW9uLnZhbHVlKCkuaXNFbXB0eSgpOwogfQogCiBTdHJpbmcg
SFRNTFNlbGVjdEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKQEAgLTI1MSw3ICsy
NTEsNyBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKICAgICBm
b3IgKGF1dG8qIGl0ZW0gOiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoaXNIVE1MT3B0aW9u
RWxlbWVudCgqaXRlbSkpIHsKLSAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24g
PSB0b0hUTUxPcHRpb25FbGVtZW50KCppdGVtKTsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVt
ZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOwogICAgICAg
ICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRp
b24udmFsdWUoKTsKICAgICAgICAgfQpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAgdW5zaWduZWQgb3B0
aW9uSW5kZXggPSAwOwogICAgIGZvciAoYXV0byogaXRlbSA6IGxpc3RJdGVtcygpKSB7CiAgICAg
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KCppdGVtKSkgewotICAgICAgICAgICAgaWYgKHRv
SFRNTE9wdGlvbkVsZW1lbnQoKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUp
IHsKICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG9wdGlvbkluZGV4KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC02MDUsNyArNjA1LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQo
aXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpLT5zZWxlY3RlZCgpKTsKKyAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5k
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KGVsZW1lbnQpLT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTYyMCw3ICs2MjAsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fY2Fj
aGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSk7CisgICAg
ICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLT5z
ZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTY0NCwxNSArNjQ0LDE1IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVjdE90aGVyT3B0
aW9ucykKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFpc0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpIHx8IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlm
IChpID49IHN0YXJ0ICYmIGkgPD0gZW5kKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKKyAg
ICAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0
ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAoZGVzZWxl
Y3RPdGhlck9wdGlvbnMgfHwgaSA+PSBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLnNp
emUoKSkKLSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2Nh
Y2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShtX2NhY2hlZFN0YXRl
Rm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKICAgICB9CiAKICAgICBzY3JvbGxUb1NlbGVjdGlvbigp
OwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNo
YW5nZSgpCiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQo
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkg
JiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOwogICAg
ICAgICBpZiAoc2VsZWN0ZWQgIT0gbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb25baV0pCiAgICAgICAg
ICAgICBmaXJlT25DaGFuZ2UgPSB0cnVlOwogICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlv
bltpXSA9IHNlbGVjdGVkOwpAQCAtODAyLDE1ICs4MDIsMTUgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMpIGNvbnN0CiAg
ICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlm
ICh1cGRhdGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewotICAgICAgICAgICAgICAg
IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGN1cnJlbnQp
OworICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmICghZmlyc3RP
cHRpb24pCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gb3B0aW9uOwotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RPcHRpb24gPSAmb3B0aW9uOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0
ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTZWxlY3RlZCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwot
ICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gb3B0aW9uOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9zaXplIDw9IDEgJiYgIWZvdW5kU2VsZWN0ZWQgJiYgIW9wdGlvbi0+
aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxl
Y3RlZCA9IG9wdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZCA9ICZvcHRp
b247CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3NpemUgPD0gMSAmJiAhZm91bmRTZWxl
Y3RlZCAmJiAhb3B0aW9uLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kU2VsZWN0ZWQgPSAmb3B0aW9uOwogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZFNlbGVjdGVkLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTg0MSw3ICs4NDEsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNl
bGVjdGVkSW5kZXgoKSBjb25zdAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKICAg
ICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlm
ICh0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAg
aWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAg
ICB9CkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0T3B0
aW9uKGludCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJ
bmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKIAotICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gMDsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IG51bGxwdHI7CiAgICAg
aWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIGVsZW1lbnQgPSBpdGVtc1tsaXN0SW5kZXhd
OwogICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkgewpAQCAtODgxLDcg
Kzg4MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdE9wdGlvbihpbnQgb3B0aW9u
SW5kZXgsIFNlbGVjdE9wdGlvbkZsYWdzIGZsYWdzKQogICAgICAgICAgICAgICAgIHNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleCA8IDAgfHwgc2hvdWxkRGVzZWxlY3QpCiAgICAgICAgICAgICAg
ICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKLSAgICAgICAgICAgIHRv
SFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAg
ICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVk
U3RhdGUodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVs
ZW1lbnQqIGV4Y2x1ZGVFbGVtZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwog
ICAgICAgICBpZiAoZWxlbWVudCAhPSBleGNsdWRlRWxlbWVudCAmJiBpc0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgIH0KIH0KIApA
QCAtOTgxLDEwICs5ODEsMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBIVE1MU2VsZWN0RWxlbWVudDo6
c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNb
aV0pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKLSAgICAgICAgaWYgKCFvcHRp
b24tPnNlbGVjdGVkKCkpCisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKTsKKyAgICAgICAgaWYgKCFvcHRpb24u
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGF0ZS5hcHBlbmQo
b3B0aW9uLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKG9wdGlvbi52YWx1ZSgpKTsK
ICAgICAgICAgaWYgKCFtdWx0aXBsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
OTk4LDcgKzk5OCw3IEBAIHNpemVfdCBIVE1MU2VsZWN0RWxlbWVudDo6c2VhcmNoT3B0aW9uc0Zv
clZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIHNpemVfdCBsaXN0CiAgICAgZm9yIChzaXplX3Qg
aSA9IGxpc3RJbmRleFN0YXJ0OyBpIDwgbG9vcEVuZEluZGV4OyArK2kpIHsKICAgICAgICAgaWYg
KCFpc0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAodG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpCisgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKS52
YWx1ZSgpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIHJldHVy
biBub3RGb3VuZDsKQEAgLTEwMTYsMTMgKzEwMTYsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUp
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtc1NpemU7ICsraSkgewogICAgICAgICBp
ZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pLT5zZXRTZWxlY3RlZFN0YXRl
KGZhbHNlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSku
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKCFtdWx0aXBsZSgpKSB7
CiAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gc2VhcmNoT3B0aW9uc0ZvclZhbHVlKHN0YXRl
WzBdLCAwLCBpdGVtc1NpemUpOwogICAgICAgICBpZiAoZm91bmRJbmRleCAhPSBub3RGb3VuZCkK
LSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRT
ZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCppdGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICB9IGVs
c2UgewogICAgICAgICBzaXplX3Qgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RhdGUudmFsdWVTaXplKCk7ICsraSkgewpAQCAtMTAzMiw3ICsxMDMyLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3Qg
Rm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IHNl
YXJjaE9wdGlvbnNGb3JWYWx1ZSh2YWx1ZSwgMCwgc3RhcnRJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoZm91bmRJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRTZWxl
Y3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCppdGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBmb3VuZEluZGV4ICsgMTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNjEs
OCArMTA2MSw4IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYgbGlzdCwgYm9vbCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ld
OwotICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpICYmICF0b0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewotICAgICAgICAgICAgbGlzdC5hcHBl
bmREYXRhKG5hbWUsIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnZhbHVlKCkpOworICAg
ICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpLnZhbHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDc1LDggKzEwNzUsOCBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBl
bmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxpc3QsIGJvb2wpCiAKIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAw
OwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CisgICAgSFRNTE9w
dGlvbkVsZW1lbnQqIGZpcnN0T3B0aW9uID0gbnVsbHB0cjsKKyAgICBIVE1MT3B0aW9uRWxlbWVu
dCogc2VsZWN0ZWRPcHRpb24gPSBudWxscHRyOwogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgKytpKSB7CkBAIC0xMDg0LDE2ICsxMDg0LDE3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5m
YXN0SGFzQXR0cmlidXRlKHNlbGVjdGVkQXR0cikpIHsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCk7CisgICAg
ICAgIGlmIChvcHRpb24uZmFzdEhhc0F0dHJpYnV0ZShzZWxlY3RlZEF0dHIpKSB7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIW1fbXVsdGlwbGUpCiAgICAgICAgICAgICAgICAg
c2VsZWN0ZWRPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwotICAgICAgICAgICAgdG9I
VE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKLSAgICAg
ICAgICAgIHNlbGVjdGVkT3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAg
ICAgICAgICAgIG9wdGlvbi5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgc2Vs
ZWN0ZWRPcHRpb24gPSAmb3B0aW9uOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRvSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAg
ICAgICAgb3B0aW9uLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogCiAgICAgICAgIGlmICghZmly
c3RPcHRpb24pCi0gICAgICAgICAgICBmaXJzdE9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCk7CisgICAgICAgICAgICBmaXJzdE9wdGlvbiA9ICZvcHRpb247CiAgICAgfQogCiAg
ICAgaWYgKCFzZWxlY3RlZE9wdGlvbiAmJiBmaXJzdE9wdGlvbiAmJiAhbV9tdWx0aXBsZSAmJiBt
X3NpemUgPD0gMSkKQEAgLTEyOTksMTAgKzEzMDAsMTAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdEluZGV4LCBib29sIG11bHRpLCBib29sIHNo
aWYKICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCkpIHsKICAgICAg
ICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2UgZHVy
aW5nIGRyYWcKICAgICAgICAgLy8gc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVj
dC4KLSAgICAgICAgaWYgKHRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5zZWxl
Y3RlZCgpICYmIG11bHRpU2VsZWN0KQorICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2VsZWN0ZWQoKSAmJiBtdWx0aVNlbGVjdCkKICAgICAg
ICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSBmYWxzZTsKICAgICAgICAgaWYgKCFtX2Fj
dGl2ZVNlbGVjdGlvblN0YXRlKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlj
a2VkRWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShm
YWxzZSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGFueSBzcGVjaWFsIG11bHRp
cGxlIHNlbGVjdGlvbiBtb2RlLCB0aGVuIGRlc2VsZWN0IGFsbApAQCAtMTMxNyw4ICsxMzE4LDgg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdElu
ZGV4LCBib29sIG11bHRpLCBib29sIHNoaWYKICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5j
aG9ySW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKIAogICAgIC8vIFNldCB0aGUgc2VsZWN0aW9uIHN0
YXRlIG9mIHRoZSBjbGlja2VkIG9wdGlvbi4KLSAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChj
bGlja2VkRWxlbWVudCkgJiYgIXRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlj
a2VkRWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgaWYgKGlzSFRNTE9wdGlv
bkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpICYmICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmNsaWNrZWRFbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZSh0
cnVlKTsKIAogICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3RlZEluZGV4KCkgZm9yIHRoZSBw
cmV2aW91cyBpbml0aWFsaXphdGlvbiwgb3IgSWYKICAgICAvLyB3ZSdyZSBkb2luZyBhIHNpbmds
ZSBzZWxlY3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IKQEAgLTE1
MzgsNyArMTUzOSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdElu
ZGV4KCkgY29uc3QKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gaXRlbXMuc2l6ZSgpOyBpOykgewogICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zWy0taV07Ci0gICAgICAgIGlmIChpc0hUTUxP
cHRpb25FbGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNl
bGVjdGVkKCkpCisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIGRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBpOwogICAgIH0KICAgICByZXR1cm4gLTE7CkBAIC0xNTU5LDkgKzE1NjAsOSBA
QCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50IGluZGV4KSBjb25z
dAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIAogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaW5kZXhdOwotICAgIGlmICgh
aXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSB8fCB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVy
biB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogfQogCiB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtMTU5Niw4
ICsxNTk3LDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJ
bmRleChpbnQgaW5kZXgpCiAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYgKGlzSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmICh0b0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQotICAgICAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgaWYg
KGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNlbGVj
dE9wdGlvbihpbmRleCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggZjY1
Y2IwMDgxOTY2ZTNjOWI3NTY1OTg3NzFhYzE1ZmQ0ZWJjYzFjNy4uYjFlNGVlZWIyYzYwNTdmZjJm
MmNmMzQzYzcxYzM3NzkyYzZhMWU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1h
cnlFbGVtZW50LmNwcApAQCAtODcsOCArODcsOCBAQCBIVE1MRGV0YWlsc0VsZW1lbnQqIEhUTUxT
dW1tYXJ5RWxlbWVudDo6ZGV0YWlsc0VsZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG1heURl
dGFpbHMgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQodGhpcyk7CiAgICAgaWYgKCFt
YXlEZXRhaWxzIHx8ICFtYXlEZXRhaWxzLT5oYXNUYWdOYW1lKGRldGFpbHNUYWcpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9IVE1MRGV0YWlsc0VsZW1lbnQobWF5RGV0YWlscyk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGV0YWls
c0VsZW1lbnQ+KG1heURldGFpbHMpOwogfQogCiBib29sIEhUTUxTdW1tYXJ5RWxlbWVudDo6aXNN
YWluU3VtbWFyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cAppbmRleCA1OWZlZWJlNTM1ZTRlZGM4MjZhM2M0ZmRhNmMzNTA2ZjhmZmI1MWI5Li5hYjcwMWYz
MjRjZjI2ZWM0MmVlNjFlYmQ5MDllOTc3YmYyMTllYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHAKQEAgLTcwLDEwICs3MCwxMCBAQCBQYXNzUmVmUHRyPEhUTUxU
YWJsZUVsZW1lbnQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYQogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIEhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24oKSBjb25zdAogewogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aGFz
VGFnTmFtZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZUNhcHRp
b25FbGVtZW50KGNoaWxkKTsKKyAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQo
Y2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50PihjaGlsZCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnNldENhcHRpb24oUGFzc1JlZlB0cjxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudD4gbmV3Q2FwdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCmluZGV4IGZjN2U4NWE5Yzgy
ZjQyMDQwMzVjNzc2MjVmMzVmMDFjMGE4OWI2YTAuLmY1MTA4MjRlZGJhNWFhYTdkZTA0NDYzN2Vi
ZDNmNDU1MDA5Nzc0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
UGFydEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIEhUTUxUYWJsZUVsZW1lbnQqIEhUTUxUYWJsZVBh
cnRFbGVtZW50OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudCA9IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAocGFyZW50ICYmICFpc0hUTUxUYWJsZUVs
ZW1lbnQocGFyZW50KSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7Ci0g
ICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxlbWVudChwYXJlbnQpOworICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAppbmRleCA0YzRkOTc5MmNjMTBkMjVmZDg2ZWNjZDBi
MWUyZDJkMWUzZmI3MDgwLi40N2ZmMzNiZDc1M2RiNDkzZTY5NDU5M2NiNjUwN2IzNDIzNzhiNDU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKQEAgLTcw
LDcgKzcwLDcgQEAgaW50IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KCkgY29uc3QKIAog
ICAgIGludCBySW5kZXggPSAwOwogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBo
ZWFkID0gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlKS0+dEhlYWQoKSkgeworICAgIGlmIChIVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogaGVhZCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0
YWJsZSkudEhlYWQoKSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGhlYWQtPmZpcnN0Q2hp
bGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChy
b3cgPT0gdGhpcykKICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpAQCAtOTEsNyArOTEs
NyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25zdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBmb290ID0gdG9IVE1M
VGFibGVFbGVtZW50KHRhYmxlKS0+dEZvb3QoKSkgeworICAgIGlmIChIVE1MVGFibGVTZWN0aW9u
RWxlbWVudCogZm9vdCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSkudEZvb3Qo
KSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGZvb3QtPmZpcnN0Q2hpbGQoKTsgcm93OyBy
b3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChyb3cgPT0gdGhpcykK
ICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAppbmRleCA3ZTVmNjY0MDZmYTY0YTBjYWFkNTBl
ZGE2NTA5ZGRkMDE5MWE5ZmUxLi4wNGE5NjA0MzZlMTA1NzYxODQzOTdkODk2YTMxNjVkNTg5YzFj
MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmNwcApAQCAtOTgsNyArOTgsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dz
Q29sbGVjdGlvbjo6cm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCogdGFibGUsCiAgICAgICAgIGNo
aWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocHJldmlvdXMtPnBhcmVudE5vZGUo
KSk7CiAgICAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVtZW50KGNoaWxkKSkK
LSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hpbGQpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKGF1
dG8gcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKmNoaWxkKS5maXJz
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xMzEsNyArMTMxLDcgQEAgSFRN
TFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Omxhc3RSb3coSFRNTFRh
YmxlRWxlbWVudCogdGFibGUpCiAKICAgICBmb3IgKGF1dG8qIGNoaWxkID0gRWxlbWVudFRyYXZl
cnNhbDo6bGFzdENoaWxkKHRhYmxlKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVt
ZW50KGNoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hp
bGQpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNo
aWxkKTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAg
ICAgICAgaWYgKGF1dG8qIHJvdyA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+
KCpjaGlsZCkubGFzdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xNjEsNyAr
MTYxLDcgQEAgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTFRhYmxlUm93c0Nv
bGxlY3Rpb246OmNyZWF0ZShIVE1MVGFibGVFbGVtZW4KIAogRWxlbWVudCogSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QK
IHsKLSAgICByZXR1cm4gcm93QWZ0ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oJnRh
YmxlRWxlbWVudCgpKSwgdG9IVE1MVGFibGVSb3dFbGVtZW50KHByZXZpb3VzKSk7CisgICAgcmV0
dXJuIHJvd0FmdGVyKGNvbnN0X2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KCZ0YWJsZUVsZW1lbnQo
KSksIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KHByZXZpb3VzKSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaAppbmRleCA2MzIy
YzM1OWIyMjg4NjQ0N2M1YWNhZTI1YmY2YzdiMTQ0YmVhZjNjLi5mN2NhNjA0NDUxZTk3OGI2MjYw
OWFhNmZkY2ZkYWQyZWM2MDhhMGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5oCkBAIC00MCw4ICs0MCw4IEBAIGNsYXNzIEhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uIGZpbmFsIDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gY3JlYXRlKEhUTUxUYWJsZUVs
ZW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBIVE1MVGFibGVFbGVtZW50JiB0YWJsZUVs
ZW1lbnQoKSB7IHJldHVybiB0b0hUTUxUYWJsZUVsZW1lbnQob3duZXJOb2RlKCkpOyB9Ci0gICAg
Y29uc3QgSFRNTFRhYmxlRWxlbWVudCYgdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9I
VE1MVGFibGVFbGVtZW50KG93bmVyTm9kZSgpKTsgfQorICAgIEhUTUxUYWJsZUVsZW1lbnQmIHRh
YmxlRWxlbWVudCgpIHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9k
ZSgpKTsgfQorICAgIGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQmIHRhYmxlRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQogCiAg
ICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQq
LCBIVE1MVGFibGVSb3dFbGVtZW50Kik7CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQq
IGxhc3RSb3coSFRNTFRhYmxlRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
bXBsYXRlRWxlbWVudC5jcHAKaW5kZXggMTdlNGMwODA3NjIyOWNiNzJmMWIwMTI1MmJkM2FkZTQz
OTUwN2IzOC4uNmY0MjE4OWNiODc4ZTBkOWQ0MzRkYTVhMDZiY2JlMGViMzUzMjVlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC03NSw3ICs3NSw3
IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRlbXBsYXRlRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wg
ZGVlcCkKIAogICAgIFJlZlB0cjxOb2RlPiBjbG9uZSA9IGNsb25lRWxlbWVudFdpdGhDaGlsZHJl
bigpOwogICAgIGlmIChtX2NvbnRlbnQpCi0gICAgICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5v
ZGVzKHRvSFRNTFRlbXBsYXRlRWxlbWVudChjbG9uZS5nZXQoKSktPmNvbnRlbnQoKSk7CisgICAg
ICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5vZGVzKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1l
bnQ+KGNsb25lLmdldCgpKS0+Y29udGVudCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCmluZGV4IDhjYjE1MWJhMjlmY2M3ZTk5OWRiNGEzZDQ2MjAyYWQ1ZjVhZmZjMDEu
LjM1ZjhlYWQ1ZjNiYWNiOTU3NzlkNzY0OTNiNDU1OWY3MThkYmUzMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC03MTcs
NyArNzE3LDcgQEAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRGb3Jt
Q29udHJvbChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKCFjb250YWluZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEVsZW1lbnQqIGFuY2VzdG9yID0gY29udGFpbmVy
LT5zaGFkb3dIb3N0KCk7Ci0gICAgcmV0dXJuIGFuY2VzdG9yICYmIGlzSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKmFuY2VzdG9yKSA/IHRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoYW5j
ZXN0b3IpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gYW5jZXN0b3IgJiYgaXNIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgqYW5jZXN0b3IpID8gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ+KGFuY2VzdG9yKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBjb25zdCBFbGVtZW50KiBw
YXJlbnRIVE1MRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5jcHAKaW5kZXggOGQ2M2FmMzgxZDY4YTFlNzAxNmMzY2QwYzE3ODNiMWQ4
YjU3ZGUyMC4uNWJhYmIwNWI0MjI4ZjVlNzJhMDdjZDNjMjhkOWFiZDRkZGYyOWU3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lk
IEltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsKICAgICBSZWZQdHI8
RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChodG1sVGFnLCBm
YWxzZSk7CiAgICAgYXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQpOwotICAgIHRvSFRNTEh0bWxFbGVt
ZW50KHJvb3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIGRvd25jYXN0
PEhUTUxIdG1sRWxlbWVudD4oKnJvb3RFbGVtZW50KS5pbnNlcnRlZEJ5UGFyc2VyKCk7CiAKICAg
ICBmcmFtZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwogCiAg
ICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChib2R5VGFn
LCBmYWxzZSk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIm1hcmdpbjogMHB4
Iik7CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUoZG9jdW1lbnQoKS5s
b2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKSkKLSAgICAgICAgdG9IVE1MQm9keUVsZW1lbnQo
Ym9keS5nZXQoKSktPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IsICJ3aGl0ZSIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOworICAgICAgICBk
b3duY2FzdDxIVE1MQm9keUVsZW1lbnQ+KCpib2R5KS5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCAid2hpdGUiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKTsKICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSk7CiAgICAgCiAgICAg
UmVmUHRyPEltYWdlRG9jdW1lbnRFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBJbWFnZURvY3VtZW50
RWxlbWVudDo6Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TGFiZWxzTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5j
cHAKaW5kZXggMzFmNjc1ZTE5YjgwZThmMThjM2E1NTk4ZGQxMTcxMWM1YzZhNzkwYy4uOGMyOTYy
MDYwZjJiZDA4ZWRhNjc4YjBhMGIxNGNlYWE0YTQ1NDQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9M
YWJlbHNOb2RlTGlzdC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgTGFiZWxzTm9kZUxpc3Q6On5MYWJl
bHNOb2RlTGlzdCgpCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0OjplbGVtZW50TWF0Y2hlcyhF
bGVtZW50JiB0ZXN0Tm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50
KHRlc3ROb2RlKSAmJiB0b0hUTUxMYWJlbEVsZW1lbnQodGVzdE5vZGUpLmNvbnRyb2woKSA9PSAm
b3duZXJOb2RlKCk7CisgICAgcmV0dXJuIGlzSFRNTExhYmVsRWxlbWVudCh0ZXN0Tm9kZSkgJiYg
ZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4odGVzdE5vZGUpLmNvbnRyb2woKSA9PSAmb3duZXJO
b2RlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlh
RG9jdW1lbnQuY3BwCmluZGV4IGM5Yjc3M2I0YWRhN2JlZTdiOTJhOGZjMmU5NzkxNTUwYjY3NjFk
ZDcuLjZiZmQwNDA4YzVlODMzNmZjMmVjOGNiYWViNWFmZGIxMzU0YmQwMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIE1lZGlhRG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKICAgICBSZWZQdHI8RWxlbWVu
dD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNl
KTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgSUdOT1JFX0VYQ0VQ
VElPTik7CiAgICAgZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KHJvb3RFbGVtZW50LmdldCgpKTsK
LSAgICB0b0hUTUxIdG1sRWxlbWVudChyb290RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJz
ZXIoKTsKKyAgICBkb3duY2FzdDxIVE1MSHRtbEVsZW1lbnQ+KCpyb290RWxlbWVudCkuaW5zZXJ0
ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRTdGFy
dCk7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9j
dW1lbnRTdHJ1Y3R1cmUoKQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IGRv
Y3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodmlkZW9UYWcsIGZhbHNlKTsKIAotICAgIG1fbWVkaWFF
bGVtZW50ID0gdG9IVE1MVmlkZW9FbGVtZW50KG1lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgbV9t
ZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsZW1lbnQuZ2V0
KCkpOwogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCAiIik7
CiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdXRvcGxheUF0dHIsICIiKTsKIApA
QCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1l
bnRTdHJ1Y3R1cmUoKQogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCBlbGVtZW50U3R5bGUudG9TdHJpbmcoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gc291cmNl
RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc291cmNlVGFnLCBmYWxzZSk7Ci0g
ICAgSFRNTFNvdXJjZUVsZW1lbnQmIHNvdXJjZSA9IHRvSFRNTFNvdXJjZUVsZW1lbnQoKnNvdXJj
ZUVsZW1lbnQpOworICAgIEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UgPSBkb3duY2FzdDxIVE1M
U291cmNlRWxlbWVudD4oKnNvdXJjZUVsZW1lbnQpOwogICAgIHNvdXJjZS5zZXRTcmMoZG9jdW1l
bnQoKS0+dXJsKCkpOwogCiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVu
dCgpLT5sb2FkZXIoKSkKQEAgLTE2MSwyMiArMTYxLDIyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRQ
YXJzZXI+IE1lZGlhRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiBzdGF0aWMgaW5saW5lIEhUTUxW
aWRlb0VsZW1lbnQqIGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoQ29udGFpbmVyTm9kZSYgbm9kZSkK
IHsKICAgICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gdG9I
VE1MVmlkZW9FbGVtZW50KCZub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRl
b0VsZW1lbnQ+KCZub2RlKTsKIAogICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZUxpc3QgPSBub2Rl
LmdldEVsZW1lbnRzQnlUYWdOYW1lTlModmlkZW9UYWcubmFtZXNwYWNlVVJJKCksIHZpZGVvVGFn
LmxvY2FsTmFtZSgpKTsKICAgIAotICAgIGlmIChub2RlTGlzdC5nZXQoKS0+bGVuZ3RoKCkgPiAw
KQotICAgICAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGVMaXN0LmdldCgpLT5pdGVt
KDApKTsKKyAgICBpZiAobm9kZUxpc3QtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGVMaXN0LT5pdGVtKDApKTsKIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxWaWRlb0Vs
ZW1lbnQqIGFuY2VzdG9yVmlkZW9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgd2hpbGUgKG5v
ZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpKQorICAgIHdoaWxlIChub2RlICYmICFp
c0hUTUxWaWRlb0VsZW1lbnQobm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRPclNo
YWRvd0hvc3ROb2RlKCk7CiAKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGUpOwor
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pihub2RlKTsKIH0KIAogdm9pZCBN
ZWRpYURvY3VtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKQEAgLTI0Mywx
OSArMjQzLDE5IEBAIHZvaWQgTWVkaWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVy
RmlyZWQoVGltZXI8TWVkaWFEb2N1bWVudD4mKQogCiAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCA9IGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoKmh0bWxCb2R5KSkgewogICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGVt
YmVkVGFnLCBmYWxzZSk7Ci0gICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkRWxlbWVudCA9
IHRvSFRNTEVtYmVkRWxlbWVudChlbGVtZW50LmdldCgpKTsKKyAgICAgICAgSFRNTEVtYmVkRWxl
bWVudCYgZW1iZWRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVtYmVkRWxlbWVudD4oKmVsZW1lbnQp
OwogCi0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEwMCUi
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUi
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4i
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3Ry
aW5nKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEw
MCUiKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAw
JSIpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2lu
Iik7CisgICAgICAgIGVtYmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3Ry
aW5nKCkpOwogCiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGxvYWRl
cigpOwogICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwogICAgICAgICBpZiAoZG9jdW1l
bnRMb2FkZXIpCi0gICAgICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgZW1i
ZWRFbGVtZW50LnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigp
Lm1pbWVUeXBlKCkpOwogCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZXBs
YWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICB2aWRlb0VsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKCZlbWJlZEVs
ZW1lbnQsIHZpZGVvRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCmluZGV4IGY3MTZiMjc5OTQ3NWQxOTgwZTNm
Y2VjODdkODQ5OTU5ZWVkMjk4ZDUuLjhiMGY1MmVmNDQzOTNmMTQ0OTM3OWNmNzJmM2NlZDA0Mzc5
MDUwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgUGx1Z2luRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJl
KCkKIHsKICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChy
b290RWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgdG9IVE1MSHRtbEVsZW1lbnQocm9v
dEVsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgZG93bmNhc3Q8SFRNTEh0
bWxFbGVtZW50Pigqcm9vdEVsZW1lbnQpLmluc2VydGVkQnlQYXJzZXIoKTsKIAogICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5pbmplY3RV
c2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lk
IFBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAgICAgICAg
IAogICAgIFJlZlB0cjxFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KGVtYmVkVGFnLCBmYWxzZSk7CiAgICAgICAgIAotICAgIG1fZW1iZWRFbGVtZW50ID0g
dG9IVE1MRW1iZWRFbGVtZW50KGVtYmVkRWxlbWVudC5nZXQoKSk7CisgICAgbV9lbWJlZEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRW1iZWRFbGVtZW50PihlbWJlZEVsZW1lbnQuZ2V0KCkpOwogICAg
IG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOwogICAgIG1f
ZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggMjM5YTljZTYwYWNmZGM3MjYw
ZjlkNjA4OWZkNjEzNzU0NWRhY2VkMy4uNmVkYzBlOTVmNTgzODNlZGFhMTY2YzllNjZkOWU5MGRj
ZTZlZTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTg2LDcg
Kzg2LDcgQEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogICAgICAgICAvLyBMb29rIGZvciBtb3JlIHJhZGlvIGJ1dHRvbnMuCiAg
ICAgICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dEVsZW1lbnQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQobm9kZSk7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKICAgICAgICAg
aWYgKGlucHV0RWxlbWVudC0+Zm9ybSgpICE9IGVsZW1lbnQoKS5mb3JtKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmIGlu
cHV0RWxlbWVudC0+bmFtZSgpID09IGVsZW1lbnQoKS5uYW1lKCkgJiYgaW5wdXRFbGVtZW50LT5p
c0ZvY3VzYWJsZSgpKSB7CkBAIC0xMjMsOCArMTIzLDggQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6
aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKICAgICAvLyBz
a2lwIGFueSBvdGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCiAgICAgRWxlbWVudCogY3VycmVu
dEZvY3VzZWROb2RlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKICAg
ICBpZiAoY3VycmVudEZvY3VzZWROb2RlICYmIGlzSFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9j
dXNlZE5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGZvY3VzZWRJbnB1dCA9IHRv
SFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAgICBpZiAoZm9jdXNl
ZElucHV0LT5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LT5mb3JtKCkgPT0gZWxlbWVu
dCgpLmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpKQor
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBmb2N1c2VkSW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqY3VycmVudEZvY3VzZWROb2RlKTsKKyAgICAgICAgaWYgKGZvY3VzZWRJbnB1
dC5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LmZvcm0oKSA9PSBlbGVtZW50KCkuZm9y
bSgpICYmIGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9Ob2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3Qu
Y3BwCmluZGV4IGIyMDQ0ZjY3OGQ2NGI2YzcxZGNmY2E1MjBjMzFjYTc4ZmM3ZmFkMTMuLjcwMmYy
MWI1YzEyMTE3YmVkODU3ZGYxNDk5ZTdjNDRhYjk2MDIyNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb05vZGVMaXN0LmNwcApAQCAtODcsOSArODcsOSBAQCBib29sIFJhZGlvTm9kZUxpc3Q6OmNo
ZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVyKGNvbnN0IEVsZW1lbnQmIHRlc3RF
bAogewogICAgIEFTU0VSVCh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgdGVz
dEVsZW1lbnQuaXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiAgICAgaWYgKGlzSFRNTEZvcm1FbGVt
ZW50KG93bmVyTm9kZSgpKSkgewotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50
ID0gMDsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAg
ICBmb3JtRWxlbWVudCA9IHRvSFRNTE9iamVjdEVsZW1lbnQodGVzdEVsZW1lbnQpLmZvcm0oKTsK
KyAgICAgICAgICAgIGZvcm1FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KHRl
c3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1FbGVtZW50
ID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRlc3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAg
IGlmICghZm9ybUVsZW1lbnQgfHwgZm9ybUVsZW1lbnQgIT0gJm93bmVyTm9kZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAppbmRleCAwMDIzOTg0NWQzZWQ0NDNmMDUzYzI0
YzcwODFlNzdkMzNjMTI4ODczLi45NzhiNTE1MTYzOTIyM2Q3MjMwYzYyOGYyYjUyYmFhOTlhMjFm
MzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcApAQCAtMzcyLDExICsz
NzIsMTEgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6dXBkYXRlVGlja01hcmtWYWx1ZXMoKQogICAg
IG1fdGlja01hcmtWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KG9wdGlvbnMtPmxlbmd0aCgpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3B0aW9ucy0+bGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICBOb2RlKiBub2RlID0gb3B0aW9ucy0+aXRlbShpKTsKLSAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b0hUTUxPcHRpb25FbGVtZW50KG5vZGUpOwotICAgICAg
ICBTdHJpbmcgb3B0aW9uVmFsdWUgPSBvcHRpb25FbGVtZW50LT52YWx1ZSgpOwotICAgICAgICBp
ZiAoIWVsZW1lbnQoKS5pc1ZhbGlkVmFsdWUob3B0aW9uVmFsdWUpKQorICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudCYgb3B0aW9uRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
bm9kZSk7CisgICAgICAgIFN0cmluZyBvcHRpb25WYWx1ZSA9IG9wdGlvbkVsZW1lbnQudmFsdWUo
KTsKKyAgICAgICAgaWYgKCFlbGVtZW50KCkuaXNWYWxpZFZhbHVlKCZvcHRpb25WYWx1ZSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV90aWNrTWFya1ZhbHVlcy5hcHBlbmQocGFy
c2VUb051bWJlcihvcHRpb25WYWx1ZSwgRGVjaW1hbDo6bmFuKCkpKTsKKyAgICAgICAgbV90aWNr
TWFya1ZhbHVlcy5hcHBlbmQocGFyc2VUb051bWJlcigmb3B0aW9uVmFsdWUsIERlY2ltYWw6Om5h
bigpKSk7CiAgICAgfQogICAgIG1fdGlja01hcmtWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICBz
dGQ6OnNvcnQobV90aWNrTWFya1ZhbHVlcy5iZWdpbigpLCBtX3RpY2tNYXJrVmFsdWVzLmVuZCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcAppbmRleCBmZTIwNGVjM2Q4MDBhZmJiMDE4NjQwYmIwODFjNmExZDgwOTU3ZTdlLi45
MzkwNTU3MDg2MjViZDZjZDc5YWE3ZjQwMzZiZjAyM2UwZTE2ZDU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC04NSw4
ICs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FsbFdoaXRlc3BhY2UoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0KEhUTUxDb25zdHJ1Y3Rpb25TaXRl
VGFzayYgdGFzaykKIHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAodGFz
ay5wYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICB0YXNrLnBhcmVudCA9
IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXNrLnBhcmVudC5nZXQoKSktPmNvbnRlbnQoKTsKKyAg
ICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCp0YXNrLnBhcmVudCkpCisgICAgICAgIHRhc2su
cGFyZW50ID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKnRhc2sucGFyZW50KS5jb250
ZW50KCk7CiAjZW5kaWYKIAogICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSB0YXNrLmNo
aWxkLT5wYXJlbnROb2RlKCkpCkBAIC01MzEsOCArNTMxLDggQEAgdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNw
YWNlTW8KICAgICAgICAgZmluZEZvc3RlclNpdGUodGFzayk7CiAKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKLSAgICBpZiAodGFzay5wYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcp
KQotICAgICAgICB0YXNrLnBhcmVudCA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXNrLnBhcmVu
dC5nZXQoKSktPmNvbnRlbnQoKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCp0YXNr
LnBhcmVudCkpCisgICAgICAgIHRhc2sucGFyZW50ID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKnRhc2sucGFyZW50KS5jb250ZW50KCk7CiAjZW5kaWYKIAogICAgIC8vIFN0cmluZ3Mg
Y29tcG9zZWQgZW50aXJlbHkgb2Ygd2hpdGVzcGFjZSBhcmUgbGlrZWx5IHRvIGJlIHJlcGVhdGVk
LgpAQCAtNjE4LDggKzYxOCw4IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlv
blNpdGU6OmNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwKIGlubGluZSBEb2N1
bWVudCYgSFRNTENvbnN0cnVjdGlvblNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgp
CiB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKGN1cnJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICByZXR1cm4gdG9IVE1MVGVtcGxhdGVF
bGVtZW50KGN1cnJlbnRFbGVtZW50KCkpLT5jb250ZW50KCktPmRvY3VtZW50KCk7CisgICAgaWYg
KGlzSFRNTFRlbXBsYXRlRWxlbWVudChjdXJyZW50Tm9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCgpKS5jb250ZW50KCkt
PmRvY3VtZW50KCk7CiAjZW5kaWYKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CmluZGV4IDMxZjU0OTIzNDgzZDk0YzY3NmY0OTY4MmIwNmJmY2MzYWE4YjJhNjUuLmI5MzY4ZGY4
MDM3NjM2ZGIyZGQ2NTdkOGE5YTM4MDU3NDc3ZmIyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIEhUTUxU
cmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBE
b2N1bWVudEZyYWdtZW50JiBmCiAjZW5kaWYKIAogICAgICAgICByZXNldEluc2VydGlvbk1vZGVB
cHByb3ByaWF0ZWx5KCk7Ci0gICAgICAgIG1fdHJlZS5zZXRGb3JtKCFjb250ZXh0RWxlbWVudCB8
fCBpc0hUTUxGb3JtRWxlbWVudChjb250ZXh0RWxlbWVudCkgPyB0b0hUTUxGb3JtRWxlbWVudChj
b250ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9y
KCpjb250ZXh0RWxlbWVudCkpOworICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1l
bnQgfHwgaXNIVE1MRm9ybUVsZW1lbnQoY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZv
cm1FbGVtZW50Pihjb250ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0
Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVudCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwCmluZGV4IGEy
NmZmNGRiYWYwMWFmOTUwZWU1OTNiOTRhZmQ3NTNkMTdjMWYxOTAuLjVlM2FiZDIwMTNkMTQ5N2Fk
M2U5NDIyNjJlYjMyMTBjZmJjOTA2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IERldGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGVFbGVtZW50UmVu
ZGVyZXIoUGFzc1JlZjxSZW4KIAogYm9vbCBEZXRhaWxzTWFya2VyQ29udHJvbDo6cmVuZGVyZXJJ
c05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIHRvSFRNTFN1
bW1hcnlFbGVtZW50KHNoYWRvd0hvc3QoKSktPmlzTWFpblN1bW1hcnkoKSAmJiBIVE1MRGl2RWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxT
dW1tYXJ5RWxlbWVudD4oc2hhZG93SG9zdCgpKS0+aXNNYWluU3VtbWFyeSgpICYmIEhUTUxEaXZF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IGE5MmI4
NzIyMGQ4ZTA5YjllZDVjMjg5YzRiNzQ2MWExMTlkNzMzODYuLmQ0MmQ1YTQ3OTU4YzdhZmJiNGU5
ZmUyYzBjNDY1OWYwNGZhMzAzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQg
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIDIuIExldCB2aWRlbyBiZSB0aGUgbWVkaWEgZWxlbWVu
dCBvciBvdGhlciBwbGF5YmFjayBtZWNoYW5pc20uCi0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8gPSB0b0hUTUxWaWRlb0VsZW1lbnQobWVkaWFFbGVtZW50KTsKKyAgICBIVE1MVmlkZW9FbGVt
ZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCptZWRpYUVsZW1lbnQpOwog
CiAgICAgLy8gMy4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9mIGFic29sdXRlbHkgcG9z
aXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1MRGl2RWxlbWVu
dD4+IG91dHB1dDsKQEAgLTExMzUsNyArMTEzNSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgLy8gNy4gTGV0IGN1ZXMg
YmUgYW4gZW1wdHkgbGlzdCBvZiB0ZXh0IHRyYWNrIGN1ZXMuCiAgICAgLy8gOC4gRm9yIGVhY2gg
dHJhY2sgdHJhY2sgaW4gdHJhY2tzLCBhcHBlbmQgdG8gY3VlcyBhbGwgdGhlIGN1ZXMgZnJvbQog
ICAgIC8vIHRyYWNrJ3MgbGlzdCBvZiBjdWVzIHRoYXQgaGF2ZSB0aGVpciB0ZXh0IHRyYWNrIGN1
ZSBhY3RpdmUgZmxhZyBzZXQuCi0gICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gdmlkZW8tPmN1cnJl
bnRseUFjdGl2ZUN1ZXMoKTsKKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJyZW50
bHlBY3RpdmVDdWVzKCk7CiAKICAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwgZm9y
IGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCiAgICAgLy8gdGV4dCB0
cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFkZCB0
aG9zZSBib3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJT
aGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHAKaW5kZXggYTU3NjMzNGRlODM5MWFmNDE2M2UwMWM2NTZhZmE0ZTg1ZWZiNTIx
Mi4uNmVjNGU1NTEyZjkyMTlmMjMwMmU3MjcyZWRjNjFlOWVhMDY0ODY2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCkBAIC01MSw3
ICs1MSw3IEBAIE1ldGVyU2hhZG93RWxlbWVudDo6TWV0ZXJTaGFkb3dFbGVtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKIAogSFRNTE1ldGVyRWxlbWVudCogTWV0ZXJTaGFkb3dFbGVtZW50OjptZXRl
ckVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxNZXRlckVsZW1lbnQoc2hhZG93
SG9zdCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1ldGVyRWxlbWVudD4oc2hhZG93SG9z
dCgpKTsKIH0KIAogYm9vbCBNZXRlclNoYWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAKaW5kZXggZGNkMjI4YmI2ZmRjZGYzZGEzZTFk
NTYyZjViNmMyYWQ4NTVhZDNiYi4uOTA0MTdmMTFhYjVkZjIxYjNhMDk5OGE5YTdlNTI2NGZkNmJi
YzFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFk
b3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1No
YWRvd0VsZW1lbnQuY3BwCkBAIC00Niw3ICs0Niw3IEBAIFByb2dyZXNzU2hhZG93RWxlbWVudDo6
UHJvZ3Jlc3NTaGFkb3dFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAogSFRNTFByb2dyZXNz
RWxlbWVudCogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Ojpwcm9ncmVzc0VsZW1lbnQoKSBjb25zdAog
ewotICAgIHJldHVybiB0b0hUTUxQcm9ncmVzc0VsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTFByb2dyZXNzRWxlbWVudD4oc2hhZG93SG9zdCgpKTsKIH0KIAog
Ym9vbCBQcm9ncmVzc1NoYWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMjA2MjhjNzIzMDI4ZTNmYjYyY2ZkZmI3
MGJiMmM1MDM2ZDBjOTQ2MC4uMTkyZjhlMDA2M2ZhNWEwOGU4ZjQ4MjFmZGVkZTAzZmZlMjBhZDAx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgUGFzc1JlZlB0cjxTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
OjpjcmUKIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBh
IG1lbnUsIGlmIG5lZWRlZAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5w
dXRFbGVtZW50KHNoYWRvd0hvc3QoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFkb3dIb3N0KCkpOwogICAgIGlmIChpbnB1dCAm
JiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+
aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgp
OwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
Ojp3aWxsRGV0YWNoUmVuZGVyZXJzKCkKIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUg
ZWxlbWVudCBpcyB2aXNpYmxlLCBvbiBtb3VzZXVwLCBjbGVhciB0aGUgdmFsdWUsIGFuZCBzZXQg
c2VsZWN0aW9uCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHRvSFRNTElucHV0
RWxlbWVudChzaGFkb3dIb3N0KCkpKTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5w
dXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKSk7CiAgICAgaWYgKCFp
bnB1dCB8fCBpbnB1dC0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAoIWV2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6
OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKIHsKLSAgICBjb25zdCBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChzaGFkb3dIb3N0KCkpOworICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
c2hhZG93SG9zdCgpKTsKICAgICBpZiAoaW5wdXQgJiYgIWlucHV0LT5pc0Rpc2FibGVkT3JSZWFk
T25seSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggZmJlODhkNWUxNTlkZTU5OGE5NTkyZWIz
ZWZlNDRhNzFlNTljZGMwYi4uMmM3M2RiOWZkNGJlY2RhNDQ0ZGU5ZjNiODAzNzg3NmFhMjhhNzM3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05NzUsNyArOTc1LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdl
bnQ6OnZpYUluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIGRvY3VtZW4KIAogICAgIENTU1N0
eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBudWxscHRyOwogICAgIGlmIChzdHlsZUVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgY3NzU3R5bGVTaGVldCA9IHRvSFRNTFN0eWxlRWxl
bWVudChzdHlsZUVsZW1lbnQuZ2V0KCkpLT5zaGVldCgpOworICAgICAgICBjc3NTdHlsZVNoZWV0
ID0gZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oKnN0eWxlRWxlbWVudCkuc2hlZXQoKTsKICAg
ICBlbHNlIGlmIChzdHlsZUVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICBjc3NTdHls
ZVNoZWV0ID0gZG93bmNhc3Q8U1ZHU3R5bGVFbGVtZW50Pigqc3R5bGVFbGVtZW50KS5zaGVldCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApp
bmRleCBkMmRmNGE4N2E0ZTBlN2Q2Y2QxOTc4ZDRmY2M4NTUxZjlkNDljMmNiLi5iYmEzOWY2NmYx
NTFiNTkyNmE0ZjBmM2E2NTAwZWRhYWY4ZTVmZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTEyOTcsOCArMTI5Nyw4IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JOb2RlCiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVN
RU5UKQotICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRl
VGFnKSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRUZW1wbGF0ZUNvbnRlbnQoYnVpbGRPYmplY3RG
b3JOb2RlKHRvSFRNTFRlbXBsYXRlRWxlbWVudChlbGVtZW50KS0+Y29udGVudCgpLCAwLCBub2Rl
c01hcCkpOworICAgICAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KGVsZW1lbnQpKQorICAg
ICAgICAgICAgdmFsdWUtPnNldFRlbXBsYXRlQ29udGVudChidWlsZE9iamVjdEZvck5vZGUoZG93
bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKmVsZW1lbnQpLmNvbnRlbnQoKSwgMCwgbm9kZXNN
YXApKTsKICNlbmRpZgogCiAgICAgfSBlbHNlIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCA1Mjc4ZjRhYzUw
NmM4OTYzMTQyZTk3OGEzNjgyMWYxNTAxMTU1MWVhLi5lMDZiNTZkNzA3MTE2NzE2NzRmNGZhYTNm
OGJkODAyM2QwOWVlNGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1
Ym1pc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5j
cHAKQEAgLTE5MCw3ICsxOTAsNyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3Vi
bWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgICAgICBp
ZiAoIWVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICBjb250cm9s
LmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgaXNNdWx0aVBhcnRGb3JtKTsKICAgICAgICAg
aWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVs
ZW1lbnQpOwogICAgICAgICAgICAgaWYgKGlucHV0LmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAg
ICAgICAgICBmb3JtVmFsdWVzLmFwcGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0
Lm5hbWUoKS5zdHJpbmcoKSwgaW5wdXQudmFsdWUoKSkpOwogICAgICAgICAgICAgICAgIGlucHV0
LmFkZFNlYXJjaFJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5k
ZXggY2Q3MTZkOTU3ZTIwZWZkYjE3ODRiOTVkZDUxZjBkMDUzMTVhOThlYi4uY2M0MDM3YTdlOTE3
ZjRjYTlkZjVkMmY1ZWE4Mzk2YWQzODk0ZWU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCkBAIC0xMDMzLDkgKzEwMzMsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRPcGVu
ZXIoRnJhbWUqIG9wZW5lcikKIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNrQ29udGVu
dCgpCiB7CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUub3duZXJF
bGVtZW50KCk7Ci0gICAgaWYgKCFvd25lciB8fCAhb3duZXItPmhhc1RhZ05hbWUob2JqZWN0VGFn
KSkKKyAgICBpZiAoIW93bmVyIHx8ICFpc0hUTUxPYmplY3RFbGVtZW50KG93bmVyKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHRvSFRNTE9iamVjdEVsZW1lbnQob3duZXIpLT5yZW5kZXJGYWxsYmFj
a0NvbnRlbnQoKTsKKyAgICBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oKm93bmVyKS5yZW5k
ZXJGYWxsYmFja0NvbnRlbnQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAppbmRleCA5YmFk
OWI0N2U0YzZmZjVlYjk2ZjhhYmFlZjkyYTcyZjU2ZjQyNTQxLi45NzU0OTdhZGM1YTFiZDJhY2U0
MmRhODAxMmQxNWUyNGM0ZTEwOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
SW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5j
cHAKQEAgLTQwNiwxNCArNDA2LDE0IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGlu
Z0JlZm9yZUxvYWRFdmVudCgpCiAgICAgfQogICAgIGlmIChtX2ltYWdlKSB7CiAgICAgICAgIG1f
aW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICAgICAgbV9pbWFnZSA9IDA7CisgICAgICAg
IG1faW1hZ2UgPSBudWxscHRyOwogICAgIH0KIAogICAgIGxvYWRFdmVudFNlbmRlcigpLmNhbmNl
bEV2ZW50KCp0aGlzKTsKICAgICBtX2hhc1BlbmRpbmdMb2FkRXZlbnQgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAgICB0b0hUTUxP
YmplY3RFbGVtZW50KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CisgICAgICAg
IGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZhbGxiYWNrQ29u
dGVudCgpOwogCiAgICAgLy8gT25seSBjb25zaWRlciB1cGRhdGluZyB0aGUgcHJvdGVjdGlvbiBy
ZWYtY291bnQgb2YgdGhlIEVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHJldHVybmluZwogICAg
IC8vIGZyb20gdGhpcyBmdW5jdGlvbiBhcyBkb2luZyBzbyBtaWdodCByZXN1bHQgaW4gdGhlIGRl
c3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VMb2FkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcAppbmRleCBmOWFkZjZjZTdiN2IyZTEzNWEyMTJlNDg4N2M2YTU4NmQ1OGRj
M2U4Li45N2JkYWMxNzRjNmZiMTZkY2RlYjVlNTAxYTk4ZTNlMzBlN2YxZTRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCBib29s
IFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIG93
bmVyRWxlbWVudCwgY29uc3QgUwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgY29t
cGxldGVkVVJMID0gY29tcGxldGVVUkwodXJsKTsKIAotICAgIGJvb2wgaGFzRmFsbGJhY2tDb250
ZW50ID0gaXNIVE1MT2JqZWN0RWxlbWVudChvd25lckVsZW1lbnQpICYmIHRvSFRNTE9iamVjdEVs
ZW1lbnQob3duZXJFbGVtZW50KS5oYXNGYWxsYmFja0NvbnRlbnQoKTsKKyAgICBib29sIGhhc0Zh
bGxiYWNrQ29udGVudCA9IGlzSFRNTE9iamVjdEVsZW1lbnQob3duZXJFbGVtZW50KSAmJiBkb3du
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudD4ob3duZXJFbGVtZW50KS5oYXNGYWxsYmFja0NvbnRlbnQo
KTsKIAogICAgIGJvb2wgdXNlRmFsbGJhY2s7CiAgICAgaWYgKHNob3VsZFVzZVBsdWdpbihjb21w
bGV0ZWRVUkwsIG1pbWVUeXBlLCBvd25lckVsZW1lbnQuc2hvdWxkUHJlZmVyUGx1Z0luc0Zvcklt
YWdlcygpLCBoYXNGYWxsYmFja0NvbnRlbnQsIHVzZUZhbGxiYWNrKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuY3BwCmluZGV4IGVhNDA3OWM2NzRmZTVlM2ZkMmY2ODBhYzY1MzM0ZDg1NDUwNWY3NWEuLmQz
MmQzNjlkYmM5MTk0NDVhYTAzZDRkNmM1MDU5ZjVmM2YyNzcyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKQEAgLTQwOSw5ICs0MDksOSBAQCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVz
dWx0LmlubmVyTm9uU2hhcmVkRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBHZXQgdG9vbHRp
cCByZXByZXNlbnRpbmcgZm9ybSBhY3Rpb24sIGlmIHJlbGV2YW50CiAgICAgICAgICAgICBpZiAo
aXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlucHV0LT5pc1N1Ym1pdEJ1dHRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBpbnB1dC0+Zm9ybSgpKSB7CisgICAgICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0LmlzU3VibWl0QnV0dG9uKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGlucHV0
LmZvcm0oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcCA9IGZvcm0tPmFjdGlv
bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0tPnJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IGZvcm0tPnJlbmRlcmVy
KCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBDaHJvbWU6
OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICh0b29sVGlw
LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5pbm5l
ck5vblNoYXJlZEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVu
dChlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIHRvb2xUaXAgPSB0b0hUTUxJbnB1dEVsZW1l
bnQoZWxlbWVudCktPmRlZmF1bHRUb29sVGlwKCk7CisgICAgICAgICAgICAgICAgdG9vbFRpcCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5kZWZhdWx0VG9vbFRpcCgpOwog
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvYnRhaW4gdGV4dCBkaXJlY3Rp
b24gb2YgdG9vbHRpcCBmcm9tCiAgICAgICAgICAgICAgICAgLy8gQ2hyb21lQ2xpZW50IG9yIHBs
YXRmb3JtLiBBcyBvZiBPY3RvYmVyIDIwMTEsIGFsbCBjbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKaW5kZXggNTE1OTYyNDZlN2Y4ZGRlYWM2YTYyZGI5NTFjMWVlMDFl
MjE5ODQxMy4uNWFkMzNiYzE2OGUxOGNkZmI0MmE5NGZmMzIyZDNlNjQwOWY5MjAzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTYyMyw3ICs2MjMsNyBAQCBFbGVt
ZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNl
RnJhbWUsIEVsZW1lbnQqIHN0YQogewogICAgIHN0YXRlLnR5cGUgPSAoc291cmNlRnJhbWUtPnNl
bGVjdGlvbigpLmNvbnRhaW5zKGRyYWdPcmlnaW4pKSA/IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rp
b24gOiBEcmFnU291cmNlQWN0aW9uTm9uZTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvIHJl
bmRlcmVyID0gc3RhcnRFbGVtZW50LT5yZW5kZXJlcigpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSBy
ZW5kZXJlci0+cGFyZW50KCkpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVy
LT5ub25Qc2V1ZG9FbGVtZW50KCk7CkBAIC02NDYsNyArNjQ2LDcgQEAgRWxlbWVudCogRHJhZ0Nv
bnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVt
ZW50KiBzdGEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgobV9kcmFnU291cmNlQWN0
aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkxpbmspCiAgICAgICAgICAgICAgICAgJiYgaXNIVE1MQW5j
aG9yRWxlbWVudChlbGVtZW50KQotICAgICAgICAgICAgICAgICYmIHRvSFRNTEFuY2hvckVsZW1l
bnQoZWxlbWVudCktPmlzTGl2ZUxpbmsoKSkgeworICAgICAgICAgICAgICAgICYmIGRvd25jYXN0
PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCkuaXNMaXZlTGluaygpKSB7CiAgICAgICAgICAg
ICAgICAgc3RhdGUudHlwZSA9IHN0YXRpY19jYXN0PERyYWdTb3VyY2VBY3Rpb24+KHN0YXRlLnR5
cGUgfCBEcmFnU291cmNlQWN0aW9uTGluayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CiAgICAgICAgICAgICB9CkBAIC02NTQsNyArNjU0LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRy
b2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50
KiBzdGEKICAgICB9CiAKICAgICAvLyBXZSBlaXRoZXIgaGF2ZSBub3RoaW5nIHRvIGRyYWcgb3Ig
d2UgaGF2ZSBhIHNlbGVjdGlvbiBhbmQgd2UncmUgbm90IG92ZXIgYSBkcmFnZ2FibGUgZWxlbWVu
dC4KLSAgICByZXR1cm4gKHN0YXRlLnR5cGUgJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSA/
IHN0YXJ0RWxlbWVudCA6IDA7CisgICAgcmV0dXJuIChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFj
dGlvblNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQgOiBudWxscHRyOwogfQogCiBzdGF0aWMgQ2Fj
aGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZDliNjcwZDIxMWFjYjFmMzRmZmE0YTE2NmRlOTMyMjU1
OTIzOWU1My4uYzEzMTViNjFjNjk4ZTBmZDdiYzgyZmY1MWU2YjJjNDYxZjU5NzMzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgRnJhbWUq
IEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAjaWYgRU5B
QkxFKENVUlNPUl9TVVBQT1JUKQogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShOb2RlKiBub2Rl
KQogewotICAgIHJldHVybiBub2RlICYmIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiB0b0hU
TUxJbnB1dEVsZW1lbnQobm9kZSktPmlzSW1hZ2VCdXR0b24oKTsKKyAgICByZXR1cm4gbm9kZSAm
JiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km5vZGUpLmlzSW1hZ2VCdXR0b24oKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBub2Rl
J3MgZWRpdGFibGUgYmxvY2sgaXMgbm90IGN1cnJlbnQgZm9jdXNlZCBmb3IgZWRpdGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDc1ZDhjNWRmMjE1YWEzNGRi
ZjJiYTU2OWJkODE5NDU1Njg3YzQxYWQuLmEwM2FhMGQ2ZmVkZDg0ZGI3MTk2ODljZjc4YjFmYjgx
NTRiZDE4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTg4
NSw5ICs4ODUsOSBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9u
YWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYQogICAgICAgICAgICAgY29udGFp
bmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rp
b24oZGlyZWN0aW9uLCBmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgICAgICBzdGFydGluZ1JlY3Qg
PSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkRWxlbWVudCwgdHJ1ZSAvKiBp
Z25vcmUgYm9yZGVyICovKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxBcmVhRWxlbWVudChm
b2N1c2VkRWxlbWVudCkpIHsKLSAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IHRv
SFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsKLSAgICAgICAgICAgIGNvbnRhaW5lciA9
IHNjcm9sbGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRp
cmVjdGlvbiwgYXJlYS0+aW1hZ2VFbGVtZW50KCkpOwotICAgICAgICAgICAgc3RhcnRpbmdSZWN0
ID0gdmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbihhcmVhLCBkaXJlY3Rpb24p
OworICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVhID0gZG93bmNhc3Q8SFRNTEFyZWFF
bGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOworICAgICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xs
YWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBhcmVhLmltYWdlRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IHZpcnR1
YWxSZWN0Rm9yQXJlYUVsZW1lbnRBbmREaXJlY3Rpb24oJmFyZWEsIGRpcmVjdGlvbik7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA5MmNiNzkxNWNm
YjA2MTNmM2MxMDhmNmZmNmE1MDExZTFmZWZjODk3Li45YWFmMjVkMzdiMzA4Yjg2OTIxMTZhZTMy
YmEyMmJhMjEzODVkNDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNDE2LDcg
KzE0MTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShSZW5k
ZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiAgICAgSFRNTEZyYW1lT3duZXJFbGVt
ZW50JiBlbGVtZW50ID0gZW1iZWRkZWRPYmplY3QuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBp
ZiAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxFbWJlZEVsZW1lbnQoZWxl
bWVudCkpIHsKICAgICAgICAgLy8gVGVsbCB0aGUgRE9NIGVsZW1lbnQgdGhhdCBpdCBuZWVkcyBh
IHdpZGdldCB1cGRhdGUuCi0gICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVs
ZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgaWYgKCFwbHVnaW5FbGVtZW50Lm5lZWRzQ2hl
Y2tGb3JTaXplQ2hhbmdlKCkpCiAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LnNldE5lZWRzV2lk
Z2V0VXBkYXRlKHRydWUpOwogICAgIH0KQEAgLTI3ODksNyArMjc4OSw3IEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRP
YmplY3QpCiAKICAgICBpZiAoZW1iZWRkZWRPYmplY3QuaXNTbmFwc2hvdHRlZFBsdWdJbigpKSB7
CiAgICAgICAgIGlmIChpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVk
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYg
cGx1Z2luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChlbGVtZW50KTsKKyAgICAg
ICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgICAgIHBsdWdpbkVsZW1l
bnQuY2hlY2tTbmFwc2hvdFN0YXR1cygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAg
LTI4MDAsNyArMjgwMCw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdChS
ZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiAgICAgLy8gRklYTUU6IFRoaXMg
Y291bGQgdHVybiBpbnRvIGEgcmVhbCB2aXJ0dWFsIGRpc3BhdGNoIGlmIHdlIGRlZmluZWQKICAg
ICAvLyB1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRpb24pIG9uIEhUTUxFbGVtZW50Lgog
ICAgIGlmIChpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVkRWxlbWVu
dChlbGVtZW50KSB8fCBpc0hUTUxBcHBsZXRFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQoZWxlbWVudCk7CisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKICAgICAg
ICAgaWYgKHBsdWdpbkVsZW1lbnQubmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkgewogICAgICAg
ICAgICAgcGx1Z2luRWxlbWVudC5jaGVja1NuYXBzaG90U3RhdHVzKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDZlYTBjZGFh
MDljZWU2ZTY1MDJiMmM5OGMzMTBjMTY4NmRkY2VjYTEuLjg5MDkzOGMzNzRlZmExMjNhNzFiZjg3
NDNjN2U4ZjhkYzRjMGYxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CkBAIC0yMzEsMTkgKzIzMSwxOSBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFt
ZShGcmFtZSogZnJhbWUpCiAgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRp
ZXModG9TdHlsZWRFbGVtZW50KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CiAK
ICAgICAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQpOwotICAgICAgICAgICAgVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7Ci0gICAgICAgICAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7
Ci0gICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1l
bnQtPnJlbmRlcmVyKCksIHVybCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQq
IGxpbmtFbGVtZW50ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKSkgewotICAgICAg
ICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICBIVE1MSW1hZ2VF
bGVtZW50JiBpbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVu
dCk7CisgICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAg
Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LmNhY2hlZEltYWdlKCk7Cisg
ICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1lbnQu
cmVuZGVyZXIoKSwgdXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChl
bGVtZW50KSkgeworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxMaW5rRWxlbWVudD4oKmVsZW1lbnQpOworICAgICAgICAgICAgaWYgKENTU1N0
eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQuc2hlZXQoKSkgeworICAgICAgICAgICAgICAg
IFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQuZ2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKICAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHls
ZVNoZWV0KHNoZWV0LCB1cmwpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJM
cy5jb250YWlucyh1cmwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0hU
TUxTdHlsZUVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmIChDU1NTdHlsZVNoZWV0
KiBzaGVldCA9IHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KS0+c2hlZXQoKSkKKyAgICAgICAg
ICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+
KCplbGVtZW50KS5zaGVldCgpKQogICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQoc2hlZXQsIFVSTCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggYjhjODg1MTk2NWE5MTQ0NmM2ZmVmNDk1OGJmMzFi
M2JlYWZjZDgzZC4uOWQ2MjNhMTZkMjljOGU5ZDg0MDRjMGZjODlkN2VhNWYzMjNhMDI0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTY3LDEzICs2Nywx
MyBAQCBGb2N1c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRhdGUoTm9kZSogbm9kZSwgRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uKQogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwogCiAg
ICAgaWYgKGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxBcmVhRWxlbWVu
dCogYXJlYSA9IHRvSFRNTEFyZWFFbGVtZW50KG5vZGUpOwotICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZSA9IGFyZWEtPmltYWdlRWxlbWVudCgpOworICAgICAgICBIVE1MQXJlYUVsZW1l
bnQmIGFyZWEgPSBkb3duY2FzdDxIVE1MQXJlYUVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2UgPSBhcmVhLmltYWdlRWxlbWVudCgpOwogICAgICAgICBpZiAo
IWltYWdlIHx8ICFpbWFnZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICB2aXNpYmxlTm9kZSA9IGltYWdlOwotICAgICAgICByZWN0ID0gdmlydHVhbFJlY3RGb3JB
cmVhRWxlbWVudEFuZERpcmVjdGlvbihhcmVhLCBkaXJlY3Rpb24pOworICAgICAgICByZWN0ID0g
dmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbigmYXJlYSwgZGlyZWN0aW9uKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDUxNDgwN2I5MDA2
NmVlODgwMzQ1MTEyMjFjYzQxMDRkNTdiZDUwYzYuLmI4MmY5ZWIyNGI4NzM2YmFmZTU1MzVkZTEx
ZTNiNjY5MjA0MjlhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC0zNTEs
OCArMzUxLDggQEAgc3RhdGljIE5vZGUqIGFuY2VzdG9yUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwKICAgICAgICAgICAgIC8vIElmIHdl
IGFyZSBpbnRlcmVzdGVkIGFib3V0IHRoZSBmcmFtZSwgdXNlIGl0LgogICAgICAgICAgICAgaWYg
KG5vZGVCb3VuZHMpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY2hlY2sgdG8gc2Vl
IHdoZXRoZXIgdGhpcyBub2RlIGlzIGFuIGFyZWEgZWxlbWVudC4gIFRoZSBvbmx5IHdheSB0aGlz
IGNhbiBoYXBwZW4gaXMgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2hlY2suCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRl
c3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmFyZWFUYWcpKQotICAgICAgICAgICAgICAgICAgICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJ
bnRSZWN0KHRvSFRNTEFyZWFFbGVtZW50KG5vZGUpLT5jb21wdXRlUmVjdChoaXRUZXN0UmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5yZW5kZXJlcigpKSk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUgPT0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgaXNIVE1MQXJlYUVsZW1lbnQobm9kZSkpCisgICAg
ICAgICAgICAgICAgICAgICpub2RlQm91bmRzID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8SFRN
TEFyZWFFbGVtZW50Pigqbm9kZSkuY29tcHV0ZVJlY3QoaGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+cmVuZGVyZXIoKSkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUg
JiYgbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgKm5vZGVCb3VuZHMgPSBu
b2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA5
NTkzYjc2MDQxOTk1MmQwYmMyMGExNGJmN2UyNjQxODA1NGQwODlmLi5hYTRiYTlmZDljOWRiYTI1
MzNmYWNkZWM0ZTA2Mzc3M2JhY2IxNTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCkBAIC00NCwxMCArNDQsMTEgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9j
a0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNp
bmNsdWRlICJTVkdBRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAi
WExpbmtOYW1lcy5oIgogCkBAIC0yNzIsMTQgKzI3MywxNCBAQCBTdHJpbmcgSGl0VGVzdFJlc3Vs
dDo6YWx0RGlzcGxheVN0cmluZygpIGNvbnN0CiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9k
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAgIGlmIChpc0hUTUxJbWFnZUVs
ZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlID0gdG9IVE1MSW1hZ2VFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdl
dCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1
dGUoYWx0QXR0ciksIG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKKyAgICBpZiAoaXNIVE1M
SW1hZ2VFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpIHsKKyAgICAgICAgSFRNTEltYWdl
RWxlbWVudCYgaW1hZ2UgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNo
YXJlZE5vZGUpOworICAgICAgICByZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS5mYXN0R2V0QXR0
cmlidXRlKGFsdEF0dHIpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CiAgICAgfQogICAg
IAotICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkp
KSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50
KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJp
bmcoaW5wdXQtPmFsdCgpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgaWYgKGlz
SFRNTElucHV0RWxlbWVudCgqbV9pbm5lck5vblNoYXJlZE5vZGUpKSB7CisgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1faW5uZXJO
b25TaGFyZWROb2RlKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW5wdXQuYWx0KCks
IG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5n
KCk7CkBAIC0zMzUsMTUgKzMzNiwxNSBAQCBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZV
UkwoKSBjb25zdAogICAgIGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUpCiAgICAgICAgIHJldHVy
biBVUkwoKTsKIAotICAgIGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUtPmhhc1RhZ05hbWUoZW1i
ZWRUYWcpICYmICFtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQor
ICAgIGlmICghaXNIVE1MRW1iZWRFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkgJiYgIWlz
SFRNTE9iamVjdEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKICAgICAgICAgcmV0dXJu
IFVSTCgpOwogCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFBs
dWdJbkltYWdlRWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7Ci0gICAgVVJMIHVy
bCA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVh
ZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhlbGVtZW50LT51cmwoKSkpOworICAgIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
PigqbV9pbm5lck5vblNoYXJlZE5vZGUpOworICAgIFVSTCB1cmwgPSBtX2lubmVyTm9uU2hhcmVk
Tm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxT
cGFjZXMoZWxlbWVudC51cmwoKSkpOwogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIFVSTCgpOwogCi0gICAgaWYgKGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkgPT0gImFwcGxp
Y2F0aW9uL3BkZiIgfHwgKGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkuaXNFbXB0eSgpICYmIHVybC5w
YXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKKyAgICBpZiAoZWxlbWVudC5zZXJ2aWNl
VHlwZSgpID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IChlbGVtZW50LnNlcnZpY2VUeXBlKCkuaXNF
bXB0eSgpICYmIHVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKICAgICAgICAg
cmV0dXJuIHVybDsKICAgICByZXR1cm4gVVJMKCk7CiB9CkBAIC00MjQsMTIgKzQyNSwxMiBAQCB2
b2lkIEhpdFRlc3RSZXN1bHQ6OnRvZ2dsZU1lZGlhRnVsbHNjcmVlblN0YXRlKCkgY29uc3QKIHZv
aWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAogewogI2lm
IEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdChtZWRpYUVsZW1l
bnQoKSk7Ci0gICAgaWYgKG1lZGlhRWx0ICYmIGlzSFRNTFZpZGVvRWxlbWVudChtZWRpYUVsdCkp
IHsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbHQgPSB0b0hUTUxWaWRlb0VsZW1l
bnQobWVkaWFFbHQpOwotICAgICAgICBpZiAoIXZpZGVvRWx0LT5pc0Z1bGxzY3JlZW4oKSAmJiBt
ZWRpYUVsdC0+c3VwcG9ydHNGdWxsc2NyZWVuKCkpIHsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQodGhpcy0+bWVkaWFFbGVtZW50KCkpOworICAgIGlmIChtZWRpYUVsZW1lbnQg
JiYgaXNIVE1MVmlkZW9FbGVtZW50KG1lZGlhRWxlbWVudCkpIHsKKyAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlh
RWxlbWVudCk7CisgICAgICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1l
ZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKCkpIHsKICAgICAgICAgICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
LSAgICAgICAgICAgIHZpZGVvRWx0LT5lbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIHZp
ZGVvRWxlbWVudC5lbnRlckZ1bGxzY3JlZW4oKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpA
QCAtNDM4LDggKzQzOSw4IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9y
VmlkZW8oKSBjb25zdAogYm9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYUNvbnRyb2xzRW5hYmxlZCgp
IGNvbnN0CiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsdCA9IG1lZGlhRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gbWVkaWFFbHQtPmNvbnRy
b2xzKCk7CisgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRoaXMtPm1l
ZGlhRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5jb250cm9scygpOwog
I2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNTE3LDEwICs1MTgsMTAgQEAgYm9vbCBI
aXRUZXN0UmVzdWx0Ojppc0xpdmVMaW5rKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJVUkxFbGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVu
dChtX2lubmVyVVJMRWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JF
bGVtZW50KG1faW5uZXJVUkxFbGVtZW50LmdldCgpKS0+aXNMaXZlTGluaygpOworICAgIGlmIChp
c0hUTUxBbmNob3JFbGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKm1faW5uZXJVUkxFbGVtZW50KS5pc0xpdmVMaW5r
KCk7CiAKLSAgICBpZiAobV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFU
YWcpKQorICAgIGlmIChpc1NWR0FFbGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCiAgICAgICAg
IHJldHVybiBtX2lubmVyVVJMRWxlbWVudC0+aXNMaW5rKCk7CiAKICAgICByZXR1cm4gZmFsc2U7
CkBAIC01NTUsMTEgKzU1NiwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRh
YmxlKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1faW5uZXJOb25TaGFy
ZWROb2RlLmdldCgpKSkKKyAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX2lubmVyTm9u
U2hhcmVkTm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzSFRNTElucHV0
RWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hU
TUxJbnB1dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgp
OworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVk
Tm9kZSkuaXNUZXh0RmllbGQoKTsKIAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+
aGFzRWRpdGFibGVTdHlsZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmNwcAppbmRleCBmNGRhY2ZhZTNjMGYzYTEzZjQ5OWFhMTA5MGM4OTE0MDQyMzE0ZjY5Li4x
MzljYjk3MmY1N2EwMDAwOGYxMTEwYjkyOTRhNDBmZjgyOTFkMGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgUmVu
ZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8gSWYgd2UncmUgYW4gaW5w
dXQgZWxlbWVudCwgd2UgbWF5IG5lZWQgdG8gY2hhbmdlIG91ciBidXR0b24gdGV4dC4KICAgICBp
ZiAoaXNIVE1MSW5wdXRFbGVtZW50KGZvcm1Db250cm9sRWxlbWVudCgpKSkgewotICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChmb3JtQ29udHJvbEVs
ZW1lbnQoKSk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oZm9ybUNvbnRyb2xFbGVtZW50KCkpOwogICAgICAgICBTdHJpbmcgdmFs
dWUgPSBpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCk7CiAgICAgICAgIHNldFRleHQodmFsdWUpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBi
ZWRkMWM3NDZkM2RiZDU4MDZhYmJhZDdiMTU4Mzg0NjJlNDViOWJjLi40OTcwYzA0ZWI4NTcwYzA5
ODllOTU5NGRhY2QwNTFmNGY4M2UyY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwCkBAIC0xNDIsOCArMTQyLDggQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmll
ciwKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShvbFRhZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSFRN
TE9MaXN0RWxlbWVudChlbGVtZW50KS0+c3RhcnQoKTsKKyAgICAgICAgICAgIGlmIChpc0hUTUxP
TGlzdEVsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0
PEhUTUxPTGlzdEVsZW1lbnQ+KCplbGVtZW50KS5zdGFydCgpOwogICAgICAgICAgICAgICAgIGlz
UmVzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAKaW5kZXggY2I5MjBhZjYyNjdhYzI5OTZlOWNhNzdkZjFhZWQxYjdmYmM4MDE5OS4uMzE4ZDcz
ZGExOTcxYjNlYTE5OWZiNjc5ZDA1NjhiZDMxYmQ2OWM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0yMzgsNyArMjM4LDcg
QEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQuaXNQbHVn
SW5JbWFnZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIHNuYXBzaG90
ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHBsdWdJbkVsZW1lbnQpLnNuYXBzaG90SW1hZ2Uo
KTsKKyAgICBJbWFnZSogc25hcHNob3QgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
PihwbHVnSW5FbGVtZW50KS5zbmFwc2hvdEltYWdlKCk7CiAgICAgaWYgKHNuYXBzaG90KQogICAg
ICAgICBwYWludFNuYXBzaG90SW1hZ2UocGFpbnRJbmZvLCBwYWludE9mZnNldCwgc25hcHNob3Qp
OwogfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91
dCgpCiAgICAgaWYgKCF3YXNNaXNzaW5nV2lkZ2V0ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRT
aXplLndpZHRoKCkgJiYgbmV3U2l6ZS5oZWlnaHQoKSA+PSBvbGRTaXplLmhlaWdodCgpKSB7CiAg
ICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCA9IGZyYW1lT3duZXJFbGVtZW50
KCk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzUGx1Z2luRWxlbWVudCgpICYmIHRvSFRNTFBsdWdJ
bkVsZW1lbnQoZWxlbWVudCkuaXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkgewotICAgICAgICAgICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4o
ZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAocGx1Z0luSW1hZ2VFbGVtZW50LmRpc3BsYXlTdGF0
ZSgpID4gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCAmJiBwbHVnSW5JbWFn
ZUVsZW1lbnQuc25hcHNob3REZWNpc2lvbigpID09IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6Ok1h
eVNuYXBzaG90V2hlblJlc2l6ZWQpIHsKICAgICAgICAgICAgICAgICBwbHVnSW5JbWFnZUVsZW1l
bnQuc2V0TmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICB2aWV3KCku
ZnJhbWVWaWV3KCkuYWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZSgqdGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCmluZGV4IGE0MDVhYTRkNmQ4NjZlNWVhMzEy
NjQwMTM3Yzk0YmY1MGM3ZWU1MWQuLjlmNjcyZDdhNjE4ZDBjYTBlOGFkNjIwNmQwNGEzZTkxNTkx
MGMyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC0z
OCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBlbnVtIEZpbmRMZWdlbmRPcHRpb24geyBJZ25vcmVG
bG9hdGluZ09yT3V0T2ZGbG93LCBJbmNsdWRlRmxvYXRpbmdPck91dE9mRmxvdyB9OwogICAgIFJl
bmRlckJveCogZmluZExlZ2VuZChGaW5kTGVnZW5kT3B0aW9uID0gSWdub3JlRmxvYXRpbmdPck91
dE9mRmxvdykgY29uc3Q7CiAKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50JiBmaWVsZFNldEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZUZvck5vbkFub255
bW91cygpKTsgfQorICAgIEhUTUxGaWVsZFNldEVsZW1lbnQmIGZpZWxkU2V0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuY3BwCmluZGV4IDUwMWM1MWVhNGMzOGM0NTJjZTU3MWY5MGU0YWZjYzdiODc0NzQ0MWEu
LjI5NTFjZmE5ZGI2ZTA4YTRmMmQ2ZTJiMzg0ZjliODc2MDM0YzJlZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAt
NzAsNyArNzAsNyBAQCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZpbGVVcGxvYWRD
b250cm9sKCkKIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6Omlu
cHV0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChub2Rl
Rm9yTm9uQW5vbnltb3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjp1cGRhdGVGcm9tRWxlbWVudCgpCkBAIC0yNTUsNyArMjU1LDcgQEAgSFRNTElucHV0RWxl
bWVudCogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgTm9kZSogYnV0dG9u
Tm9kZSA9IGlucHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHJl
dHVybiBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJ
bnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkg
OiAwOworICAgIHJldHVybiBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQo
KSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PihidXR0b25Ob2RlKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6YnV0dG9uVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZS5jcHAKaW5kZXggZDhiYTMxYTBmZjVlN2Y3M2RkYjA3ZGVjMjEzZTllMzljYTM0NjA2Mi4u
NDM5MzhjZjQwYTMyOTJiYzJmZWNjZjU0NjEyNTZjMDIyZWEzNDQ5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCkBAIC0zNSw3ICszNSw3IEBAIFJlbmRlckZyYW1l
OjpSZW5kZXJGcmFtZShIVE1MRnJhbWVFbGVtZW50JiBmcmFtZSwgUGFzc1JlZjxSZW5kZXJTdHls
ZT4gc3R5bGUpCiAKIEhUTUxGcmFtZUVsZW1lbnQmIFJlbmRlckZyYW1lOjpmcmFtZUVsZW1lbnQo
KSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxGcmFtZUVsZW1lbnQoUmVuZGVyRnJhbWVCYXNl
OjpmcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZyYW1lRWxl
bWVudD4oUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogRnJhbWVF
ZGdlSW5mbyBSZW5kZXJGcmFtZTo6ZWRnZUluZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKaW5kZXggNDQ4NTEzN2NkMGMzYWQ4YTZlNWE0ZDFh
MTAyZTZjNzFmOWQzMWE5Ny4uMTc3MTdkODBlYmRhM2RkY2E0NzA5MzU2ODJjYjNiZTdmYjFkZmNj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC01
OSw3ICs1OSw3IEBAIFJlbmRlckZyYW1lU2V0Ojp+UmVuZGVyRnJhbWVTZXQoKQogCiBIVE1MRnJh
bWVTZXRFbGVtZW50JiBSZW5kZXJGcmFtZVNldDo6ZnJhbWVTZXRFbGVtZW50KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gdG9IVE1MRnJhbWVTZXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7CiB9CiAKIFJlbmRlckZyYW1lU2V0OjpHcmlkQXhpczo6R3JpZEF4aXMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCmluZGV4IGU0MmZl
OGQyMjhlMmExNDRmZTQ1ZTQwYmQ2ZjFiZDA1MDgyOGI0N2YuLjYyMWNmMjhjMGYwOTRlNzc2MzJm
OGRhOWE0MGFiMDE1OTEwZDMzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySFRNTENhbnZhcy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUmVuZGVySFRNTENhbnZhczo6UmVu
ZGVySFRNTENhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJT
dHkKIAogSFRNTENhbnZhc0VsZW1lbnQmIFJlbmRlckhUTUxDYW52YXM6OmNhbnZhc0VsZW1lbnQo
KSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxDYW52YXNFbGVtZW50KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlRm9y
Tm9uQW5vbnltb3VzKCkpOwogfQogCiBib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5
ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklG
cmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAppbmRl
eCAwZWRjZTJkYmQ2ZTg5NWExNjMwY2NhYzJjZDYzOWNhOWEzZDk3OTlhLi45MGM2MzU3YmU5MTdm
MjQ2M2FkYTA5NDJiZDYwODUzNTRiNjdlZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySUZyYW1lLmNwcApAQCAtNDYsNyArNDYsNyBAQCBSZW5kZXJJRnJhbWU6OlJlbmRlcklG
cmFtZShIVE1MSUZyYW1lRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5
bAogCiBIVE1MSUZyYW1lRWxlbWVudCYgUmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdG9IVE1MSUZyYW1lRWxlbWVudChSZW5kZXJGcmFtZUJhc2U6OmZy
YW1lT3duZXJFbGVtZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVu
dD4oUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogYm9vbCBSZW5k
ZXJJRnJhbWU6OnNob3VsZENvbXB1dGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCBkNjE1NWZjNmQ2ZTQ4NjYwNTc3NDA2
OWFiYmYzNzNiZDZlNGZhOGVmLi5lODU4NTgyYWM3NGJkYTgyMzQwZTI4NTEwNTA2Mjc2ZTQ0NjM5
NmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTEzMSw3
ICsxMzEsNyBAQCBSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUsIFN0eWxlSW1hZwogICAgIGltYWdlUmVzb3VyY2UoKS5p
bml0aWFsaXplKHRoaXMpOwogCiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkK
LSAgICAgICAgbV9oYXNTaGFkb3dDb250cm9scyA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50
KS5oYXNTaGFkb3dDb250cm9scygpOworICAgICAgICBtX2hhc1NoYWRvd0NvbnRyb2xzID0gZG93
bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkuaGFzU2hhZG93Q29udHJvbHMoKTsKIH0K
IAogUmVuZGVySW1hZ2U6OlJlbmRlckltYWdlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4gc3R5bGUsIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UpCkBAIC01MTcsMjAgKzUx
NywyMCBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50
SW5mbyYgcGFpbnRJbmZvKQogICAgIGlmICghZm9jdXNlZEVsZW1lbnQgfHwgIWlzSFRNTEFyZWFF
bGVtZW50KGZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEFyZWFF
bGVtZW50KiBhcmVhRWxlbWVudCA9IHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsK
LSAgICBpZiAoYXJlYUVsZW1lbnQtPmltYWdlRWxlbWVudCgpICE9IGVsZW1lbnQoKSkKKyAgICBI
VE1MQXJlYUVsZW1lbnQmIGFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpOworICAgIGlmIChhcmVhRWxlbWVudC5pbWFnZUVsZW1lbnQoKSAhPSBl
bGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW4gaWYgdGhlIHRoZW1lIGhh
bmRsZXMgZm9jdXMgcmluZyBkcmF3aW5nIGZvciBlbnRpcmUgZWxlbWVudHMsIGl0IHdvbid0IGRv
IGl0IGZvcgogICAgIC8vIGFuIGFyZWEgd2l0aGluIGFuIGltYWdlLCBzbyB3ZSBkb24ndCBjYWxs
IFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyBoZXJlLgogCi0gICAgUGF0aCBwYXRoID0g
YXJlYUVsZW1lbnQtPmNvbXB1dGVQYXRoKHRoaXMpOworICAgIFBhdGggcGF0aCA9IGFyZWFFbGVt
ZW50LmNvbXB1dGVQYXRoKHRoaXMpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgYWRkaXRpb25hbCBjb2RlIHRvIGNs
aXAgdGhlIHBhdGggdG8gdGhlIGltYWdlJ3MgYm91bmRpbmcgYm94PwogCi0gICAgUmVuZGVyU3R5
bGUqIGFyZWFFbGVtZW50U3R5bGUgPSBhcmVhRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAg
IFJlbmRlclN0eWxlKiBhcmVhRWxlbWVudFN0eWxlID0gYXJlYUVsZW1lbnQuY29tcHV0ZWRTdHls
ZSgpOwogICAgIHVuc2lnbmVkIHNob3J0IG91dGxpbmVXaWR0aCA9IGFyZWFFbGVtZW50U3R5bGUt
Pm91dGxpbmVXaWR0aCgpOwogICAgIGlmICghb3V0bGluZVdpZHRoKQogICAgICAgICByZXR1cm47
CkBAIC01NjAsOCArNTYwLDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAoIWlt
ZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZUVsdCA9IChlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQo
KSkpID8gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgOiAwOwotICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRl
T3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CisgICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50ID0gKGVsZW1lbnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgp
KSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAg
ICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWxlbWVudCA/IGlt
YWdlRWxlbWVudC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAg
ICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VSZXNvdXJjZSgpLmltYWdlKCkuZ2V0KCk7CiAgICAgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQs
IGltYWdlLCBpbWFnZSwgTGF5b3V0U2l6ZShyZWN0LnNpemUoKSkpOwogICAgIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkpOwpAQCAtNjIyLDggKzYyMiw4IEBAIExheW91dFVuaXQgUmVuZGVySW1h
Z2U6Om1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5k
ZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBl
bGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyB0b0hUTUxJbWFnZUVs
ZW1lbnQoZWxlbWVudCgpKSA6IDA7Ci0gICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS5nZXRJ
bWFnZU1hcChpLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpKSA6IDA7CisgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2UgPSBlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+dHJlZVNjb3BlKCkuZ2V0SW1hZ2VNYXAoaW1hZ2Ut
PmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5k
ZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKQEAgLTY1NSwxMCArNjU1LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVw
ZGF0ZUFsdFRleHQoKQogICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9
IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAo
aXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRN
TEltYWdlRWxlbWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7CisgICAgaWYgKGlzSFRNTElucHV0
RWxlbWVudCgqZWxlbWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKmVsZW1lbnQoKSkuYWx0VGV4dCgpOworICAgIGVsc2UgaWYgKGlzSFRNTElt
YWdlRWxlbWVudCgqZWxlbWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRN
TEltYWdlRWxlbWVudD4oKmVsZW1lbnQoKSkuYWx0VGV4dCgpOwogfQogCiBib29sIFJlbmRlcklt
YWdlOjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAzNGY5NzJkOTQ5YzEwZTg4YWNkMTBkODU1
MDU3YjA1OWJiOTQxYmNmLi5hZWE0ZjkwOTBmOWM0M2VjYjlkZjIxMTJkMjNiOTk4ZGQwZjMyOWFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cApAQCAtNzQsNyArNzQsNyBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBv
c2l0aW5nU3RyYXRlZ3koY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcgogewogICAgIEFTU0VS
VChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlci5ub2RlKCkpOworICAgIGNv
bnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dD4ocmVuZGVyZXIubm9kZSgpKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250
ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFz
OwpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmlt
YXJ5R3JhcGhpY3NMYXllcigpCiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKENBKQogICAg
IGlmICghY29tcG9zaXRvcigpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSAmJiByZW5kZXJl
cigpLmlzQ2FudmFzKCkpIHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cyA9IHRvSFRNTENhbnZhc0VsZW1lbnQocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgICAgICBj
b25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNhbnZhcy0+c2hvdWxkQWNj
ZWxlcmF0ZShjYW52YXMtPnNpemUoKSkpCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dEFjY2VsZXJhdGVzRHJhd2luZyh0cnVlKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgYm9v
bCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogI2VuZGlmCiAjaWYg
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2Ug
aWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJl
bmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewotICAgICAgICBjb25zdCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlcigpLmVs
ZW1lbnQoKSk7CisgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAgICAgICBp
ZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29u
dGV4dCgpKQogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZv
cm1MYXllcihjb250ZXh0LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRz
TGF5ZXJGb3JDYW52YXMpOwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApp
bmRleCAxNTUzODIyNDhmMjZhNjUwNjU2ZDg3MDRkOGZiNmIzYWQwY2Q2ODkwLi40YmU0NjkxZDAz
YWIyNTAwNmQ0Y2UyNjMxYzk1NWU4NzQxZTBjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMjQzNSw3ICsyNDM1LDcg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52
YXMoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICNpZiBVU0UoQ09NUE9TSVRJTkdfRk9SX1NNQUxM
X0NBTlZBU0VTKQogICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9z
aXRpbmcgPSB0cnVlOwogI2Vsc2UKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9
IHRvSFRNTENhbnZhc0VsZW1lbnQocmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJl
ci5lbGVtZW50KCkpOwogICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29t
cG9zaXRpbmcgPSBjYW52YXMtPnNpemUoKS5hcmVhKCkgPj0gY2FudmFzQXJlYVRocmVzaG9sZFJl
cXVpcmluZ0NvbXBvc2l0aW5nOwogI2VuZGlmCiAgICAgICAgIENhbnZhc0NvbXBvc2l0aW5nU3Ry
YXRlZ3kgY29tcG9zaXRpbmdTdHJhdGVneSA9IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVu
ZGVyZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4
IDU3NTlhYmMzNzhmNDAzZjA5NTBiNWE1YmM3ZGJjNGU4OGQzOWZjNGYuLjYyYWVkYzNhNzFjYzQ2
YzIzZmViZTIxODhhODQ3M2Q0ZDg2ZmQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBSZW5kZXJMaXN0Qm94Ojp+UmVu
ZGVyTGlzdEJveCgpCiAKIEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJMaXN0Qm94OjpzZWxlY3RF
bGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlRm9y
Tm9uQW5vbnltb3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4o
bm9kZUZvck5vbkFub255bW91cygpKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVG
cm9tRWxlbWVudCgpCkBAIC0xMTcsOSArMTE3LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRh
dGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZv
bnQgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKICAgICAgICAgICAgIGlmIChpc0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25F
bGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAg
ICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAo
aXNIVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9
IHRvSFRNTE9wdEdyb3VwRWxlbWVudChlbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAg
ICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQp
Lmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBp
dGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChk
LmJvbGRlcldlaWdodCgpKTsKICAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRl
bUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKQEAgLTM4Nywx
MyArMzg3LDEzIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgU3RyaW5nIGl0ZW1UZXh0
OwogICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gaXNIVE1MT3B0aW9uRWxlbWVudChsaXN0SXRl
bUVsZW1lbnQpOwogICAgIGlmIChpc09wdGlvbkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0g
dG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3Bl
Y3RHcm91cExhYmVsKCk7CisgICAgICAgIGl0ZW1UZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwo
KTsKICAgICBlbHNlIGlmIChpc0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSkK
LSAgICAgICAgaXRlbVRleHQgPSB0b0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50
KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAgICAgaXRlbVRleHQgPSBkb3duY2FzdDxIVE1MT3B0
R3JvdXBFbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIGFw
cGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRl
eHRDb2xvciA9IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJdGVtRWxlbWVu
dC0+cmVuZGVyU3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
IDogc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAg
aWYgKGlzT3B0aW9uRWxlbWVudCAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVu
dCktPnNlbGVjdGVkKCkpIHsKKyAgICBpZiAoaXNPcHRpb25FbGVtZW50ICYmIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CiAgICAgICAg
IGlmIChmcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50
KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSAmc2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgdGV4
dENvbG9yID0gdGhlbWUoKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7
CiAgICAgICAgIC8vIEhvbm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBkaXNhYmxlZCBpdGVt
cwpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgSFRNTEVs
ZW1lbnQqIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29s
b3IgYmFja0NvbG9yOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVu
dCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT5zZWxlY3RlZCgpKSB7
CisgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSAmJiBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkuc2VsZWN0ZWQoKSkgewogICAg
ICAgICBpZiAoZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1
bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgPT0gJnNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgICAg
IGJhY2tDb2xvciA9IHRoZW1lKCkuYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpOwogICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcAppbmRleCAzNjhlZDllMmJlZWIxZjg4YjU1NDZiN2ZkNjgzNGJlNjFlNmJhMjdhLi5m
YTAxMmM5ZThiYmMzYTY3MzczYjIwNDAzYmU1MWUwMDE5NmQzM2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBpbmxp
bmUgaW50IFJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4g
bV9leHBsaWNpdFZhbHVlOwogCiAgICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QodGhp
cyk7Ci0gICAgSFRNTE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlzdC0+
aGFzVGFnTmFtZShvbFRhZykpID8gdG9IVE1MT0xpc3RFbGVtZW50KGxpc3QpIDogbnVsbHB0cjsK
KyAgICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNU
YWdOYW1lKG9sVGFnKSkgPyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxw
dHI7CiAgICAgaW50IHZhbHVlU3RlcCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlz
dEVsZW1lbnQtPmlzUmV2ZXJzZWQoKSkKICAgICAgICAgdmFsdWVTdGVwID0gLTE7CkBAIC01MDEs
NyArNTAxLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMo
KQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0g
ICAgSFRNTE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3ROb2RlICYmIGxpc3ROb2Rl
LT5oYXNUYWdOYW1lKG9sVGFnKSkgPyB0b0hUTUxPTGlzdEVsZW1lbnQobGlzdE5vZGUpIDogbnVs
bHB0cjsKKyAgICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYg
bGlzdE5vZGUtPmhhc1RhZ05hbWUob2xUYWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+
KGxpc3ROb2RlKSA6IG51bGxwdHI7CiAgICAgaWYgKG9MaXN0RWxlbWVudCkgewogICAgICAgICBv
TGlzdEVsZW1lbnQtPml0ZW1Db3VudENoYW5nZWQoKTsKICAgICAgICAgaXNMaXN0UmV2ZXJzZWQg
PSBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNYXJxdWVlLmNwcAppbmRleCBiZGVhOTc5MjkyOTZkZDBhNTZiMzZhY2I5M2JiYjlhYThk
Y2I5Y2IyLi4yNWE5N2U2YjNhNThlOTg4ZDZhYTQ2NTEzODlkZjc2ODNhMDAyNDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03Myw4ICs3Myw4IEBA
IGludCBSZW5kZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1
bHQgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZVNwZWVkKCk7CiAgICAgRWxl
bWVudCogZWxlbWVudCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGlmIChl
bGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykpCi0gICAgICAgIHJlc3Vs
dCA9IHN0ZDo6bWF4KHJlc3VsdCwgdG9IVE1MTWFycXVlZUVsZW1lbnQoZWxlbWVudCktPm1pbmlt
dW1EZWxheSgpKTsKKyAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxNYXJxdWVlRWxlbWVudChlbGVt
ZW50KSkKKyAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxIVE1MTWFy
cXVlZUVsZW1lbnQ+KCplbGVtZW50KS5taW5pbXVtRGVsYXkoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5k
ZXggMTM0Y2Y5NDBmOGM5MzFiYTM0MTdkZDBmMmMxMjA5YjgwZjlkZmVjOS4uMzdlZWE1ZWU3MjNi
ZGY4ZGQ1ZTU5MDUxZTU5OGM5OWI4OWM0NDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBzaXplX3Qgc2Vs
ZWN0ZWRPcHRpb25Db3VudChjb25zdCBSZW5kZXJNZW51TGlzdCYgcmVuZGVyTWVudUxpc3QpCiAK
ICAgICBzaXplX3QgY291bnQgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZJdGVtczsgKytpKSB7Ci0gICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0
aW9uVGFnKSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkp
CisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSkgJiYgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAg
ICAgICArK2NvdW50OwogICAgIH0KICAgICByZXR1cm4gY291bnQ7CkBAIC0xNjgsNyArMTY4LDcg
QEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAKIEhUTUxTZWxlY3RF
bGVtZW50JiBSZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9
CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3Ry
aW5nIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jl
c3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7
CiAgICAgICAgIGFwcGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCB0ZXh0LCAnICcpOwogICAgICAg
ICBpZiAodGhlbWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAg
ICAgICAvLyBBZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3Vs
YXRlIHBlcmNlbnRhZ2UgdmFsdWVzIGZvciBub3cuCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBS
ZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAgIGlm
IChpID49IDAgJiYgaSA8IHNpemUpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJ
dGVtc1tpXTsKICAgICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50
ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CiAgICAgICAgICAgICBtX29wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNDUxLDkgKzQ1MSw5IEBAIFN0cmluZyBSZW5kZXJNZW51
TGlzdDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIFN0cmluZyBpdGVt
U3RyaW5nOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAg
ICBpZiAoaXNIVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtU3RyaW5n
ID0gdG9IVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOworICAg
ICAgICBpdGVtU3RyaW5nID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQp
Lmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgZWxzZSBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVt
ZW50KSkKLSAgICAgICAgaXRlbVN0cmluZyA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICAgICAgaXRlbVN0cmluZyA9
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNw
ZWN0R3JvdXBMYWJlbCgpOwogCiAgICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1T
dHJpbmcsICcgJyk7CiAgICAgcmV0dXJuIGl0ZW1TdHJpbmc7CkBAIC02NTQsNyArNjU0LDcgQEAg
Ym9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdAogICAgIGlmIChsaXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRl
eF07Ci0gICAgcmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0
aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gaXNIVE1MT3B0aW9u
RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1
bnNpZ25lZCBsaXN0SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNw
cAppbmRleCBlNjI0Njg2YzVhNDRjYjA0NzAxOGJhMTJjMTUzZWFlM2Y2YmFkNzMzLi45ZWRiYmQ5
OWI1MGZmZDBhOTRmNzY4ODY5MzQ4YjlmYWEzNzhiYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZXRlci5jcHAKQEAgLTQ0LDEwICs0NCwxMCBAQCBIVE1MTWV0ZXJFbGVtZW50
KiBSZW5kZXJNZXRlcjo6bWV0ZXJFbGVtZW50KCkgY29uc3QKICAgICBBU1NFUlQoZWxlbWVudCgp
KTsKIAogICAgIGlmIChpc0hUTUxNZXRlckVsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0
dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE1ldGVyRWxlbWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCkt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCkt
PnNoYWRvd0hvc3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1lbnQ+KGVs
ZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9n
aWNhbFdpZHRoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
cm9ncmVzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3Bw
CmluZGV4IDI0MjVmMDYyMzFmZTg5MTViZTg5MTZkZTkyMTI3YWMxZGUxMDIxYjYuLjJiNGYwNTdh
YTEzZTdjZjMzNzYyN2NiMjcwZjMyNzIyNDJiZDY2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcApAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBSZW5k
ZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUoKQogSFRNTFByb2dyZXNzRWxlbWVudCog
UmVuZGVyUHJvZ3Jlc3M6OnByb2dyZXNzRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVt
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmIChpc0hUTUxQcm9ncmVzc0VsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRv
SFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFByb2dyZXNzRWxlbWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCkt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50
KCktPnNoYWRvd0hvc3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQcm9ncmVzc0VsZW1l
bnQ+KGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKIH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggYWVi
ODhiZTE4YWNkOWRiOWE2MzgxZTNmNmMwMGQ2NjliYTNhZTk3MS4uMTA3OTc5ZTFlZjlmZTNiMDAz
NWMzZjc2N2Y3ZDc5YjA3M2RjMGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVy
KCkKIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyU2xpZGVyOjplbGVtZW50KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMo
KSk7CiB9CiAKIGludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBz
aG90dGVkUGx1Z0luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hv
dHRlZFBsdWdJbi5jcHAKaW5kZXggNzk3OGZlMjFlNGRjZDZkNzlmYjRiNGZiNDAwOTJlOTIxZmFi
Y2YxNi4uZGUzNzI2ZDJjMzZlZDNiNWE1YWJiY2Q4YmRlMzBmYjY2YjllNmRjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3Bw
CkBAIC02NCw3ICs2NCw3IEBAIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjp+UmVuZGVyU25hcHNo
b3R0ZWRQbHVnSW4oKQogCiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBSZW5kZXJTbmFwc2hvdHRl
ZFBsdWdJbjo6cGx1Z0luSW1hZ2VFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50KFJlbmRlckVtYmVkZGVkT2JqZWN0OjpmcmFtZU93bmVyRWxlbWVu
dCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmZyYW1lT3duZXJFbGVtZW50KCkpOwogfQogCiB2b2lkIFJlbmRlclNu
YXBzaG90dGVkUGx1Z0luOjpsYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggOGIwZDBlZmJiM2Q1ZmI2MGVjNWE4MjE3OGEyMzMx
NDRmOGI1MjlkNC4uNDAzNWY2NjA0MTllYWY1MDgzYWRiM2QzZWI4MWMyZDlhMTk4Nzc5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00
OCw3ICs0OCw3IEBAIFJlbmRlclRleHRDb250cm9sOjp+UmVuZGVyVGV4dENvbnRyb2woKQogCiBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sOjppbm5lclRleHRFbGVt
ZW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCmluZGV4IDkxZGI1M2Q5MDU1NzkwMWJjOWVjY2VmZThm
Y2Q2M2EwNzBlY2QyY2UuLjUyNzE4ZGEzYjE1MDU2ZTczYzgyYzViNzA2NWJkNDZhNTQ5OTFjYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lLmNwcApAQCAtNDUsNyArNDUsNyBAQCBSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6flJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lKCkKIAogSFRNTFRleHRBcmVhRWxlbWVu
dCYgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnRleHRBcmVhRWxlbWVudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRvSFRNTFRleHRBcmVhRWxlbWVudChSZW5kZXJUZXh0Q29udHJvbDo6dGV4
dEZvcm1Db250cm9sRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVh
RWxlbWVudD4oUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CmluZGV4IDU5NTdlZTdhNjhiOTJiZGJjMjZkMDJjYWIwMGJmYzlkYjkyYWQ2MmQuLmMyZWM3ZDY3
NDYwNTAzZTliZmNjZWEwMTQ4ZGI3M2FkYmZmYmU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC00
ODEsNyArNDgxLDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxT
Y3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KIAogSFRNTElucHV0RWxlbWVu
dCYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewot
ICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1lbnQoUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3Jt
Q29udHJvbEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KFJlbmRlclRleHRDb250cm9sOjp0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBhMTUwOGI4OGJiODk5
ZGYwNTgxZTJkNDYwZDRjODgwYWM1M2Q4MzBkLi5mYjVlZTVjZTNmMmFkZTA4ZGRiNzMwYTQzMzcz
ODNmMjc3MzAwMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
QEAgLTk4MCw3ICs5ODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghaW5w
dXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0
ID0gdG9IVE1MRGF0YUxpc3RFbGVtZW50KGlucHV0LT5saXN0KCkpOworICAgIEhUTUxEYXRhTGlz
dEVsZW1lbnQqIGRhdGFMaXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQt
Pmxpc3QoKSk7CiAgICAgaWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDM2
LDggKzEwMzYsOCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRGaWxsQ29sb3Ioby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgTm9kZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBBU1NFUlQo
aXNIVE1MT3B0aW9uRWxlbWVudChub2RlKSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAgU3RyaW5n
IHZhbHVlID0gb3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQmIG9wdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOwor
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7CiAgICAgICAgIGlm
ICghaW5wdXQtPmlzVmFsaWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgZG91YmxlIHBhcnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5w
dXQtPnNhbml0aXplVmFsdWUodmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbQppbmRleCA5NGUxYmRiM2ZhYWZmY2Q4YzgxOTI0Yjg0YTJhYTRlMWMwYzM5
ZjhkLi43ODliZWY1NjFiNTJjNTI1OWQ1NjdkMzJkZjAyN2YxZTFhZDc2ZWMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC02NzIsNyArNjcyLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYgYm94LCBjb24KIAogICAgIC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAg
ICBpZiAoYm94LmlzTWVudUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkp
LT5tdWx0aXBsZSgpKSB7CisgICAgaWYgKGJveC5pc01lbnVMaXN0KCkgJiYgZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CiAgICAgICAgIGludCBz
aXplID0gMjsKICAgICAgICAgaW50IGNvdW50ID0gMzsKICAgICAgICAgaW50IHBhZGRpbmcgPSAz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IGQ0Y2Fi
MmIyYzk3NjVhOGQ0YmU5ZTg1NTFlZTBjNmJiMzVhOTY2NzQuLmM1YWZlYmQzMWMyYjVlMTg3NTU3
YjI4MGEwNGY2ZmU1ZjQ2MjQ2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0KQEAgLTE2NzgsNyArMTY3OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAg
ICBpZiAoIWlucHV0LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaW5wdXQtPmlzVGV4dEZv
cm1Db250cm9sKCkgJiYgIXRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoaW5wdXQpLT5pc1Jl
YWRPbmx5KCkpKQorICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIChp
bnB1dC0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCppbnB1dCkuaXNSZWFkT25seSgpKSkKICAgICAgICAgdXBkYXRlUHJlc3NlZFN0
YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0sIG8pOwogICAgIGVsc2UgaWYgKFtbc2VhcmNo
IGNhbmNlbEJ1dHRvbkNlbGxdIGlzSGlnaGxpZ2h0ZWRdKQogICAgICAgICBbW3NlYXJjaCBjYW5j
ZWxCdXR0b25DZWxsXSBzZXRIaWdobGlnaHRlZDpOT107CkBAIC0xODYxLDEzICsxODYxLDEzIEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQtPmlzUGx1Z0lu
SW1hZ2VFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTFBsdWdJbklt
YWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
KHBsdWdJbkVsZW1lbnQpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdl
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCpwbHVnSW5FbGVtZW50
KTsKIAotICAgIEltYWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC0+c25hcHNob3RJ
bWFnZSgpOworICAgIEltYWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC5zbmFwc2hv
dEltYWdlKCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbiogcGx1Z0luUmVuZGVyZXIgPSB0b1JlbmRlclNuYXBz
aG90dGVkUGx1Z0luKHBsdWdJbkltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVy
U25hcHNob3R0ZWRQbHVnSW4qIHBsdWdJblJlbmRlcmVyID0gdG9SZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbihwbHVnSW5JbWFnZUVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgRmxvYXRQb2ludCBzbmFw
c2hvdEFic1BvcyA9IHBsdWdJblJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICBzbmFw
c2hvdEFic1Bvcy5tb3ZlKHBsdWdJblJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBwbHVnSW5SZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwgcGx1Z0luUmVuZGVyZXItPmJvcmRlclRvcCgpICsgcGx1Z0lu
UmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwCmluZGV4IDVjOTYwNmZiNjhjNGVhZmVhNzY4ZTcwMWZhMzZjOWIzNDUwY2IwNTIu
LjZlYWZmMzNiYjUxZjUwNTRhNWJmZGU0YzFiNTBlNzk3MjYyYzMwOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgUmVu
ZGVyVmlkZW86OmxheW91dCgpCiAgICAgCiBIVE1MVmlkZW9FbGVtZW50JiBSZW5kZXJWaWRlbzo6
dmlkZW9FbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KFJl
bmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRl
b0VsZW1lbnQ+KFJlbmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
VmlkZW86OnVwZGF0ZUZyb21FbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcAppbmRleCA3NDg2NjBmYzQ5MmIzNjEzM2VlZTM1ZjIzOTA5ODZk
OTdjNDc2MWQ5Li4zZjIxMTFmNTNkNGVlYjdhZDA1Y2IzNjA0NzU5YTY0OGM1OGIyNzIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC05Myw3
ICs5Myw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5u
b2RlKCk7CiAgICAgaWYgKG5vZGUgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KG5vZGUpKSB7Ci0gICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsU3RyaW5nID0gdG9IVE1MSW1hZ2VFbGVtZW50KG5v
ZGUpLT5pbWFnZVNvdXJjZVVSTCgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVybFN0
cmluZyA9IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCpub2RlKS5pbWFnZVNvdXJjZVVSTCgp
OwogICAgICAgICBVUkwgdXJsID0gbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJp
bmcpOwogICAgICAgICBpbWFnZUZvckNvbnRhaW5lci0+c2V0VVJMKHVybCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvc3ZndGFncy5pbgppbmRleCA2N2Y3MmQ4NDQ2MzVmYTIxMDdkM2UzNjE5ZmM3M2Q5ZGE3NTgw
ZWI4Li5iNzcwOGMxMTFjYmZiMDJhNzA4M2RkZmYwZGRmNTI5NjhkYWY3MGNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
c3ZndGFncy5pbgpAQCAtMyw3ICszLDcgQEAgbmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyIKIGZhbGxiYWNrSW50ZXJmYWNlTmFtZT0iU1ZHVW5rbm93bkVsZW1lbnQiCiBm
YWxsYmFja0pTSW50ZXJmYWNlTmFtZT0iU1ZHRWxlbWVudCIKIAotYQorYSBnZW5lcmF0ZVR5cGVI
ZWxwZXJzCiAjaWYgRU5BQkxFX1NWR19GT05UUwogYWx0R2x5cGggZ2VuZXJhdGVUeXBlSGVscGVy
cwogYWx0R2x5cGhEZWYgZ2VuZXJhdGVUeXBlSGVscGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCmluZGV4IDBhMDI2N2FjZDQ3NTQ3NWE3MDA4M2JiMWU4Yjg3NzVkOGU3ZWEyMWUu
LjRkOWNhZGU3NjcxYTE5MmFlMWU4YmMyMzVmMjIxMWM5NjdjMzYxN2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEludGVybmFsczo6
c2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBpZCwgRXhj
ZXB0aW9uQwogU3RyaW5nIEludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCgqZWxlbWVudCkpIHsKLSAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQm
IHRleHRGb3JtQ29udHJvbEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCpl
bGVtZW50KTsKKyAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRG
b3JtQ29udHJvbEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4o
KmVsZW1lbnQpOwogICAgICAgICBpZiAoIXRleHRGb3JtQ29udHJvbEVsZW1lbnQuaXNQbGFjZWhv
bGRlclZpc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgaWYg
KEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlckVsZW1lbnQgPSB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LnBsYWNlaG9sZGVyRWxlbWVudCgpKQpAQCAtOTEyLDkgKzkxMiw4IEBAIGJvb2wgSW50ZXJuYWxz
Ojp3YXNMYXN0Q2hhbmdlVXNlckVkaXQoRWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxk
LT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hh
bmdlV2FzVXNlckVkaXQoKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgaGFz
VGFnTmFtZSBpbnN0ZWFkIGJ1dCBXaW5kb3dzIHBvcnQgZG9lc24ndCBsaW5rIFF1YWxpZmllZE5h
bWVzIHByb3Blcmx5LgotICAgIGlmICh0ZXh0RmllbGQtPnRhZ05hbWUoKSA9PSAiVEVYVEFSRUEi
KQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KHRleHRGaWVsZCktPmxhc3RD
aGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIGlmICh0aXNIVE1MVGV4dEFyZWFFbGVtZW50KHRleHRG
aWVsZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqdGV4
dEZpZWxkKS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIAogICAgIGVjID0gSU5WQUxJRF9OT0RF
X1RZUEVfRVJSOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE5MTksOCArMTkxOCw4IEBAIHZvaWQg
SW50ZXJuYWxzOjp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNBbmRSdW5Qb3N0
TGF5b3V0VGFza3MoTm9kZSoKICAgICAgICAgZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBlbHNlIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICBkb2N1bWVudCA9
IHRvRG9jdW1lbnQobm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmlmcmFtZVRhZykpCi0gICAgICAgIGRvY3VtZW50ID0gdG9IVE1MSUZyYW1lRWxlbWVudChu
b2RlKS0+Y29udGVudERvY3VtZW50KCk7CisgICAgZWxzZSBpZiAoaXNIVE1MSUZyYW1lRWxlbWVu
dChub2RlKSkKKyAgICAgICAgZG9jdW1lbnQgPSBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4o
Km5vZGUpLmNvbnRlbnREb2N1bWVudCgpOwogICAgIGVsc2UgewogICAgICAgICBlYyA9IFR5cGVF
cnJvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjA4Nyw5ICsyMDg2LDkgQEAgYm9vbCBJbnRlcm5h
bHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKE5vZGUqIG5vZGUpCiAgICAgaWYgKCFpc0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKTsKKyAgICBIVE1MU2Vs
ZWN0RWxlbWVudCYgc2VsZWN0ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKTsK
IAotICAgIGF1dG8gcmVuZGVyZXIgPSBzZWxlY3QtPnJlbmRlcmVyKCk7CisgICAgYXV0byByZW5k
ZXJlciA9IHNlbGVjdC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXItPmlzTWVudUxpc3Qo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggZDJmZTdjMGQ5Mzdk
OGE0YzI5YWJmNmNiODljM2NjNjY0ZWIzNmJjYi4uOWExZjhmNTBhODI3NjRiZWNhNTViMWJkZWUz
NmU3ZjcwYTQ5YzU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtODUwLDE2ICs4NTAsMTYgQEAgdm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxO
YW1lLCBjb25zdCB4bWxDaGEKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFRFTVBMQVRF
X0VMRU1FTlQpCi0gICAgaWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZW1w
bGF0ZVRhZykpCi0gICAgICAgIHB1c2hDdXJyZW50Tm9kZSh0b0hUTUxUZW1wbGF0ZUVsZW1lbnQo
bmV3RWxlbWVudC5nZXQoKSktPmNvbnRlbnQoKSk7CisgICAgaWYgKGlzSFRNTFRlbXBsYXRlRWxl
bWVudCgqbmV3RWxlbWVudCkpCisgICAgICAgIHB1c2hDdXJyZW50Tm9kZShkb3duY2FzdDxIVE1M
VGVtcGxhdGVFbGVtZW50PigqbmV3RWxlbWVudCkuY29udGVudCgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHB1c2hDdXJyZW50Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKICNlbHNlCiAgICAgcHVzaEN1
cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBpZiAobmV3RWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAgICB0b0hUTUxIdG1sRWxl
bWVudChuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIGlmIChpc0hU
TUxIdG1sRWxlbWVudCgqbmV3RWxlbWVudCkpCisgICAgICAgIGRvd25jYXN0PEhUTUxIdG1sRWxl
bWVudD4oKm5ld0VsZW1lbnQpLmluc2VydGVkQnlQYXJzZXIoKTsKIAogICAgIGlmICghbV9wYXJz
aW5nRnJhZ21lbnQgJiYgaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1
bWVudFN0YXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudElPUy5tbQppbmRleCBmNjY0Zjk1YmU5MTYxMjA1ZWYwZjc4NGY1YTc2
ZWUxODNhN2ZlOTg5Li4yYjY1YmIwYWI2NzRmZTc1N2Y1MjA4MjE5YjMwZDA3MGI3ZGM5NWEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnRJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50SU9TLm1tCkBAIC0zMTQsMTEgKzMxNCwxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudElP
Uzo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hU
TUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAg
ICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0KCkpCisgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpOworICAgIGlm
ICghaW5wdXRFbGVtZW50LmlzVGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWxsRm9y
bURlbGVnYXRlKHdlYlZpZXcoKSwgQHNlbGVjdG9yKGRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6
KSwga2l0KGlucHV0RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUo
KSkpOworICAgIENhbGxGb3JtRGVsZWdhdGUod2ViVmlldygpLCBAc2VsZWN0b3IoZGlkRm9jdXNU
ZXh0RmllbGQ6aW5GcmFtZTopLCBraXQoJmlucHV0RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQu
ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpzaG93
UGxheWJhY2tUYXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNlL1dlYktpdC9tYWMvRE9N
L1dlYkRPTU9wZXJhdGlvbnMubW0KaW5kZXggNTBhOWQ4ZmRiY2UyZGJiMjRlNDg2NTE1ZWZlMGVh
NzY3NDhiY2Y5MS4uYjFjMjAzNTUxMjNjMDY5NDJmNzQ2M2RmZTFkYzY1MGFlMWVhY2QwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KQEAgLTIxNCw3ICsyMTQs
NyBAQCBAaW1wbGVtZW50YXRpb24gRE9NSFRNTElucHV0RWxlbWVudCAoV2ViRE9NSFRNTElucHV0
RWxlbWVudE9wZXJhdGlvbnNQcml2YXRlKQogCiAtICh2b2lkKV9zZXRBdXRvZmlsbGVkOihCT09M
KWF1dG9maWxsZWQKIHsKLSAgICB0b0hUTUxJbnB1dEVsZW1lbnQoY29yZSgoRE9NRWxlbWVudCAq
KXNlbGYpKS0+c2V0QXV0b2ZpbGxlZChhdXRvZmlsbGVkKTsKKyAgICBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pihjb3JlKChET01FbGVtZW50ICopc2VsZikpLT5zZXRBdXRvZmlsbGVkKGF1dG9m
aWxsZWQpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggMjI1NGUyZWY3OTVjMTA5NjMzNWM5NmMxM2Yx
Y2JiMjU2OTVlMWM3ZC4uMjRkZTY3YTcyMzU4MTNiYTVlMjIyZTNjNmRjOGZhYTBjMGU3NWFjZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQpAQCAtMjIzLDExICsyMjMsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZvY3Vz
ZWRFbGVtZW50Q2hhbmdlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghaXNIVE1MSW5wdXRF
bGVtZW50KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFp
bnB1dEVsZW1lbnQtPmlzVGV4dCgpKQorICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KTsKKyAgICBpZiAoIWlucHV0
RWxlbWVudC5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FsbEZvcm1EZWxlZ2F0
ZShtX3dlYlZpZXcsIEBzZWxlY3RvcihkaWRGb2N1c1RleHRGaWVsZDppbkZyYW1lOiksIGtpdChp
bnB1dEVsZW1lbnQpLCBraXQoaW5wdXRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpKTsKKyAg
ICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKGRpZEZvY3VzVGV4dEZpZWxk
OmluRnJhbWU6KSwga2l0KCZpbnB1dEVsZW1lbnQpLCBraXQoaW5wdXRFbGVtZW50LmRvY3VtZW50
KCkuZnJhbWUoKSkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEZyYW1lQ2hh
bmdlZChGcmFtZSopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0KaW5kZXggN2I2Mjk2ZTc4MmNmNWRhMjEzNDc2MjMxZmVkMzE2ZDg3
YjNjOTBlNy4uYTY5NDkyYzk2MDg0NGU4ZDEyY2M2YjMzNjBkZjQ1ZWIyMmE1YTQ0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRC
ZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9N
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAg
ICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHRleHRGaWVsZERpZEJlZ2lu
RWRpdGluZzppbkZyYW1lOiksIGlucHV0RWxlbWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCku
ZnJhbWUoKSkpOwogfQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0
ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJ
bnB1dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERPTUhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkp
OworICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKGlucHV0RWxl
bWVudCk7CiAgICAgQ2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0Rmll
bGREaWRFbmRFZGl0aW5nOmluRnJhbWU6KSwgaW5wdXRFbGVtZW50LCBraXQoZWxlbWVudC0+ZG9j
dW1lbnQoKS5mcmFtZSgpKSk7CiB9CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAjZW5kaWYKIAotICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpOworICAgIERPTUhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKGlucHV0RWxlbWVudCk7CiAgICAgQ2FsbEZvcm1E
ZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQ6aW5G
cmFtZTopLCBpbnB1dEVsZW1lbnQsIGtpdChlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpKTsK
IH0KQEAgLTc2Niw3ICs3NjYsNyBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6ZG9UZXh0RmllbGRD
b21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqIGVsZW1lbnQsIEtleWJvYXJkRXZlbgogICAgIGlmICgh
aXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBE
T01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQodG9IVE1MSW5wdXRFbGVtZW50
KGVsZW1lbnQpKTsKKyAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQo
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpOwogICAgIEZvcm1EZWxlZ2F0ZUxv
ZyhpbnB1dEVsZW1lbnQpOwogICAgIGlmIChTRUwgY29tbWFuZFNlbGVjdG9yID0gc2VsZWN0b3JG
b3JLZXlFdmVudChldmVudCkpCiAgICAgICAgIHJldHVybiBDYWxsRm9ybURlbGVnYXRlUmV0dXJu
aW5nQm9vbGVhbihOTywgbV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkOmRvQ29tbWFuZEJ5
U2VsZWN0b3I6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIGNvbW1hbmRTZWxlY3Rvciwga2l0KGVs
ZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwpAQCAtNzc4LDcgKzc3OCw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdCh0b0hUTUxJ
bnB1dEVsZW1lbnQoZWxlbWVudCkpOworICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IGtpdChkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9y
bURlbGVnYXRlTG9nKGlucHV0RWxlbWVudCk7CiAgICAgLy8gV2UncmUgdXNpbmcgdGhlIGRlbGV0
ZUJhY2t3YXJkIHNlbGVjdG9yIGZvciBhbGwgZGVsZXRpb24gb3BlcmF0aW9ucyBzaW5jZSB0aGUg
YXV0b2ZpbGwgY29kZSB0cmVhdHMgYWxsIGRlbGV0aW9ucyB0aGUgc2FtZSB3YXkuCiAgICAgQ2Fs
bEZvcm1EZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oTk8sIG1fd2ViVmlldywgQHNlbGVjdG9yKHRl
eHRGaWVsZDpkb0NvbW1hbmRCeVNlbGVjdG9yOmluRnJhbWU6KSwgaW5wdXRFbGVtZW50LCBAc2Vs
ZWN0b3IoZGVsZXRlQmFja3dhcmQ6KSwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkp
OwpAQCAtNzg5LDcgKzc4OSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdl
SW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghaXNIVE1MVGV4dEFyZWFFbGVt
ZW50KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBET01IVE1MVGV4dEFyZWFFbGVt
ZW50KiB0ZXh0QXJlYUVsZW1lbnQgPSBraXQodG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQp
KTsKKyAgICBET01IVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYUVsZW1lbnQgPSBraXQoZG93
bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCkpOwogICAgIEZvcm1EZWxlZ2F0ZUxv
Zyh0ZXh0QXJlYUVsZW1lbnQpOwogICAgIENhbGxGb3JtRGVsZWdhdGUobV93ZWJWaWV3LCBAc2Vs
ZWN0b3IodGV4dERpZENoYW5nZUluVGV4dEFyZWE6aW5GcmFtZTopLCB0ZXh0QXJlYUVsZW1lbnQs
IGtpdChlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KaW5kZXggMDlkZGMxZDg1
YzMzZWU5MDkwY2M1NDU4MGM0MTU2MzcyNDViNmQxYS4uMDkyZTU4ZDdiNDNmY2M5NDYwNmQzODlj
MGY2NDdiZDRlNzg0MjhhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KQEAgLTMwNSw3ICszMDUsNyBAQCAtIChET01FbGVtZW50
ICopZWxlbWVudFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaW5Gb3JtOihET01FbGVtZW50ICop
Zm9ybQogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50
KERPTUVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgRWxlbWVudCogbm9kZSA9IGNvcmUoZWxlbWVu
dCk7Ci0gICAgcmV0dXJuIG5vZGUgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpID8gdG9IVE1M
SW5wdXRFbGVtZW50KG5vZGUpIDogMDsKKyAgICByZXR1cm4gbm9kZSAmJiBpc0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSA6IG51bGxwdHI7
CiB9CiAKIC0gKEJPT0wpZWxlbWVudERvZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQgKillbGVt
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKaW5kZXggYjM4Yzc3YTZlNmY2MzMw
MzVhNmQ1OTMwZDliNzE4MjA3NmEwOTc5Ni4uNTllMGZiNTM1ZTc1NzZjZDg0ZDk5NGVhM2MzMDA5
NjMwNTllN2FmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcApAQCAtMjUwLDcg
KzI1MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTERvY3VtZW50OjpVUkwo
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqcmVz
dWx0ID0gQlN0cmluZyh0b0hUTUxEb2N1bWVudChtX2RvY3VtZW50KS0+dXJsKCkpLnJlbGVhc2Uo
KTsKKyAgICAqcmVzdWx0ID0gQlN0cmluZyhkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG1fZG9jdW1l
bnQpLT51cmwoKSkucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIApAQCAtMjYx
LDkgKzI2MSw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTERvY3VtZW50Ojpi
b2R5KAogICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEhUTUxEb2N1bWVudCogaHRtbERvYyA9
IHRvSFRNTERvY3VtZW50KG1fZG9jdW1lbnQpOworICAgIEhUTUxEb2N1bWVudCYgaHRtbERvYyA9
IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm1fZG9jdW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxl
bWVudD4gZG9tRWxlbWVudDsKLSAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50
OjpjcmVhdGVJbnN0YW5jZShodG1sRG9jLT5ib2R5KCkpKTsKKyAgICBkb21FbGVtZW50LmFkb3B0
UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZShodG1sRG9jLmJvZHkoKSkpOwogICAg
IGlmIChkb21FbGVtZW50KQogICAgICAgICByZXR1cm4gZG9tRWxlbWVudC0+UXVlcnlJbnRlcmZh
Y2UoSUlEX0lET01IVE1MRWxlbWVudCwgKHZvaWQqKikgYm9keUVsZW1lbnQpOwogICAgIHJldHVy
biBFX0ZBSUw7CkBAIC0zMDQsOCArMzA0LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MRG9jdW1lbnQ6OmZvcm1zKAogICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVu
dC0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEhUTUxE
b2N1bWVudCogaHRtbERvYyA9IHRvSFRNTERvY3VtZW50KG1fZG9jdW1lbnQpOwotICAgIFJlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gZm9ybXMgPSBodG1sRG9jLT5mb3JtcygpOworICAgIEhUTUxEb2N1
bWVudCYgaHRtbERvYyA9IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm1fZG9jdW1lbnQpOworICAg
IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZm9ybXMgPSBodG1sRG9jLmZvcm1zKCk7CiAgICAgKmNv
bGxlY3Rpb24gPSBET01IVE1MQ29sbGVjdGlvbjo6Y3JlYXRlSW5zdGFuY2UoZm9ybXMuZ2V0KCkp
OwogICAgIHJldHVybiBTX09LOwogfQpAQCAtNTYwLDcgKzU2MCw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRE9NSFRNTEZvcm1FbGVtZW50OjphY3Rpb24oCiAgICAgICAgIC8qIFtyZXR2
YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNI
VE1MRm9ybUVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgV1RGOjpTdHJpbmcgYWN0aW9uU3RyaW5n
ID0gdG9IVE1MRm9ybUVsZW1lbnQobV9lbGVtZW50KS0+YWN0aW9uKCk7CisgICAgV1RGOjpTdHJp
bmcgYWN0aW9uU3RyaW5nID0gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigqbV9lbGVtZW50KS5h
Y3Rpb24oKTsKICAgICAqcmVzdWx0ID0gQlN0cmluZyhhY3Rpb25TdHJpbmcpLnJlbGVhc2UoKTsK
ICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTU5MCw3ICs1OTAsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTUhUTUxGb3JtRWxlbWVudDo6bWV0aG9kKAogICAgICAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRN
TEZvcm1FbGVtZW50KG1fZWxlbWVudCkpOwotICAgIFdURjo6U3RyaW5nIG1ldGhvZFN0cmluZyA9
IHRvSFRNTEZvcm1FbGVtZW50KG1fZWxlbWVudCktPm1ldGhvZCgpOworICAgIFdURjo6U3RyaW5n
IG1ldGhvZFN0cmluZyA9IGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oKm1fZWxlbWVudCkubWV0
aG9kKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcobWV0aG9kU3RyaW5nKS5yZWxlYXNlKCk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CkBAIC03MDIsMTMgKzcwMiwxMyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTUhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25zKAogICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOwogCiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG1fZWxlbWVudCk7CisgICAg
SFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxl
bWVudD4oKm1fZWxlbWVudCk7CiAKLSAgICBpZiAoIXNlbGVjdEVsZW1lbnQtPm9wdGlvbnMoKSkK
KyAgICBpZiAoIXNlbGVjdEVsZW1lbnQub3B0aW9ucygpKQogICAgICAgICByZXR1cm4gRV9GQUlM
OwogCi0gICAgKnJlc3VsdCA9IDA7Ci0gICAgUmVmUHRyPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4g
b3B0aW9ucyA9IHNlbGVjdEVsZW1lbnQtPm9wdGlvbnMoKTsKKyAgICAqcmVzdWx0ID0gbnVsbHB0
cjsKKyAgICBSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBvcHRpb25zID0gc2VsZWN0RWxl
bWVudC5vcHRpb25zKCk7CiAgICAgKnJlc3VsdCA9IERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbjo6
Y3JlYXRlSW5zdGFuY2Uob3B0aW9ucy5nZXQoKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC04
MDQsMTIgKzgwNCwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxTZWxlY3RF
bGVtZW50OjphY3RpdmF0ZUl0ZW1BdEluZGV4KAogICAgIC8qIFtpbl0gKi8gaW50IGluZGV4KQog
ewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RF
bGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxTZWxlY3RF
bGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOwogCi0gICAgaWYgKGluZGV4ID49IHNlbGVjdEVsZW1lbnQtPmxlbmd0aCgpKQorICAg
IGlmIChpbmRleCA+PSBzZWxlY3RFbGVtZW50Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gRV9G
QUlMOwogCi0gICAgc2VsZWN0RWxlbWVudC0+c2V0U2VsZWN0ZWRJbmRleChpbmRleCk7CisgICAg
c2VsZWN0RWxlbWVudC5zZXRTZWxlY3RlZEluZGV4KGluZGV4KTsKICAgICByZXR1cm4gU19PSzsK
IH0KIApAQCAtODYwLDkgKzg2MCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TE9wdGlvbkVsZW1lbnQ6OnRleHQoCiAKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NF
UlQoaXNIVE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MT3B0aW9uRWxlbWVu
dCogb3B0aW9uRWxlbWVudCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBI
VE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqbV9lbGVtZW50KTsKIAotICAgICpyZXN1bHQgPSBCU3RyaW5nKG9wdGlvbkVsZW1lbnQt
PnRleHQoKSkucmVsZWFzZSgpOworICAgICpyZXN1bHQgPSBCU3RyaW5nKG9wdGlvbkVsZW1lbnQu
dGV4dCgpKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC04OTcsOSAr
ODk3LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MT3B0aW9uRWxlbWVudDo6
bGFiZWwoCiAKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MT3B0aW9u
RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVu
dCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MT3B0aW9uRWxlbWVu
dCYgb3B0aW9uRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50
KTsKIAotICAgICpyZXN1bHQgPSBCU3RyaW5nKG9wdGlvbkVsZW1lbnQtPmxhYmVsKCkpLnJlbGVh
c2UoKTsKKyAgICAqcmVzdWx0ID0gQlN0cmluZyhvcHRpb25FbGVtZW50LmxhYmVsKCkpLnJlbGVh
c2UoKTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTk5MSwxMSArOTkxLDExIEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6Zm9ybSgKIHsKICAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqcmVzdWx0ID0g
MDsKKyAgICAqcmVzdWx0ID0gbnVsbHB0cjsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50
KTsKICAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGRvbUVsZW1lbnQ7Ci0gICAgZG9tRWxlbWVudC5h
ZG9wdFJlZihET01IVE1MRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2UoaW5wdXRFbGVtZW50LT5mb3Jt
KCkpKTsKKyAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0
YW5jZShpbnB1dEVsZW1lbnQuZm9ybSgpKSk7CiAgICAgaWYgKGRvbUVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBkb21FbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUhUTUxFbGVtZW50LCAo
dm9pZCoqKSByZXN1bHQpOwogICAgIHJldHVybiBFX0ZBSUw7CkBAIC0xMDc1LDggKzEwNzUsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OmRpc2FibGVk
KAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkKIHsKICAgICBBU1NF
UlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50
KTsKLSAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSA/
IFRSVUUgOiBGQUxTRTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICAqcmVzdWx0ID0gaW5wdXRF
bGVtZW50LmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gVFJVRSA6IEZBTFNFOwogICAgIHJldHVy
biBTX09LOwogfQogICAgIApAQCAtMTExOSw4ICsxMTE5LDggQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSgKICAgICAgICAgLyogW3JldHZh
bF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hU
TUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgKnJlc3VsdCA9IGlu
cHV0RWxlbWVudC0+aXNSZWFkT25seSgpID8gVFJVRSA6IEZBTFNFOworICAgIEhUTUxJbnB1dEVs
ZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1l
bnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNSZWFkT25seSgpID8gVFJVRSA6IEZB
TFNFOwogICAgIHJldHVybiBTX09LOwogfQogICAgIApAQCAtMTE4NCw5ICsxMTg0LDkgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKAogICAg
ICAgICAvKiBbaW5dICovIEJTVFIgdHlwZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlz
SFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVt
ZW50KTsKICAgICBXVEY6OlN0cmluZyB0eXBlU3RyaW5nKHR5cGUsIFN5c1N0cmluZ0xlbih0eXBl
KSk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRUeXBlKHR5cGVTdHJpbmcpOworICAgIGlucHV0RWxl
bWVudC5zZXRUeXBlKHR5cGVTdHJpbmcpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIApAQCAt
MTIwOCw4ICsxMjA4LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRF
bGVtZW50Ojp2YWx1ZSgKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQp
CiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50
KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KG1fZWxlbWVudCk7Ci0gICAgV1RGOjpTdHJpbmcgdmFsdWVTdHJpbmcgPSBpbnB1dEVsZW1l
bnQtPnZhbHVlKCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgV1RGOjpTdHJpbmcgdmFsdWVT
dHJpbmcgPSBpbnB1dEVsZW1lbnQudmFsdWUoKTsKICAgICAqcmVzdWx0ID0gQlN0cmluZyh2YWx1
ZVN0cmluZykucmVsZWFzZSgpOwogICAgIGlmICh2YWx1ZVN0cmluZy5sZW5ndGgoKSAmJiAhKnJl
c3VsdCkKICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CkBAIC0xMjIwLDggKzEyMjAsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVl
KAogICAgICAgICAvKiBbaW5dICovIEJTVFIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgaW5w
dXRFbGVtZW50LT5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2
YWx1ZSkpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0VmFsdWUo
U3RyaW5nKChVQ2hhciopIHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKQEAgLTEyMzAsMTYgKzEyMzAsMTYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZvclVzZXIoCiB7CiAgICAgQVNTRVJU
KG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsK
LSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQo
bV9lbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlRm9yVXNlcihTdHJpbmcoc3Rh
dGljX2Nhc3Q8VUNoYXIqPih2YWx1ZSksIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKKyAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
bV9lbGVtZW50KTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0
aWNfY2FzdDxVQ2hhcio+KHZhbHVlKSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOwogICAgIHJldHVy
biBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1l
bnQ6OnNlbGVjdCggdm9pZCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0
RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQtPnNlbGVj
dCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZWxlY3QoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTEyNTMsOCArMTI1Myw4IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoCiAg
ICAgLyogW2luXSAqLyBsb25nIHN0YXJ0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNI
VE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVu
dC0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlu
cHV0RWxlbWVudC5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKQEAgLTEyNjIsOCArMTI2Miw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBs
b25nICpzdGFydCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVu
dChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAqc3RhcnQgPSBpbnB1dEVsZW1lbnQtPnNl
bGVjdGlvblN0YXJ0KCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKnN0YXJ0ID0gaW5wdXRF
bGVtZW50LnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEyNzEs
OCArMTI3MSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVu
dDo6c2V0U2VsZWN0aW9uRW5kKAogICAgIC8qIFtpbl0gKi8gbG9uZyBlbmQpCiB7CiAgICAgQVNT
RVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVu
dCk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKKyAgICBIVE1MSW5w
dXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9l
bGVtZW50KTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0U2VsZWN0aW9uRW5kKGVuZCk7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKQEAgLTEyODAsOCArMTI4MCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5kKAogICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gbG9uZyAqZW5kKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5w
dXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICplbmQgPSBpbnB1dEVsZW1l
bnQtPnNlbGVjdGlvbkVuZCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICplbmQgPSBpbnB1
dEVsZW1lbnQuc2VsZWN0aW9uRW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEyOTIs
OCArMTI5Miw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVu
dDo6aXNUZXh0RmllbGQoCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlz
SFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAqcmVzdWx0ID0g
aW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpID8gVFJVRSA6IEZBTFNFOworICAgIEhUTUxJbnB1
dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNUZXh0RmllbGQoKSA/IFRSVUUg
OiBGQUxTRTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTMyOCwxMyArMTMyOCwxMyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlcGxhY2VDaGFy
YWN0ZXJzSW5SYW5nZSgKIAogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hU
TUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7CisgICAgSFRNTElucHV0RWxl
bWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVu
dCk7CiAKLSAgICBTdHJpbmcgbmV3VmFsdWUgPSBpbnB1dEVsZW1lbnQtPnZhbHVlKCk7CisgICAg
U3RyaW5nIG5ld1ZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlKCk7CiAgICAgU3RyaW5nIHdlYkNv
cmVSZXBsYWNlbWVudFN0cmluZyhzdGF0aWNfY2FzdDxVQ2hhcio+KHJlcGxhY2VtZW50U3RyaW5n
KSwgU3lzU3RyaW5nTGVuKHJlcGxhY2VtZW50U3RyaW5nKSk7CiAgICAgbmV3VmFsdWUucmVwbGFj
ZShzdGFydFRhcmdldCwgZW5kVGFyZ2V0IC0gc3RhcnRUYXJnZXQsIHdlYkNvcmVSZXBsYWNlbWVu
dFN0cmluZyk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRWYWx1ZShuZXdWYWx1ZSk7Ci0gICAgaW5w
dXRFbGVtZW50LT5zZXRTZWxlY3Rpb25SYW5nZShpbmRleCwgbmV3VmFsdWUubGVuZ3RoKCkpOwor
ICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZShuZXdWYWx1ZSk7CisgICAgaW5wdXRFbGVtZW50LnNl
dFNlbGVjdGlvblJhbmdlKGluZGV4LCBuZXdWYWx1ZS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4g
U19PSzsKIH0KQEAgLTEzNDUsOSArMTM0NSw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSgKIHsKICAgICBBU1NFUlQobV9lbGVt
ZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1l
bnQpOwotICAgICpzdGFydCA9IGlucHV0RWxlbWVudC0+c2VsZWN0aW9uU3RhcnQoKTsKLSAgICAq
ZW5kID0gaW5wdXRFbGVtZW50LT5zZWxlY3Rpb25FbmQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsK
KyAgICAqc3RhcnQgPSBpbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQoKTsKKyAgICAqZW5kID0g
aW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0x
MzU2LDggKzEzNTYsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVs
ZW1lbnQ6OnNldEF1dG9maWxsZWQoCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNT
RVJUKGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1
dEVsZW1lbnQtPnNldEF1dG9maWxsZWQoISFmaWxsZWQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwor
ICAgIGlucHV0RWxlbWVudC5zZXRBdXRvZmlsbGVkKCEhZmlsbGVkKTsKICAgICByZXR1cm4gU19P
SzsKIH0KIApAQCAtMTM2Niw4ICsxMzY2LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MSW5wdXRFbGVtZW50Ojppc0F1dG9maWxsZWQoCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7CiAgICAgQVNTRVJUKGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50
KTsKLSAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSA/IFRSVUUgOiBG
QUxTRTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50Lmlz
QXV0b2ZpbGxlZCgpID8gVFJVRSA6IEZBTFNFOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0x
Mzg0LDcgKzEzODQsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVs
ZW1lbnQ6OmlzVXNlckVkaXRlZCgKICAgICBCT09MIHRleHRGaWVsZCA9IEZBTFNFOwogICAgIGlm
IChGQUlMRUQoaXNUZXh0RmllbGQoJnRleHRGaWVsZCkpIHx8ICF0ZXh0RmllbGQpCiAgICAgICAg
IHJldHVybiBTX09LOwotICAgIGlmICh0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KS0+bGFz
dENoYW5nZVdhc1VzZXJFZGl0KCkpCisgICAgaWYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCptX2VsZW1lbnQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpKQogICAgICAgICAqcmVzdWx0ID0g
VFJVRTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTE0MjgsOSArMTQyOCw5IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSgKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKICAgICAqcmVzdWx0ID0gMDsKICAgICBBU1NFUlQobV9lbGVtZW50
ICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MVGV4dEFyZWFF
bGVtZW50KiB0ZXh0YXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50
KTsKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICBDT01QdHI8SURPTUVsZW1lbnQ+
IGRvbUVsZW1lbnQ7Ci0gICAgZG9tRWxlbWVudC5hZG9wdFJlZihET01IVE1MRWxlbWVudDo6Y3Jl
YXRlSW5zdGFuY2UodGV4dGFyZWFFbGVtZW50LT5mb3JtKCkpKTsKKyAgICBkb21FbGVtZW50LmFk
b3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZSh0ZXh0YXJlYUVsZW1lbnQuZm9y
bSgpKSk7CiAgICAgaWYgKGRvbUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBkb21FbGVtZW50LT5R
dWVyeUludGVyZmFjZShJSURfSURPTUhUTUxFbGVtZW50LCAodm9pZCoqKSByZXN1bHQpOwogICAg
IHJldHVybiBFX0ZBSUw7CkBAIC0xNTQ1LDggKzE1NDUsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnZhbHVlKAogICAgICAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRN
TFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0
ZXh0YXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBX
VEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IHRleHRhcmVhRWxlbWVudC0+dmFsdWUoKTsKKyAgICBI
VE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFy
ZWFFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IHRl
eHRhcmVhRWxlbWVudC52YWx1ZSgpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKHZhbHVlU3RyaW5n
KS5yZWxlYXNlKCk7CiAgICAgaWYgKHZhbHVlU3RyaW5nLmxlbmd0aCgpICYmICEqcmVzdWx0KQog
ICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKQEAgLTE1NTcsMTYgKzE1NTcsMTYgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZSgK
ICAgICAgICAgLyogW2luXSAqLyBCU1RSIHZhbHVlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQg
JiYgaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHRleHRhcmVhRWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQp
OwotICAgIHRleHRhcmVhRWxlbWVudC0+c2V0VmFsdWUoU3RyaW5nKChVQ2hhciopIHZhbHVlLCBT
eXNTdHJpbmdMZW4odmFsdWUpKSk7CisgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dGFyZWFF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAg
dGV4dGFyZWFFbGVtZW50LnNldFZhbHVlKFN0cmluZygoVUNoYXIqKSB2YWx1ZSwgU3lzU3RyaW5n
TGVuKHZhbHVlKSkpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QoIHZvaWQpCiB7CiAgICAg
QVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50KSk7Ci0g
ICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dGFyZWFFbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFF
bGVtZW50KG1fZWxlbWVudCk7Ci0gICAgdGV4dGFyZWFFbGVtZW50LT5zZWxlY3QoKTsKKyAgICBI
VE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFy
ZWFFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICB0ZXh0YXJlYUVsZW1lbnQuc2VsZWN0KCk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTE1ODAsNyArMTU4MCw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKAogCiAgICAg
KnJlc3VsdCA9IEZBTFNFOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MVGV4dEFyZWFF
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIGlmICh0b0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVt
ZW50KS0+bGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCisgICAgaWYgKGRvd25jYXN0PEhUTUxUZXh0
QXJlYUVsZW1lbnQ+KCptX2VsZW1lbnQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpKQogICAgICAg
ICAqcmVzdWx0ID0gVFJVRTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTE2MDYsMTAgKzE2MDYs
MTAgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSUZyYW1lRWxlbWVudDo6Y29u
dGVudEZyYW1lKAogewogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OwotICAgICpyZXN1bHQgPSAwOworICAgICpyZXN1bHQgPSBudWxscHRyOwogICAgIEFTU0VSVCht
X2VsZW1lbnQpOwotICAgIEhUTUxJRnJhbWVFbGVtZW50KiBpRnJhbWVFbGVtZW50ID0gdG9IVE1M
SUZyYW1lRWxlbWVudChtX2VsZW1lbnQpOwotICAgIENPTVB0cjxJV2ViRnJhbWU+IHdlYkZyYW1l
ID0ga2l0KGlGcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKKyAgICBIVE1MSUZyYW1lRWxl
bWVudCYgaUZyYW1lRWxlbWVudCA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqbV9lbGVt
ZW50KTsKKyAgICBDT01QdHI8SVdlYkZyYW1lPiB3ZWJGcmFtZSA9IGtpdChpRnJhbWVFbGVtZW50
LmNvbnRlbnRGcmFtZSgpKTsKICAgICBpZiAoIXdlYkZyYW1lKQogICAgICAgICByZXR1cm4gRV9G
QUlMOwogICAgIHJldHVybiB3ZWJGcmFtZS5jb3B5UmVmVG8ocmVzdWx0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZy
YW1lLmNwcAppbmRleCA3ODhhMmU4MGYxY2ZhOWU4M2QyMzUzOWM4NzA3MjVmOGJkMmYxMjQzLi44
YzZjNDVjMzI5Yzk4MmUzYTM1M2QxNTBlZTYxOGQ1YTBjZDhjOWIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJh
bWUuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIEVsZW1lbnQgKmVsZW1lbnRGcm9tRE9N
RWxlbWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZv
cm1FbGVtZW50RnJvbURPTUVsZW1lbnQoSURPTUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBJRE9NRWxlbWVudFByaXZhdGUqIGVsZVByaXY7CiAgICAgSFJFU1VMVCBociA9IGVsZW1l
bnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NRWxlbWVudFByaXZhdGUsICh2b2lkKiopICZlbGVQ
cml2KTsKQEAgLTIwMywxNSArMjAzLDE1IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoSURPTUVsZW1lbnQgKmVsZW1lbnQpCiAgICAgICAgIGhyID0g
ZWxlUHJpdi0+Y29yZUVsZW1lbnQoKHZvaWQqKikmZWxlKTsKICAgICAgICAgZWxlUHJpdi0+UmVs
ZWFzZSgpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBlbGUgJiYgaXNIVE1MRm9ybUVs
ZW1lbnQoZWxlKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxGb3JtRWxlbWVudChlbGUpOwor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlKTsKICAgICB9
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChJRE9NRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIElET01FbGVtZW50UHJpdmF0ZSogZWxlUHJpdjsKICAgICBIUkVT
VUxUIGhyID0gZWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lET01FbGVtZW50UHJpdmF0ZSwg
KHZvaWQqKikgJmVsZVByaXYpOwpAQCAtMjIwLDkgKzIyMCw5IEBAIHN0YXRpYyBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChJRE9NRWxlbWVudCogZWxlbWVudCkK
ICAgICAgICAgaHIgPSBlbGVQcml2LT5jb3JlRWxlbWVudCgodm9pZCoqKSZlbGUpOwogICAgICAg
ICBlbGVQcml2LT5SZWxlYXNlKCk7CiAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGVsZSAm
JiBpc0hUTUxJbnB1dEVsZW1lbnQoZWxlKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxJbnB1
dEVsZW1lbnQoZWxlKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PihlbGUpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogLy8gV2ViRnJhbWVQcml2YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZS5jcHAKaW5kZXggMWRjMGI0YjUwMzA3NGMyYjFhNTUzY2Q4OTAwYmQ1MWM1
MmFlNjhkNC4uYzYxMmMyYzBiYTNiMmYwMDNiZmFkZjhkMjVlZTVkZTc2MDRmMzI0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC0xOTksNTUg
KzE5OSw1NSBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6dmlzaWJsZVJhbmdlKCkgYwogCiB2b2lkIEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZTo6c2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkpCisg
ICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHRvSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT5zZXRWYWx1ZUZvclVzZXIodmFs
dWUpOworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX25vZGUpLnNldFZhbHVlRm9y
VXNlcih2YWx1ZSk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjppc0hUTUxJ
bnB1dEVsZW1lbnRBdXRvZmlsbGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzSFRNTElucHV0RWxl
bWVudChtX25vZGUuZ2V0KCkpKQorICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KCptX25vZGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxl
bWVudChtX25vZGUuZ2V0KCkpLT5pc0F1dG9maWxsZWQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuaXNBdXRvZmlsbGVkKCk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpzZXRIVE1MSW5wdXRFbGVtZW50QXV0b2ZpbGxlZChib29s
IGZpbGxlZCkKIHsKLSAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpKQor
ICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KCptX25vZGUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICB0b0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKS0+c2V0QXV0b2ZpbGxlZChmaWxs
ZWQpOworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX25vZGUpLnNldEF1dG9maWxs
ZWQoZmlsbGVkKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJbnB1
dEVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoKQogewotICAgIGlmICghaXNIVE1MSW5wdXRF
bGVtZW50KG1fbm9kZS5nZXQoKSkpCisgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1l
bnQobV9ub2RlLmdldCgpKS0+bGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX25vZGUpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgp
OwogfQogCiBib29sIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6aHRtbFRleHRBcmVhRWxlbWVu
dExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpCiB7Ci0gICAgaWYgKCFpc0hUTUxUZXh0QXJlYUVsZW1l
bnQobV9ub2RlLmdldCgpKSkKKyAgICBpZiAoIWlzSFRNTFRleHRBcmVhRWxlbWVudCgqbV9ub2Rl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHRvSFRNTFRleHRBcmVhRWxl
bWVudChtX25vZGUuZ2V0KCkpLT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fbm9kZSkubGFzdENoYW5nZVdhc1VzZXJF
ZGl0KCk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjppc1RleHRGaWVsZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpICYm
IHRvSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT5pc1RleHQoKTsKKyAgICByZXR1cm4g
aXNIVE1MSW5wdXRFbGVtZW50KCptX25vZGUpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCptX25vZGUpLmlzVGV4dCgpOwogfQogCiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGFibGVDZWxsRWxlbWVudENlbGxB
Ym92ZSgpCiB7CiAgICAgaWYgKCFtX25vZGUtPmhhc1RhZ05hbWUodGRUYWcpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZ2V0T3JDcmVh
dGUoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihtX25vZGUuZ2V0KCkpLT5jZWxs
QWJvdmUoKSk7CisgICAgcmV0dXJuIGdldE9yQ3JlYXRlKHN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50Jj4oKm1fbm9kZSkuY2VsbEFib3ZlKCkpOwogfQogCiBQYXNzUmVmUHRyPFdlYkZy
YW1lPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmRvY3VtZW50RnJhbWUoKQpAQCAtMjc2LDEw
ICsyNzYsMTAgQEAgUGFzc1JlZlB0cjxXZWJGcmFtZT4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjpodG1sRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCkKIAogUGFzc1JlZlB0cjxXZWJGcmFtZT4g
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sSUZyYW1lRWxlbWVudENvbnRlbnRGcmFtZSgp
CiB7Ci0gICAgaWYgKCFtX25vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkKKyAgICBpZiAoIWlz
SFRNTElGcmFtZUVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgRnJhbWUqIGZyYW1lID0gdG9IVE1MSUZyYW1lRWxlbWVudChtX25vZGUuZ2V0KCkpLT5jb250
ZW50RnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVu
dD4oKm1fbm9kZSkuY29udGVudEZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQppbmRleCBm
MDVmZDI1MzliNWUwODQ2YWE0ZDg3MDMyYmYzOWRmY2M5M2ZmZGNhLi4wYzRhNmNiOTgxYzkwNDVk
MWViYmI4N2NlMjI3NDRlNWQyNWQwNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0
aW9uLm1tCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6
dXBkYXRlR2VvbWV0cnkoKQogCiB2b2lkIFBERlBsdWdpbkNob2ljZUFubm90YXRpb246OmNvbW1p
dCgpCiB7Ci0gICAgY2hvaWNlQW5ub3RhdGlvbigpLnN0cmluZ1ZhbHVlID0gdG9IVE1MU2VsZWN0
RWxlbWVudChlbGVtZW50KCkpLT52YWx1ZSgpOworICAgIGNob2ljZUFubm90YXRpb24oKS5zdHJp
bmdWYWx1ZSA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PihlbGVtZW50KCkpLT52YWx1ZSgp
OwogCiAgICAgUERGUGx1Z2luQW5ub3RhdGlvbjo6Y29tbWl0KCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0
aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5U
ZXh0QW5ub3RhdGlvbi5tbQppbmRleCBhNWQyZjVlNmJiOTM1MDFlYjc2MDNlNjUyMzkzY2UxNGI5
MDA4ZGVkLi5lMjQwZmM4MGE0ZmM3ODhlYTFiMGM4NDkxMDMyZmExNzYzMmI5MTkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRB
bm5vdGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0KQEAgLTEwNSw5ICsxMDUsOSBAQCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IFBERlBsdWdpblRleHRBbm5vdGF0aW9uOjpjcmVhdGVBbm5vdGF0aW9uRWxlbWVu
dCgpCiAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRleHRBbGlnbiwgY3NzQWxpZ25tZW50VmFsdWVGb3JOU1RleHRBbGlnbm1lbnQodGV4dEFubm90
YXRpb24uYWxpZ25tZW50KSk7CiAKICAgICBpZiAoaXNNdWx0aWxpbmUpCi0gICAgICAgIHRvSFRN
TFRleHRBcmVhRWxlbWVudChzdHlsZWRFbGVtZW50KS0+c2V0VmFsdWUodGV4dEFubm90YXRpb24u
c3RyaW5nVmFsdWUpOworICAgICAgICBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PihzdHls
ZWRFbGVtZW50KS0+c2V0VmFsdWUodGV4dEFubm90YXRpb24uc3RyaW5nVmFsdWUpOwogICAgIGVs
c2UKLSAgICAgICAgdG9IVE1MSW5wdXRFbGVtZW50KHN0eWxlZEVsZW1lbnQpLT5zZXRWYWx1ZSh0
ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1
ZSk7CiAKICAgICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFBE
RlBsdWdpblRleHRBbm5vdGF0aW9uOjpjb21taXQoKQogCiBTdHJpbmcgUERGUGx1Z2luVGV4dEFu
bm90YXRpb246OnZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudChlbGVtZW50KCkpLT52YWx1ZSgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCgpKS0+dmFsdWUoKTsKIH0KIAogYm9vbCBQ
REZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDEw
M2Y4NTc2MmMwYmI5MWI4MjYzODcwZjI3NmYzZGM0NWViZDI1NTguLjc2MzgzNmJmNDE2MzEzYjFm
MWQ0N2I0Mjc1YjRmYTE5NTg0OThmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIFBsdWdp
blZpZXc6OmluaXRpYWxpemVQbHVnaW4oKQogICAgIH0KIAogI2lmIEVOQUJMRShQUklNQVJZX1NO
QVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCog
cGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG1fcGx1Z2luRWxl
bWVudC5nZXQoKSk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4obV9wbHVnaW5FbGVtZW50Lmdl
dCgpKTsKICAgICBtX2RpZFBsdWdJblN0YXJ0T2ZmU2NyZWVuID0gIW1fd2ViUGFnZS0+cGx1Z0lu
SW50ZXJzZWN0c1NlYXJjaFJlY3QoKnBsdWdJbkltYWdlRWxlbWVudCk7CiAjZW5kaWYKICAgICBt
X3BsdWdpbi0+aW5pdGlhbGl6ZSh0aGlzLCBtX3BhcmFtZXRlcnMpOwpAQCAtMTcxMyw3ICsxNzEz
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogICAgIEFT
U0VSVChtX3BsdWdpbik7CiAKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5f
SEVVUklTVElDKQotICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBsdWdJbkltYWdlRWxlbWVu
dCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChtX3BsdWdpbkVsZW1lbnQuZ2V0KCkpOworICAg
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ+KG1fcGx1Z2luRWxlbWVudC5nZXQoKSk7CiAgICAgYm9vbCBp
c1BsdWdJbk9uU2NyZWVuID0gbV93ZWJQYWdlLT5wbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdCgq
cGx1Z0luSW1hZ2VFbGVtZW50KTsKICAgICBib29sIHBsdWdJbkNhbWVPblNjcmVlbiA9IGlzUGx1
Z0luT25TY3JlZW4gJiYgbV9kaWRQbHVnSW5TdGFydE9mZlNjcmVlbjsKICAgICBib29sIHNuYXBz
aG90Rm91bmQgPSBmYWxzZTsKQEAgLTE3ODEsNyArMTc4MSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbigpCiAKICAgICBtX2RpZFJlY2VpdmVVc2Vy
SW50ZXJhY3Rpb24gPSB0cnVlOwogCi0gICAgV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVu
dCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG1fcGx1Z2lu
RWxlbWVudC5nZXQoKSk7CisgICAgV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1
Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4obV9wbHVn
aW5FbGVtZW50LmdldCgpKTsKICAgICBTdHJpbmcgcGFnZU9yaWdpbiA9IHBsdWdJbkltYWdlRWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwo
KS5ob3N0KCk7CiAgICAgU3RyaW5nIHBsdWdpbk9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC0+
bG9hZGVkVXJsKCkuaG9zdCgpOwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHBsdWdJbkltYWdlRWxl
bWVudC0+bG9hZGVkTWltZVR5cGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCBmM2M5
YmRkNWVmMGY1NDQwODM0ZmFmZjllN2MyNDAxY2IxMzhjYjI1Li5iNTE3NjNlYTUwZDcxNDQ0NGM3
MzZlOGYxMGUzNGEyNjM4ZWZkZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0xODEs
MTMgKzE4MSwxMyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2Vk
KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNU
ZXh0KCkpCisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKmVsZW1lbnQpOworICAgIGlmICghaW5wdXRFbGVtZW50LmlzVGV4dCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6
ZnJvbUNvcmVGcmFtZSgqZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBBU1NFUlQo
d2ViRnJhbWUpOwotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuZGlkRm9j
dXNUZXh0RmllbGQobV9wYWdlLCBpbnB1dEVsZW1lbnQsIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLmRpZEZvY3VzVGV4dEZpZWxkKG1fcGFnZSwgJmlu
cHV0RWxlbWVudCwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNl
ZEZyYW1lQ2hhbmdlZChGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXgg
YmZmNzZmMmU0YWI0ZDdjMmIxOGE2ZjIxMDNmZDA1M2I2NWMwNmY3NC4uMTIxNDE3ZTlkYTYwYTg1
YjMzNzA5ZWVjOTA0YzYxYWNhZjYwZWU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAt
MzAxLDcgKzMwMSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVk
aXRpbmcoRWxlbWVudCogZWxlbWVudCkKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFt
ZTo6ZnJvbUNvcmVGcmFtZSgqZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBBU1NF
UlQod2ViRnJhbWUpOwogCi0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50
ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcobV9wYWdlLCB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVu
dCksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRl
eHRGaWVsZERpZEJlZ2luRWRpdGluZyhtX3BhZ2UsIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0Rmll
bGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVu
dCkKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBBU1NFUlQod2ViRnJhbWUpOwogCi0gICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RmllbGREaWRFbmRFZGl0aW5n
KG1fcGFnZSwgdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CisgICAgbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RmllbGREaWRFbmRFZGl0aW5nKG1f
cGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCksIHdlYkZyYW1lKTsKIH0K
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50
KiBlbGVtZW50KQpAQCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0
RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKICAgICBXZWJGcmFtZSogd2Vi
RnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFt
ZSgpKTsKICAgICBBU1NFUlQod2ViRnJhbWUpOwogCi0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQobV9wYWdlLCB0b0hUTUxJbnB1
dEVsZW1lbnQoZWxlbWVudCksIHdlYkZyYW1lLCBpbml0aWF0ZWRCeVVzZXJUeXBpbmcpOworICAg
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkudGV4dERpZENoYW5nZUluVGV4dEZp
ZWxkKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCksIHdlYkZyYW1l
LCBpbml0aWF0ZWRCeVVzZXJUeXBpbmcpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4
dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCogZWxlbWVudCkKQEAgLTMzNiw3ICszMzYsNyBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCog
ZWxlbWVudCkKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFt
ZSgqZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBBU1NFUlQod2ViRnJhbWUpOwog
Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYShtX3BhZ2UsIHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KSwgd2ViRnJhbWUp
OworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkudGV4dERpZENoYW5nZUlu
VGV4dEFyZWEobV9wYWdlLCBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KSwg
d2ViRnJhbWUpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQwMyw3ICs0MDMsNyBAQCBi
b29sIFdlYkVkaXRvckNsaWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQq
IGVsZW1lbnQsIEtleWJvYXJkRXZlbgogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
Ojpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VS
VCh3ZWJGcmFtZSk7CiAKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGll
bnQoKS5zaG91bGRQZXJmb3JtQWN0aW9uSW5UZXh0RmllbGQobV9wYWdlLCB0b0hUTUxJbnB1dEVs
ZW1lbnQoZWxlbWVudCksIHRvSW5wdXRGaWVsZEFjdGlvbihhY3Rpb25UeXBlKSwgd2ViRnJhbWUp
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZFBl
cmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oYWN0aW9uVHlwZSksIHdlYkZyYW1lKTsKIH0K
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxl
bWVudCogZWxlbWVudCkKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZy
YW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVu
dCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3Bh
Z2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwgdG9JbnB1dEZpZWxkQWN0aW9uKFdLSW5w
dXRGaWVsZEFjdGlvblR5cGVJbnNlcnREZWxldGUpLCB3ZWJGcmFtZSk7CisgICAgbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS5zaG91bGRQZXJmb3JtQWN0aW9uSW5UZXh0RmllbGQo
bV9wYWdlLCBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgdG9JbnB1dEZpZWxk
QWN0aW9uKFdLSW5wdXRGaWVsZEFjdGlvblR5cGVJbnNlcnREZWxldGUpLCB3ZWJGcmFtZSk7CiB9
CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNl
bGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZTYyYWNmZDljNDZh
ODU1MWMzZTg0NDYyZWEwYTEyZWJlYzEyYmY4Ni4uNWE3YjJjMzFkNTNmNDM5NGU5Y2NmZmJlOTVi
MWRiY2M4OGI3ZjZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcApAQCAtNjI0LDcgKzYyNCw3IEBAIFBhc3NSZWZQdHI8UGx1Z2luPiBXZWJQYWdl
OjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1lLCBIVE1MUGx1Z0luRWxlbWVudCogcGx1CiAg
ICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCktPnJlc3BvbnNlVVJMKCkuc3RyaW5nKCk7CiAKICNpZiBFTkFCTEUoUFJJ
TUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQotICAgIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQmIHBsdWdpbkltYWdlRWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudCgqcGx1
Z2luRWxlbWVudCk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z2luSW1hZ2VFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oKnBsdWdpbkVsZW1lbnQpOwog
ICAgIHVuc2lnbmVkIHBsdWdpbkFyZWEgPSAwOwogICAgIFBsdWdpblByb2Nlc3NUeXBlIHByb2Nl
c3NUeXBlID0gcGx1Z2luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPT0gSFRNTFBsdWdJbkVsZW1l
bnQ6OldhaXRpbmdGb3JTbmFwc2hvdCAmJiAhKHBsdWdJbklzUHJpbWFyeVNpemUocGx1Z2luSW1h
Z2VFbGVtZW50LCBwbHVnaW5BcmVhKSAmJiAhcGx1Z0luSW50ZXJzZWN0c1NlYXJjaFJlY3QocGx1
Z2luSW1hZ2VFbGVtZW50KSkgPyBQbHVnaW5Qcm9jZXNzVHlwZVNuYXBzaG90IDogUGx1Z2luUHJv
Y2Vzc1R5cGVOb3JtYWw7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDE1YjljOTBhZTk0ZGRiNmI3NDEzMmEy
ODc2MTgyZjk5YjQ5MjUxYWMuLjY1ZTZlOWQyNWQzNzE1ZGNhODA1MjU2OGFjZmZiM2M1MmY0YTJm
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KQEAgLTYxMiw5ICs2MTIsOSBAQCB2b2lkIFdlYlBhZ2U6OnNldEFzc2lzdGVk
Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKCFtX2Fzc2lzdGVkTm9k
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9hc3Npc3Rl
ZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQgKmVsZW1lbnQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAgICAgICBlbGVtZW50LT5z
ZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICBpZiAoaXNI
VE1MSW5wdXRFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9k
ZSk7CisgICAgICAgIGVsZW1lbnQuc2V0VmFsdWUodmFsdWUsIERpc3BhdGNoSW5wdXRBbmRDaGFu
Z2VFdmVudCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBzaG91bGQgYWxzbyBoYW5kbGUgdGhlIGNh
c2Ugb2YgSFRNTFNlbGVjdEVsZW1lbnQuCiB9CkBAIC02MjMsMTggKzYyMywxOCBAQCB2b2lkIFdl
YlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlIHZhbHVlKQogewogICAg
IGlmICghbV9hc3Npc3RlZE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNIVE1MSW5w
dXRFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50ICplbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKTsK
LSAgICAgICAgZWxlbWVudC0+c2V0VmFsdWVBc051bWJlcih2YWx1ZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTiwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICBpZiAoaXNIVE1MSW5wdXRF
bGVtZW50KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxl
bWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAg
ICAgIGVsZW1lbnQuc2V0VmFsdWVBc051bWJlcih2YWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTiwg
RGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKICAgICB9CiB9CiAKIHZvaWQgV2ViUGFnZTo6
c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011
bHRpcGxlU2VsZWN0aW9uKQogewotICAgIGlmICghbV9hc3Npc3RlZE5vZGUgfHwgIWlzSFRNTFNl
bGVjdEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpKQorICAgIGlmICghbV9hc3Npc3RlZE5v
ZGUgfHwgIWlzSFRNTFNlbGVjdEVsZW1lbnQoKm1fYXNzaXN0ZWROb2RlKQogICAgICAgICByZXR1
cm47Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQo
bV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0ZWRCeVVzZXIo
aW5kZXgsIHRydWUsIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOworICAgIEhUTUxTZWxlY3RFbGVt
ZW50JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2Rl
KTsKKyAgICBzZWxlY3Qub3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUsIGFsbG93TXVs
dGlwbGVTZWxlY3Rpb24pOwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKQEAgLTE5OTMsMTAg
KzE5OTMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGlzQXNzaXN0YWJsZU5vZGUoTm9kZSogbm9k
ZSkKICAgICBpZiAoaXNIVE1MU2VsZWN0RWxlbWVudChub2RlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgaWYgKGlzSFRNTFRleHRBcmVhRWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0dXJu
ICF0b0hUTUxUZXh0QXJlYUVsZW1lbnQobm9kZSktPmlzUmVhZE9ubHlOb2RlKCk7CisgICAgICAg
IHJldHVybiAhZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpLmlzUmVhZE9ubHlO
b2RlKCk7CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKSkgewotICAgICAgICBIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAg
ICByZXR1cm4gIWVsZW1lbnQtPmlzUmVhZE9ubHlOb2RlKCkgJiYgKGVsZW1lbnQtPmlzVGV4dEZp
ZWxkKCkgfHwgZWxlbWVudC0+aXNEYXRlRmllbGQoKSB8fCBlbGVtZW50LT5pc0RhdGVUaW1lTG9j
YWxGaWVsZCgpIHx8IGVsZW1lbnQtPmlzTW9udGhGaWVsZCgpIHx8IGVsZW1lbnQtPmlzVGltZUZp
ZWxkKCkpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICByZXR1cm4gIWVsZW1lbnQuaXNSZWFkT25s
eU5vZGUoKSAmJiAoZWxlbWVudC5pc1RleHRGaWVsZCgpIHx8IGVsZW1lbnQuaXNEYXRlRmllbGQo
KSB8fCBlbGVtZW50LmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkgfHwgZWxlbWVudC5pc01vbnRoRmll
bGQoKSB8fCBlbGVtZW50LmlzVGltZUZpZWxkKCkpOwogICAgIH0KIAogICAgIHJldHVybiBub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOwpAQCAtMjA2Niw4MSArMjA2Niw4MSBAQCB2b2lkIFdlYlBh
Z2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBp
bmZvcm1hdGlvbikKICAgICBpbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZSA9IGhhc0ZvY3VzYWJsZUVs
ZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCksIG1fcGFnZS5nZXQoKSwgdHJ1ZSk7CiAgICAgaW5m
b3JtYXRpb24uaGFzUHJldmlvdXNOb2RlID0gaGFzRm9jdXNhYmxlRWxlbWVudChtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSwgbV9wYWdlLmdldCgpLCBmYWxzZSk7CiAKLSAgICBpZiAoaXNIVE1MU2VsZWN0
RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKTsK
KyAgICBpZiAoaXNIVE1MU2VsZWN0RWxlbWVudCgqbV9hc3Npc3RlZE5vZGUpIHsKKyAgICAgICAg
SFRNTFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4o
Km1fYXNzaXN0ZWROb2RlKTsKICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1
dFR5cGU6OlNlbGVjdDsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gZWxlbWVudC0+bGlzdEl0ZW1z
KCkuc2l6ZSgpOworICAgICAgICBzaXplX3QgY291bnQgPSBlbGVtZW50Lmxpc3RJdGVtcygpLnNp
emUoKTsKICAgICAgICAgaW50IHBhcmVudEdyb3VwSUQgPSAwOwogICAgICAgICAvLyBUaGUgcGFy
ZW50IGdyb3VwIElEIGluZGljYXRlcyB0aGUgZ3JvdXAgdGhlIG9wdGlvbiBiZWxvbmdzIHRvIGFu
ZCBpcyAwIGZvciBncm91cCBlbGVtZW50cy4KICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG9wdGlv
biBlbGVtZW50cyBpbiBiZXR3ZWVuIGdyb3VwcywgdGhleSBhcmUgZ2l2ZW4gaXQncyBvd24gZ3Jv
dXAgaWRlbnRpZmllci4KICAgICAgICAgLy8gSWYgYSBzZWxlY3QgZG9lcyBub3QgaGF2ZSBncm91
cHMsIGFsbCB0aGUgb3B0aW9uIGVsZW1lbnRzIGhhdmUgZ3JvdXAgSUQgMC4KICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVu
dCogaXRlbSA9IGVsZW1lbnQtPmxpc3RJdGVtcygpW2ldOworICAgICAgICAgICAgSFRNTEVsZW1l
bnQqIGl0ZW0gPSBlbGVtZW50Lmxpc3RJdGVtcygpW2ldOwogICAgICAgICAgICAgaWYgKGlzSFRN
TE9wdGlvbkVsZW1lbnQoaXRlbSkpIHsKLSAgICAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVu
dCogb3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChpdGVtKTsKLSAgICAgICAgICAgICAgICBp
bmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmFwcGVuZChPcHRpb25JdGVtKG9wdGlvbi0+dGV4dCgp
LCBmYWxzZSwgcGFyZW50R3JvdXBJRCwgb3B0aW9uLT5zZWxlY3RlZCgpLCBvcHRpb24tPmZhc3RI
YXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpKSk7CisgICAgICAg
ICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqaXRlbSk7CisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0aW9u
cy5hcHBlbmQoT3B0aW9uSXRlbShvcHRpb24udGV4dCgpLCBmYWxzZSwgcGFyZW50R3JvdXBJRCwg
b3B0aW9uLnNlbGVjdGVkKCksIG9wdGlvbi5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6ZGlzYWJsZWRBdHRyKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxPcHRH
cm91cEVsZW1lbnQoaXRlbSkpIHsKLSAgICAgICAgICAgICAgICBIVE1MT3B0R3JvdXBFbGVtZW50
KiBncm91cCA9IHRvSFRNTE9wdEdyb3VwRWxlbWVudChpdGVtKTsKKyAgICAgICAgICAgICAgICBI
VE1MT3B0R3JvdXBFbGVtZW50JiBncm91cCA9IGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+
KCppdGVtKTsKICAgICAgICAgICAgICAgICBwYXJlbnRHcm91cElEKys7Ci0gICAgICAgICAgICAg
ICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0aW9ucy5hcHBlbmQoT3B0aW9uSXRlbShncm91cC0+Z3Jv
dXBMYWJlbFRleHQoKSwgdHJ1ZSwgMCwgZmFsc2UsIGdyb3VwLT5mYXN0SGFzQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKSkpOworICAgICAgICAgICAgICAgIGluZm9y
bWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0ZW0oZ3JvdXAuZ3JvdXBMYWJlbFRl
eHQoKSwgdHJ1ZSwgMCwgZmFsc2UsIGdyb3VwLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpkaXNhYmxlZEF0dHIpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgaW5mb3JtYXRpb24uc2VsZWN0ZWRJbmRleCA9IGVsZW1lbnQtPnNlbGVjdGVkSW5kZXgoKTsK
LSAgICAgICAgaW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCA9IGVsZW1lbnQtPm11bHRpcGxlKCk7
Ci0gICAgfSBlbHNlIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0
KCkpKSB7Ci0gICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxUZXh0
QXJlYUVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAgICAgICBpbmZvcm1hdGlvbi5h
dXRvY2FwaXRhbGl6ZVR5cGUgPSBzdGF0aWNfY2FzdDxXZWJBdXRvY2FwaXRhbGl6ZVR5cGU+KGVs
ZW1lbnQtPmF1dG9jYXBpdGFsaXplVHlwZSgpKTsKLSAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRv
Y29ycmVjdCA9IGVsZW1lbnQtPmF1dG9jb3JyZWN0KCk7CisgICAgICAgIGluZm9ybWF0aW9uLnNl
bGVjdGVkSW5kZXggPSBlbGVtZW50LnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgaW5mb3JtYXRp
b24uaXNNdWx0aVNlbGVjdCA9IGVsZW1lbnQubXVsdGlwbGUoKTsKKyAgICB9IGVsc2UgaWYgKGlz
SFRNTFRleHRBcmVhRWxlbWVudCgqbV9hc3Npc3RlZE5vZGUpKSB7CisgICAgICAgIEhUTUxUZXh0
QXJlYUVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9h
c3Npc3RlZE5vZGUpOworICAgICAgICBpbmZvcm1hdGlvbi5hdXRvY2FwaXRhbGl6ZVR5cGUgPSBz
dGF0aWNfY2FzdDxXZWJBdXRvY2FwaXRhbGl6ZVR5cGU+KGVsZW1lbnQuYXV0b2NhcGl0YWxpemVU
eXBlKCkpOworICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gZWxlbWVudC5hdXRv
Y29ycmVjdCgpOwogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6
VGV4dEFyZWE7Ci0gICAgICAgIGluZm9ybWF0aW9uLmlzUmVhZE9ubHkgPSBlbGVtZW50LT5pc1Jl
YWRPbmx5KCk7Ci0gICAgICAgIGluZm9ybWF0aW9uLnZhbHVlID0gZWxlbWVudC0+dmFsdWUoKTsK
LSAgICB9IGVsc2UgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkp
IHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVu
dChtX2Fzc2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9
IGVsZW1lbnQtPmZvcm0oKTsKKyAgICAgICAgaW5mb3JtYXRpb24uaXNSZWFkT25seSA9IGVsZW1l
bnQuaXNSZWFkT25seSgpOworICAgICAgICBpbmZvcm1hdGlvbi52YWx1ZSA9IGVsZW1lbnQudmFs
dWUoKTsKKyAgICB9IGVsc2UgaWYgKGlzSFRNTElucHV0RWxlbWVudCgqbV9hc3Npc3RlZE5vZGUp
KSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOworICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZv
cm0gPSBlbGVtZW50LmZvcm0oKTsKICAgICAgICAgaWYgKGZvcm0pCiAgICAgICAgICAgICBpbmZv
cm1hdGlvbi5mb3JtQWN0aW9uID0gZm9ybS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6YWN0aW9uQXR0cik7Ci0gICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlw
ZSA9IHN0YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXplVHlwZT4oZWxlbWVudC0+YXV0b2NhcGl0
YWxpemVUeXBlKCkpOwotICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gZWxlbWVu
dC0+YXV0b2NvcnJlY3QoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgp
KQorICAgICAgICBpbmZvcm1hdGlvbi5hdXRvY2FwaXRhbGl6ZVR5cGUgPSBzdGF0aWNfY2FzdDxX
ZWJBdXRvY2FwaXRhbGl6ZVR5cGU+KGVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBlKCkpOworICAg
ICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gZWxlbWVudC5hdXRvY29ycmVjdCgpOwor
ICAgICAgICBpZiAoZWxlbWVudC5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgICAgIGluZm9y
bWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpQYXNzd29yZDsKLSAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC0+aXNTZWFyY2hGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmlz
U2VhcmNoRmllbGQoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5w
dXRUeXBlOjpTZWFyY2g7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzRW1haWxGaWVsZCgp
KQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzRW1haWxGaWVsZCgpKQogICAgICAgICAgICAg
aW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkVtYWlsOwotICAgICAgICBlbHNl
IGlmIChlbGVtZW50LT5pc1RlbGVwaG9uZUZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1l
bnQuaXNUZWxlcGhvbmVGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5
cGUgPSBJbnB1dFR5cGU6OlBob25lOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc051bWJl
ckZpZWxkKCkpCi0gICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IGVsZW1lbnQt
PmdldEF0dHJpYnV0ZSgicGF0dGVybiIpID09ICJcXGQqIiB8fCBlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoInBhdHRlcm4iKSA9PSAiWzAtOV0qIiA/IElucHV0VHlwZTo6TnVtYmVyUGFkIDogSW5wdXRU
eXBlOjpOdW1iZXI7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzRGF0ZVRpbWVMb2NhbEZp
ZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNOdW1iZXJGaWVsZCgpKQorICAgICAg
ICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgicGF0
dGVybiIpID09ICJcXGQqIiB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgicGF0dGVybiIpID09ICJb
MC05XSoiID8gSW5wdXRUeXBlOjpOdW1iZXJQYWQgOiBJbnB1dFR5cGU6Ok51bWJlcjsKKyAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC5pc0RhdGVUaW1lTG9jYWxGaWVsZCgpKQogICAgICAgICAgICAg
aW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkRhdGVUaW1lTG9jYWw7Ci0gICAg
ICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzRGF0ZUZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaXNEYXRlRmllbGQoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBl
ID0gSW5wdXRUeXBlOjpEYXRlOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc0RhdGVUaW1l
RmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0RhdGVUaW1lRmllbGQoKSkKICAg
ICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpEYXRlVGltZTsK
LSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNUaW1lRmllbGQoKSkKKyAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC5pc1RpbWVGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVu
dFR5cGUgPSBJbnB1dFR5cGU6OlRpbWU7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzV2Vl
a0ZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNXZWVrRmllbGQoKSkKICAgICAg
ICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpXZWVrOwotICAgICAg
ICBlbHNlIGlmIChlbGVtZW50LT5pc01vbnRoRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC5pc01vbnRoRmllbGQoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBl
ID0gSW5wdXRUeXBlOjpNb250aDsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNVUkxGaWVs
ZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzVVJMRmllbGQoKSkKICAgICAgICAgICAg
IGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpVUkw7Ci0gICAgICAgIGVsc2Ug
aWYgKGVsZW1lbnQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHBhdHRlcm4gPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cGF0dGVybkF0
dHIpOworICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzVGV4dCgpKSB7CisgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHBhdHRlcm4gPSBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjpwYXR0ZXJuQXR0cik7CiAgICAgICAgICAgICBpZiAocGF0dGVybiA9PSAiXFxkKiIg
fHwgcGF0dGVybiA9PSAiWzAtOV0qIikKICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSA9IElucHV0VHlwZTo6TnVtYmVyUGFkOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlRleHQ7CiAg
ICAgICAgICAgICAgICAgaWYgKCFpbmZvcm1hdGlvbi5mb3JtQWN0aW9uLmlzRW1wdHkoKQotICAg
ICAgICAgICAgICAgICAgICAmJiAoZWxlbWVudC0+Z2V0TmFtZUF0dHJpYnV0ZSgpLmNvbnRhaW5z
KCJzZWFyY2giKSB8fCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpLmNvbnRhaW5zKCJzZWFyY2gi
KSB8fCBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dGl0bGVBdHRyKS5jb250
YWlucygic2VhcmNoIikpKQorICAgICAgICAgICAgICAgICAgICAmJiAoZWxlbWVudC5nZXROYW1l
QXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIpIHx8IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUo
KS5jb250YWlucygic2VhcmNoIikgfHwgZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6dGl0bGVBdHRyKS5jb250YWlucygic2VhcmNoIikpKQogICAgICAgICAgICAgICAgICAgICBp
bmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6U2VhcmNoOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaW5mb3JtYXRpb24uaXNSZWFkT25seSA9IGVsZW1lbnQt
PmlzUmVhZE9ubHkoKTsKLSAgICAgICAgaW5mb3JtYXRpb24udmFsdWUgPSBlbGVtZW50LT52YWx1
ZSgpOwotICAgICAgICBpbmZvcm1hdGlvbi52YWx1ZUFzTnVtYmVyID0gZWxlbWVudC0+dmFsdWVB
c051bWJlcigpOwotICAgICAgICBpbmZvcm1hdGlvbi50aXRsZSA9IGVsZW1lbnQtPnRpdGxlKCk7
CisgICAgICAgIGluZm9ybWF0aW9uLmlzUmVhZE9ubHkgPSBlbGVtZW50LmlzUmVhZE9ubHkoKTsK
KyAgICAgICAgaW5mb3JtYXRpb24udmFsdWUgPSBlbGVtZW50LnZhbHVlKCk7CisgICAgICAgIGlu
Zm9ybWF0aW9uLnZhbHVlQXNOdW1iZXIgPSBlbGVtZW50LnZhbHVlQXNOdW1iZXIoKTsKKyAgICAg
ICAgaW5mb3JtYXRpb24udGl0bGUgPSBlbGVtZW50LnRpdGxlKCk7CiAgICAgfSBlbHNlIGlmICht
X2Fzc2lzdGVkTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIGluZm9ybWF0aW9u
LmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpDb250ZW50RWRpdGFibGU7CiAgICAgICAgIGluZm9y
bWF0aW9uLmlzQXV0b2NvcnJlY3QgPSB0cnVlOyAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbG9vayBh
dCB0aGUgYXR0cmlidXRlPwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238519</attachid>
            <date>2014-09-23 00:19:02 -0700</date>
            <delta_ts>2014-09-23 08:54:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137007-20140923001859.patch</filename>
            <type>text/plain</type>
            <size>285928</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1MGU1ZWEwYmYyNzQw
OWUxOGNiMTZlOTUzMTBiNjlhMzAzNjNiMi4uZTE4N2VlYjlhNzA1ZjQ3ZTQ2MTg3ZDliZjYxNDY4
YmVmNTUxYmJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxNyBAQAorMjAxNC0wOS0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50
PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKSBhbmQgZHJvcAorICAgICAgICB0cmFuc2l0
aW9uIG1hY3JvcyBmb3IgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFs
c28gY2xlYW5zIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVs
ZW1lbnRGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hh
bmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZWRD
aGlsZHJlbkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb246OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc1NlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c2V0U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzdHJp
bmdWYWx1ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6
YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZUFjdGlvbkVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29udGFpbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVybmFsTGlua0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmFkaW9CdXR0b25Hcm91cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1p
bmVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGRUZXh0RmllbGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZUZvck1TQUEpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNMaW5rZWQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5U2xpZGVyOjppbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNsaWRlclRodW1iOjplbGVtZW50UmVjdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlOjp0aXRsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZHJlblNlbGVjdGlvbkNoYW5n
ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChvcHRpb25Gcm9tU2VsZWN0aW9uKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcDoKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENhcHRpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxkTGVuZ3RoKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
YW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c1JlYWNoYWJsZUZyb21ET00pOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICog
Y3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
Q2hlY2tlZCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6Z2V0
TmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZO
ZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6Om1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJ
c1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
aXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKiBkb20vQ3VycmVudFNjcmlwdEluY3JlbWVu
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50U2NyaXB0SW5jcmVtZW50ZXI6OkN1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlcik6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OnNldERyYWdJbWFnZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aWNvblVSTHMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc01hcE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNl
ZFVzZW1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAgICogZG9tL1Zp
c2l0ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0hhc2hGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50
VHlwZUhlbHBlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpp
bWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRmly
c3RNYXJrYWJsZSk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dp
dGhOYW1lc3BhY2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQ
ZXJmb3JtU21hcnRSZXBsYWNlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6bm9uQm91bmRhcnlTaGFk
b3dUcmVlUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6aXNJ
blBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6CisgICAgICAgICog
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRU
ZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6
CisgICAgICAgICogaHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMpOgorICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9y
eURvY3VtZW50UGFyc2VyOjpjcmVhdGVCYXNpY0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01hdGNoaW5nRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50OjpzZXRJbm5lckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OmRpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpmb3JtSW1hZ2VFbGVtZW50cyk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50Ojphc3NlcnRJdGVtQ2FuQmVJblBhc3ROYW1lc01hcCk6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hU
TUxLZXlnZW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
OjpzaGFkb3dTZWxlY3QpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OnZpcnR1YWxGb3JtKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVs
ZW1lbnRNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXMp
OgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6
Om93bmVyRGF0YUxpc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRk
KToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGh0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRQbHVn
SW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4pOgorICAgICAgICAqIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
Omhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6c2VsZWN0T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRpb25zRm9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleCk6CisgICAg
ICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN1bW1hcnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRUYWJsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Ojpyb3dBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6
bGFzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3Vz
dG9tRWxlbWVudEFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNsb25lTm9kZSk6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6
CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YWJlbHNOb2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMpOgorICAgICAgICAqIGh0bWwvTWVkaWFEb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVE
b2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNjZW5kZW50VmlkZW9FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKToK
KyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICog
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlw
ZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBl
Ojppc0tleWJvYXJkRm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6Y2hlY2tFbGVtZW50TWF0Y2hlc1Jh
ZGlvTm9kZUxpc3RGaWx0ZXIpOgorICAgICAgICAqIGh0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpvd25lckRvY3VtZW50Rm9yQ3VycmVudE5vZGUpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGV0YWlsc01hcmtlckNvbnRyb2w6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXRlclNoYWRvd0VsZW1lbnQ6Om1ldGVy
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzU2hhZG93RWxlbWVudDo6cHJvZ3Jlc3NFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAgICogbG9h
ZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6aGFuZGxlRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKiBs
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OmRp
c3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2Jq
ZWN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU3VibWl0SW1h
Z2UpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRF
bWJlZGRlZE9iamVjdFRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBk
YXRlRW1iZWRkZWRPYmplY3QpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q2FuZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZSk6CisgICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6Om1lZGlhQ29udHJvbHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OmlzTGl2ZUxpbmspOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGxhbkNvdW50ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OmZyYW1lRWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZyYW1lU2V0OjpmcmFtZVNldEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxD
YW52YXM6OmNhbnZhc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OlJlbmRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpw
YWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjppbWFnZU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0ZWRPcHRpb25Db3VudCk6
CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0
OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQp
OgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6
Om1ldGVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyOjplbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU25hcHNob3R0ZWRQbHVnSW46
OnBsdWdJbkltYWdlRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp0ZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OnRleHRBcmVhRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWRlbzo6dmlkZW9FbGVtZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVy
KToKKyAgICAgICAgKiBzdmcvc3ZndGFncy5pbjoKKyAgICAgICAgR2VuZXJhdGUgaGVscGVycyB0
byBTVkdBRWxlbWVudC4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6d2FzTGFzdENoYW5nZVVzZXJFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVu
UG9zdExheW91dFRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQ
b3B1cFZpc2libGUpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1l
bnROcyk6CisKIDIwMTQtMDktMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRW5zdXJlIHRoYXQgbGF5b3V0IGlzIHVwLXRvLWRhdGUgYmVmb3JlIGhp
dC10ZXN0aW5nIHZpYSBSZW5kZXJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKaW5kZXggNDcyNzJlMmZlM2Q3
ODFjYjg2MzdjNWM5NzY3YTQ3NWI4MjBlYmU5My4uYmIxMDlmNzA1YzRiMzkxNzZiY2I1YjExMTM1
MjA3Yjg0ZDJjMTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5
LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGRvd25j
YXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzAwNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50SU9TOjpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorCiAyMDE0LTA5LTE3ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTczNjk1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDNlNDBkMmE2MzZkNDM4N2ZjZDgxNGEwM2Rk
YzRjOTE5MTg5NWRjODUuLmRjYzJlODdjZTBiMmE2ZDBlZjQxYjEyZTQ1MjU1ZDRlM2U1ZTFhYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNC0wOS0yMiAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1MKkVsZW1l
bnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGlu
c3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRp
b25zLm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IF9zZXRBdXRvZmlsbGVkOl0p
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlk
Q2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVs
ZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJl
RGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEFyZWEpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tOgorICAgICAgICAoaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIx
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxl
bWVudCBjYXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA1MWY3YzIx
YTQzNzkwZDVhNDBlYzA3NDgwOWNmN2JhMDI3MmFmOWI2Li4zYWMwNzM1Y2RiOTNlZDAzMTAyMjUx
ZDE4MDg3OTljNmNjNDVkZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIw
MTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
ZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGRvd25jYXN0
PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkuCisKKyAgICAgICAg
KiBET01IVE1MQ2xhc3Nlcy5jcHA6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OlVSTCk6Cisg
ICAgICAgIChET01IVE1MRG9jdW1lbnQ6OmJvZHkpOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50
Ojpmb3Jtcyk6CisgICAgICAgIChET01IVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbik6CisgICAgICAg
IChET01IVE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxl
bWVudDo6b3B0aW9ucyk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxlbWVudDo6YWN0aXZhdGVJ
dGVtQXRJbmRleCk6CisgICAgICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCk6CisgICAg
ICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoRE9NSFRNTElucHV0
RWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpkaXNhYmxlZCk6
CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6
OnZhbHVlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0
aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAg
IChET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2Zp
bGxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJFZGl0ZWQpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MVGV4
dEFyZWFFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKERP
TUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUpOgorICAgICAgICAqIFdlYkZyYW1lLmNw
cDoKKyAgICAgICAgKGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQpOgorICAgICAgICAoaW5wdXRF
bGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIxICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxlbWVudCBjYXN0aW5nIGhlbHBlciBm
dW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkZTQ2Y2RlNDA5ZGQ2NTgyZDllNGI5N2IxYjM2YzI3MWU3
MmRlYzc1Li5hYjQ5YjE4ZmViODE3ZTRhYzcxNzA0NDdiM2RkNWJmMTlmNzljNThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQg
b2YgdG9IVE1MKkVsZW1lbnQoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRN
TCpFbGVtZW50KCkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9J
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVudEF1
dG9maWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjpodG1sSW5wdXRFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFF
bGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjppc1RleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29u
dGVudEZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNo
b2ljZUFubm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbkNob2ljZUFubm90
YXRpb246OmNvbW1pdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW5UZXh0QW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luVGV4dEFubm90
YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luVGV4dEFubm90YXRpb246OnZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmluaXRpYWxpemVQ
bHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNl
ckludGVyYWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Zm9jdXNl
ZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4
dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50
Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVB
c051bWJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVNlbGVj
dGVkSW5kZXgpOgorICAgICAgICAoV2ViS2l0Ojppc0Fzc2lzdGFibGVOb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBE
ZWxldGVkLgorCiAyMDE0LTA5LTIyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQ29jb2FdIEFkZCBVSSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHdpbmRvdy5j
bG9zZSgpIGlzIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKaW5kZXggZjE5NTNkNmM1YTc2OGI1MjU3YTJmNjZhZGFkNGQ0N2ZjMWU2OTVi
Ni4uZWFhMTYyM2UwNDU2YzRkMWEzNmU4MTExNTQzMmQyZTgxYzBjNGI2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xNzcsNyArMTc3
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVu
dEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKICAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50
ID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQo
KTsKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNl
ZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgaXNIVE1MQXJlYUVsZW1lbnQo
Zm9jdXNlZEVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZm9jdXNlZEltYWdlTWFwVUlFbGVtZW50
KHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KSk7CisgICAgICAgIHJldHVybiBmb2N1
c2VkSW1hZ2VNYXBVSUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxl
bWVudCkpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZm9jdXNlZERvY3VtZW50
LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWRFbGVtZW50ID8gc3RhdGljX2Nh
c3Q8Tm9kZSo+KGZvY3VzZWRFbGVtZW50KSA6IGZvY3VzZWREb2N1bWVudCk7CiAgICAgaWYgKCFv
YmopCkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KIHZvaWQgQVhP
YmplY3RDYWNoZTo6bGFiZWxDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGlzSFRNTExhYmVsRWxlbWVudChlbGVtZW50KSk7Ci0gICAgSFRNTEVsZW1lbnQqIGNvcnJlc3Bv
bmRpbmdDb250cm9sID0gdG9IVE1MTGFiZWxFbGVtZW50KGVsZW1lbnQpLT5jb250cm9sKCk7Cisg
ICAgSFRNTEVsZW1lbnQqIGNvcnJlc3BvbmRpbmdDb250cm9sID0gZG93bmNhc3Q8SFRNTExhYmVs
RWxlbWVudD4oZWxlbWVudCktPmNvbnRyb2woKTsKICAgICB0ZXh0Q2hhbmdlZChjb3JyZXNwb25k
aW5nQ29udHJvbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKaW5kZXggNjJiOTM0ZDdkM2I4NTU2M2JiZmY0NWNm
Nzg1ZTZlNzJkNzI3NjE3Yi4uMGY4ZTFkOWI1NmU3ODhmODE3NTNiMWYyMDBjZmIyNzUzYmIxYjBi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TGlzdEJveC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6Y2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0CiAgICAgaWYgKCFzZWxl
Y3ROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuICF0b0hUTUxT
ZWxlY3RFbGVtZW50KHNlbGVjdE5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKKyAgICBy
ZXR1cm4gIWRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0Tm9kZSkuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmFkZENoaWxk
cmVuKCkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hp
bGRyZW4oKQogICAgIAogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+
bGlzdEl0ZW1zKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogZG93bmNhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3ROb2RlKS5saXN0SXRlbXMoKSkgewogICAgICAgICAv
LyBUaGUgY2FzdCB0byBIVE1MRWxlbWVudCBiZWxvdyBpcyBzYWZlIGJlY2F1c2UgdGhlIG9ubHkg
b3RoZXIgcG9zc2libGUgbGlzdEl0ZW0gdHlwZQogICAgICAgICAvLyB3b3VsZCBiZSBhIFdNTEVs
ZW1lbnQsIGJ1dCBXTUwgYnVpbGRzIGRvbid0IHVzZSBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzIGF0
IGFsbC4KICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hP
cHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAK
aW5kZXggYTlmYWQ4ZDQ3MmE3M2EyYzA5Y2ZjODA1NDllYWYxMDQ2Y2U2ZDllNi4uZDg2NWM4OTVl
M2VlNjVjNjYxZGViYzFiNTBjNGFmMWYxODc5YjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxl
Y3RlZCgpIGNvbnN0CiAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVt
ZW50KG1fb3B0aW9uRWxlbWVudCktPnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5zZWxlY3RlZCgpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29u
c3QKQEAgLTE1NywxMCArMTU3LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bjo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIAog
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiB0b0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCktPnRleHQoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS50
ZXh0KCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVsZW1l
bnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxlbWVu
dCktPmdyb3VwTGFiZWxUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0R3Jv
dXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIAogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTIwMywxMCArMjAzLDEwIEBAIEhUTUxTZWxlY3RFbGVt
ZW50KiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6bGlzdEJveE9wdGlvblBhcmVudE5vZGUo
KSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hUTUxPcHRpb25F
bGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVt
ZW50KG1fb3B0aW9uRWxlbWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2Vs
ZWN0RWxlbWVudCgpOwogCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVs
ZW1lbnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxl
bWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdEdyb3VwRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkub3duZXJTZWxlY3RFbGVtZW50KCk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKaW5kZXggYTA3
MzViNGZlZmExYjNhN2QxMWZiMzM0ODZlMjEwZDdiOTcxYzljNS4uZGViMDkyMGY4Yjk4MzZjYzk4
NmEyMzgyOTY1ZGE2MDY2MmJhNmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKQEAgLTI3Nyw3
ICsyNzcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OnZhbHVlRGVzY3Jp
cHRpb24oKSBjb25zdAogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBmbG9hdCB0aW1lID0gdG9IVE1MSW5wdXRFbGVtZW50
KG5vZGUpLT52YWx1ZSgpLnRvRmxvYXQoKTsKKyAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwogICAgIHJldHVybiBsb2Nh
bGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24u
Y3BwCmluZGV4IDg4ZTJlNmVlMTU2MGRiOWMwMjgyMjJkNjMyNzIyYzE0YjcwMDZmZTYuLmVkMTdk
NGEzNzdmZTYxODVlYmRhZjAxMTdjOGVmNjg4MTdkODM0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
bi5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246
OmlzRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgLy8gaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgcmV0
dXJucyB0cnVlIGlmIHRoZSBwYXJlbnQgPHNlbGVjdD4gZWxlbWVudCBpcyBkaXNhYmxlZCwKICAg
ICAvLyB3aGljaCB3ZSBkb24ndCB3YW50LgotICAgIHJldHVybiAhdG9IVE1MT3B0aW9uRWxlbWVu
dChtX2VsZW1lbnQuZ2V0KCkpLT5vd25FbGVtZW50RGlzYWJsZWQoKTsKKyAgICByZXR1cm4gIWRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50KS5vd25FbGVtZW50RGlzYWJsZWQo
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzVmlzaWJsZSgpIGNv
bnN0CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpp
c09mZlNjcmVlbigpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpp
c1NlbGVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MT3B0aW9uRWxlbWVudChtX2Vs
ZW1lbnQuZ2V0KCkpLT5zZWxlY3RlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKm1fZWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5
TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKICAgICBp
ZiAoIWNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRv
SFRNTE9wdGlvbkVsZW1lbnQobV9lbGVtZW50LmdldCgpKS0+c2V0U2VsZWN0ZWQoYik7CisgICAg
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnNldFNlbGVjdGVkKGIpOwog
fQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9yTVNBQSgpIGNv
bnN0CkBAIC0xMTQsNyArMTE0LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb246OmVsZW1lbnRSZWN0KCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlNZW51TGlz
dE9wdGlvbjo6c3RyaW5nVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxPcHRpb25F
bGVtZW50KG1fZWxlbWVudC5nZXQoKSktPnRleHQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnRleHQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAppbmRleCAxZDUyMTlkNjMzYjA1ZDc1NmUxNDhk
NzVmNzQ3ZDg3MTMzODdhM2NlLi5mYzI1ODVkMWVmYzEzYjRkY2U0MmEzZGIwNjBlY2Q1YzYxZGI2
MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKCkKIAogICAgIG1faGF2ZUNoaWxk
cmVuID0gdHJ1ZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbGlzdEl0ZW0gOiB0b0hUTUxTZWxl
Y3RFbGVtZW50KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0
byYgbGlzdEl0ZW0gOiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdE5vZGUpLmxp
c3RJdGVtcygpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9u
ID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKICAgICAgICAg
aWYgKG9wdGlvbikgewogICAgICAgICAgICAgb3B0aW9uLT5zZXRQYXJlbnQodGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCmluZGV4IDZlY2FlMTgyNWQ4N2RiYjk3YmI4ODIzNTI4ZTkxMTBlMjM1MzExMzgu
LjY3ZjI4YjMwNzRlNmU5ZDY0ZTBhOTM2Zjc3Y2VmYWY3ZjRiZjFmNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCkBAIC0yOTEsMTggKzI5MSwxOCBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7
CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIGlm
IChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOworICAgICAgICBpZiAoaW5wdXQu
aXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKLSAgICAgICAg
aWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgIGlmIChpbnB1dC5pc1JhZGlvQnV0
dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOwotICAgICAgICBpZiAo
aW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICAgICAgaWYgKGlucHV0
LT5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICBpZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkK
ICAgICAgICAgICAgIHJldHVybiBTbGlkZXJSb2xlOwogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LT5nZXRBdHRy
aWJ1dGUodHlwZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1
dC5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dHlwZSwgImNvbG9yIikpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3JXZWxsUm9sZTsKICNlbmRp
ZgpAQCAtMzEwLDggKzMxMCw4IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0
RmllbGRSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
IHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBs
ZSgpID8gTGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIEhUTUxTZWxlY3RF
bGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2Rl
KCkpOworICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC5tdWx0aXBsZSgpID8gTGlzdEJveFJv
bGUgOiBQb3BVcEJ1dHRvblJvbGU7CiAgICAgfQogICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1l
bnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKQEAgLTQ2OSw4ICs0Njks
OCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50
KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRF
bGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzVGV4dCgpIHx8IGlucHV0LT5p
c051bWJlckZpZWxkKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICByZXR1cm4gaW5wdXQuaXNUZXh0
KCkgfHwgaW5wdXQuaXNOdW1iZXJGaWVsZCgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTUxOSw4ICs1MTksOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2
ZUltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5w
dXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9I
VE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0
b24oKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC5pc0ltYWdlQnV0dG9uKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1NCw4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAKICAgICBpZiAocm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZSAmJiBpc0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBpbnB1dC0+aXNJbWFnZUJ1
dHRvbigpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0LmlzSW1hZ2VCdXR0b24o
KTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjksNyArNzI5LDcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNU
YWdOYW1lKHNlbGVjdFRhZykgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5tdWx0aXBs
ZSgpOworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykg
JiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKCkpLm11bHRpcGxlKCk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdApAQCAtNzQy
LDkgKzc0Miw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBj
b25zdAogICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpLT5pc1Jl
YWRPbmx5KCk7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAg
ICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXQt
PmlzUmVhZE9ubHkoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmIChpbnB1dC5pc1RleHRGaWVs
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKQEAgLTgzOCw5ICs4MzgsOSBAQCBT
dHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewog
ICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlu
cHV0LT52YWx1ZUFzTnVtYmVyKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5p
c1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlQXNOdW1iZXIo
KTsKICAgICB9CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NTIsOSArODUyLDkg
QEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ewogICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsK
LSAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGlucHV0LT5tYXhpbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1Jh
bmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsKICAgICB9
CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NjYsOSArODY2LDkgQEAgZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAogZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAg
IGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0
LT5taW5pbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29u
dHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1pbmltdW0oKTsKICAgICB9CiAKICAg
ICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC05NzQsOCArOTc0LDggQEAgRWxlbWVudCogQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogc3RhdGljIGJvb2wg
aXNOb2RlQWN0aW9uRWxlbWVudChOb2RlKiBub2RlKQogewogICAgIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpICYmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LT5pc0NoZWNrYm94KCkg
fHwgaW5wdXQtPmlzVGV4dEJ1dHRvbigpIHx8IGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1
dC0+aXNJbWFnZUJ1dHRvbigpKSkKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmICghaW5wdXQuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgJiYgKGlucHV0LmlzUmFkaW9CdXR0b24oKSB8fCBpbnB1dC5p
c0NoZWNrYm94KCkgfHwgaW5wdXQuaXNUZXh0QnV0dG9uKCkgfHwgaW5wdXQuaXNGaWxlVXBsb2Fk
KCkgfHwgaW5wdXQuaXNJbWFnZUJ1dHRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzA3LDcgKzEzMDcs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlcm5hdGl2ZVRleHQoVmVjdG9y
PEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZAogICAgIAogICAgIC8vIFRoZSBmaWVsZHNldCBl
bGVtZW50IGRlcml2ZXMgaXRzIGFsdGVybmF0aXZlIHRleHQgZnJvbSB0aGUgZmlyc3QgYXNzb2Np
YXRlZCBsZWdlbmQgZWxlbWVudCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAgIGlmIChpc0hUTUxG
aWVsZFNldEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0b0hUTUxGaWVsZFNldEVsZW1lbnQo
bm9kZSktPmxlZ2VuZCgpKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb3duY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50
Pigqbm9kZSkubGVnZW5kKCkpOwogICAgICAgICBpZiAob2JqZWN0ICYmICFvYmplY3QtPmlzSGlk
ZGVuKCkpCiAgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGFj
Y2Vzc2libGVOYW1lRm9yTm9kZShvYmplY3QtPm5vZGUoKSksIEFsdGVybmF0aXZlVGV4dCkpOwog
ICAgIH0KQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OnZpc2libGVUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikKICAgICAK
ICAgICBib29sIGlzSW5wdXRUYWcgPSBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7CiAgICAgaWYg
KGlzSW5wdXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpIHsK
LSAgICAgICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoaW5wdXQtPnZh
bHVlV2l0aERlZmF1bHQoKSwgVmlzaWJsZVRleHQpKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlm
IChpbnB1dC5pc1RleHRCdXR0b24oKSkgeworICAgICAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VGV4dChpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCksIFZpc2libGVUZXh0KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjg1LDkgKzE2ODUs
OSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKIAogICAg
IGJvb2wgaXNJbnB1dFRhZyA9IGlzSFRNTElucHV0RWxlbWVudChub2RlKTsKICAgICBpZiAoaXNJ
bnB1dFRhZykgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0
RWxlbWVudChub2RlKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVmYXVsdCgpOworICAgICAgICBIVE1MSW5w
dXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAg
ICAgICAgaWYgKGlucHV0LmlzVGV4dEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0
LnZhbHVlV2l0aERlZmF1bHQoKTsKICAgICB9CiAKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0Nv
bnRyb2woKSkgewpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojp0ZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYg
KGlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpIHx8
IGlzSFRNTElucHV0RWxlbWVudChub2RlKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KG5vZGUpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogCiAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTE3Nzcs
MTYgKzE3NzcsMTYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1
ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7CiAKICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKTsKLSAgICAgICAgaW50
IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5s
aXN0SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOworICAgICAgICBpbnQgc2VsZWN0ZWRJ
bmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC5saXN0SXRlbXMoKTsK
ICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNl
bGVjdGVkSW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkgewogICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBvdmVycmlkZGVuRGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRl
eF0tPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogICAgICAgICAgICAgaWYgKCFv
dmVycmlkZGVuRGVzY3JpcHRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRkZW5EZXNjcmlwdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAoIXNlbGVjdEVsZW1l
bnQtPm11bHRpcGxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+dmFsdWUo
KTsKKyAgICAgICAgaWYgKCFzZWxlY3RFbGVtZW50Lm11bHRpcGxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZWN0RWxlbWVudC52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgfQogCkBAIC0xODEyLDEzICsxODEyLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKICAgICBpZiAoIW5v
ZGUoKSB8fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh0eXBl
QXR0cik7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pigqbm9kZSgpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1dC5n
ZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwg
ImNvbG9yIikpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OnZh
bHVlIGFsd2F5cyByZXR1cm5zIGEgc3RyaW5nIHBhcnNlYWJsZSBieSBDb2xvcigpLgotICAgIENv
bG9yIGNvbG9yKGlucHV0LT52YWx1ZSgpKTsKKyAgICBDb2xvciBjb2xvcihpbnB1dC52YWx1ZSgp
KTsKICAgICByID0gY29sb3IucmVkKCk7CiAgICAgZyA9IGNvbG9yLmdyZWVuKCk7CiAgICAgYiA9
IGNvbG9yLmJsdWUoKTsKQEAgLTE4NDIsNyArMTg0Miw3IEBAIHN0YXRpYyBTdHJpbmcgYWNjZXNz
aWJsZU5hbWVGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBhbHQ7CiAgICAgCiAg
ICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTElu
cHV0RWxlbWVudChub2RlKS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZSBub2RlIGNh
biBiZSB0dXJuZWQgaW50byBhbiBBWCBvYmplY3QsIHdlIGNhbiB1c2Ugc3RhbmRhcmQgbmFtZSBj
b21wdXRhdGlvbiBydWxlcy4KICAgICAvLyBJZiBob3dldmVyLCB0aGUgbm9kZSBjYW5ub3QgKGJl
Y2F1c2UgdGhlcmUncyBubyByZW5kZXJlciBlLmcuKSBmYWxsYmFjayB0byB1c2luZyB0aGUgYmFz
aWMgdGV4dCB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNWJlZTUzNTE1Yzk3
NzBjOTc0YTczYzVkNjNjN2EwODYwMTc0NjY4OC4uNDRjMzhjN2U4YzQ1NmU4Y2Q4ZGMyMGQyMjU4
OTExY2QzNGM3Yzc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC01MjQsOCArNTI0LDggQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0F0dGFjaG1lbnQoKSBjb25zdAogYm9v
bCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdAog
ewogICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbnB1
dEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgICAg
ICByZXR1cm4gaW5wdXQtPmlzRmlsZVVwbG9hZCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkp
OworICAgICAgICByZXR1cm4gaW5wdXQuaXNGaWxlVXBsb2FkKCk7CiAgICAgfQogICAgIAogICAg
IHJldHVybiBmYWxzZTsKQEAgLTc0MSw5ICs3NDEsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgIGlmIChjc3NCb3ggJiYgY3NzQm94
LT5pc01lbnVMaXN0KCkpIHsKICAgICAgICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBnbyBzdHJh
aWdodCB0byB0aGUgdGV4dCgpIG9mIGl0cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAvLyBUaGlz
IGhhcyB0byBiZSBvdmVycmlkZGVuIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3RlZCBpdGVt
IGhhcyBhbiBBUklBIGxhYmVsLgotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxl
bWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAg
aW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50
LT5saXN0SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CisgICAg
ICAgIGludCBzZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVt
ZW50Lmxpc3RJdGVtcygpOwogICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRp
Y19jYXN0PHNpemVfdD4oc2VsZWN0ZWRJbmRleCkgPCBsaXN0SXRlbXMuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJyaWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJ
dGVtc1tzZWxlY3RlZEluZGV4XS0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAg
ICAgICAgICAgICBpZiAoIW92ZXJyaWRkZW5EZXNjcmlwdGlvbi5pc051bGwoKSkKQEAgLTc4Myw3
ICs3ODMsNyBAQCBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
YWJlbEVsZW1lbnRDb250YWluZXIoKSBjb25zdAogICAgIC8vIGZpbmQgaWYgdGhpcyBoYXMgYSBw
YXJlbnQgdGhhdCBpcyBhIGxhYmVsCiAgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gbV9yZW5k
ZXJlci0+bm9kZSgpOyBwYXJlbnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpc0hUTUxMYWJlbEVsZW1lbnQocGFyZW50Tm9kZSkpCi0g
ICAgICAgICAgICByZXR1cm4gdG9IVE1MTGFiZWxFbGVtZW50KHBhcmVudE5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KHBhcmVudE5vZGUpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkxNiw5ICs5MTYsOSBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVt
ZW50KCkgY29uc3QKICAgICAvLyBSaWdodCBub3csIHdlIGRvIG5vdCBzdXBwb3J0IEFSSUEgbGlu
a3MgYXMgaW50ZXJuYWwgbGluayBlbGVtZW50cwogICAgIGlmICghaXNIVE1MQW5jaG9yRWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSFRNTEFuY2hvckVsZW1l
bnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVudCk7CisgICAgSFRNTEFuY2hv
ckVsZW1lbnQmIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCk7
CiAgICAgCi0gICAgVVJMIGxpbmtVUkwgPSBhbmNob3ItPmhyZWYoKTsKKyAgICBVUkwgbGlua1VS
TCA9IGFuY2hvci5ocmVmKCk7CiAgICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllciA9IGxpbmtV
UkwuZnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgaWYgKGZyYWdtZW50SWRlbnRpZmllci5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTUzLDExICs5NTMsMTEgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW4KICAgICBpZiAoIW5vZGUgfHwgIWlzSFRNTElucHV0RWxlbWVu
dChub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIGlmIHRoZXJl
J3MgYSBmb3JtLCB0aGVuIHRoaXMgaXMgZWFzeQotICAgIGlmIChpbnB1dC0+Zm9ybSgpKSB7Cisg
ICAgaWYgKGlucHV0LmZvcm0oKSkgewogICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3Jt
RWxlbWVudHM7Ci0gICAgICAgIGlucHV0LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQt
Pm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKKyAgICAgICAgaW5wdXQuZm9ybSgpLT5nZXROYW1lZEVs
ZW1lbnRzKGlucHV0Lm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoYXV0byYgYXNzb2NpYXRlRWxlbWVudCA6IGZvcm1FbGVtZW50cykgewogICAgICAgICAgICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUoJmFzc29jaWF0ZUVsZW1lbnQuZ2V0KCkpKQpAQCAtOTY4LDkgKzk2OCw5IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuCiAgICAgICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAg
ICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobGlzdC0+aXRlbShpKSkpIHsKLSAgICAgICAgICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBhc3NvY2lhdGVFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVFbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC0+bmFtZSgpID09IGlucHV0LT5u
YW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoYXNzb2NpYXRlRWxlbWVudCkpCisg
ICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXNzb2NpYXRlRWxlbWVudC5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC5u
YW1lKCkgPT0gaW5wdXQubmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3Nv
Y2lhdGVFbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFVJRWxlbWVudHMu
YXBwZW5kKG9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTUw
Nyw3ICsxNTA3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKIFVSTCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogewogICAgIGlmIChpc0FuY2hvcigpICYmIGlzSFRN
TEFuY2hvckVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBpZiAoSFRNTEFu
Y2hvckVsZW1lbnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yRWxlbWVudCgp
KSkKKyAgICAgICAgaWYgKEhUTUxBbmNob3JFbGVtZW50KiBhbmNob3IgPSBkb3duY2FzdDxIVE1M
QW5jaG9yRWxlbWVudD4oYW5jaG9yRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBhbmNo
b3ItPmhyZWYoKTsKICAgICB9CiAgICAgCkBAIC0xNTE1LDEwICsxNTE1LDEwIEBAIFVSTCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9yZW5k
ZXJlci0+ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKICAgICBpZiAoaXNJbWFnZSgpICYmIG1fcmVu
ZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkK
LSAgICAgICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5z
cmMoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCptX3JlbmRl
cmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChpc0lucHV0SW1hZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5u
b2RlKCkpLnNyYygpOwogICAgIAogICAgIHJldHVybiBVUkwoKTsKIH0KQEAgLTE2NzksNyArMTY3
OSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5ub2Rl
KCkgfHwgIW1fcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkp
OworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKm1fcmVuZGVyZXItPm5vZGUoKSk7
CiAKICAgICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTY4OCwxMCArMTY4OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIC8vIEZJWE1FOiBEbyB3ZSB3
YW50IHRvIGRvIGFueXRoaW5nIGhlcmUgZm9yIEFSSUEgdGV4dGJveGVzPwogICAgIGlmIChyZW5k
ZXJlci0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qgc2Fm
ZSEgIE90aGVyIGVsZW1lbnRzIGNvdWxkIGhhdmUgYSBUZXh0RmllbGQgcmVuZGVyZXIuCi0gICAg
ICAgIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KS0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICAg
ICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkuc2V0VmFsdWUoc3RyaW5nKTsK
ICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbm90IHNhZmUhICBPdGhlciBlbGVtZW50cyBjb3VsZCBoYXZlIGEgVGV4dEFy
ZWEgcmVuZGVyZXIuCi0gICAgICAgIHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KS0+c2V0
VmFsdWUoc3RyaW5nKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxl
bWVudCkuc2V0VmFsdWUoc3RyaW5nKTsKICAgICB9CiB9CiAKQEAgLTE3NjMsMTAgKzE3NjMsMTAg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXREb2N1bWVudExpbmtzKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmUKICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IGN1
cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgaXNIVE1MQXJlYUVs
ZW1lbnQoY3VycikgJiYgaXNIVE1MTWFwRWxlbWVudChwYXJlbnQpKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluayhheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1Jv
bGUpKTsKLSAgICAgICAgICAgICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gdG9IVE1MTWFwRWxl
bWVudChwYXJlbnQpOwotICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxl
bWVudCh0b0hUTUxBcmVhRWxlbWVudChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgYXJlYU9iamVj
dC0+c2V0SFRNTE1hcEVsZW1lbnQobWFwKTsKLSAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LT5z
ZXRQYXJlbnQoYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKG1hcCkpOworICAgICAgICAg
ICAgICAgIEhUTUxNYXBFbGVtZW50JiBtYXAgPSBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKnBh
cmVudCk7CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTEFyZWFFbGVtZW50KGRv
d25jYXN0PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOworICAgICAgICAgICAgICAgIGFyZWFPYmpl
Y3QtPnNldEhUTUxNYXBFbGVtZW50KCZtYXApOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3Qt
PnNldFBhcmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoJm1hcCkpOwogCiAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhcmVhT2JqZWN0KTsKICAgICAgICAgICAgIH0KQEAg
LTIxNjEsNyArMjE2MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNCiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKEVsZW1lbnQqIG1hcFBhcmVu
dCA9IGFyZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQYXJlbnQgPSBtYXBQYXJl
bnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoaXNIVE1MTWFwRWxlbWVudChtYXBQ
YXJlbnQpKSB7Ci0gICAgICAgICAgICBwYXJlbnQgPSBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1h
Z2VNYXAodG9IVE1MTWFwRWxlbWVudChtYXBQYXJlbnQpKTsKKyAgICAgICAgICAgIHBhcmVudCA9
IGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcChkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4o
bWFwUGFyZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIy
MTEsMTAgKzIyMTEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KICAgICBOb2RlKiBub2Rl
ID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9k
ZSgpOwogCiAgICAgaWYgKGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4g
YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCh0b0hUTUxBcmVhRWxlbWVudChub2RlKSwgcG9p
bnQpOworICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChkb3duY2Fz
dDxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpLCBwb2ludCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9w
dGlvbkVsZW1lbnQobm9kZSkpCi0gICAgICAgIG5vZGUgPSB0b0hUTUxPcHRpb25FbGVtZW50KG5v
ZGUpLT5vd25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50Pigqbm9kZSkub3duZXJTZWxlY3RFbGVtZW50KCk7CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0KiBvYmogPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqKQpAQCAtMjUw
NSwyMSArMjUwNSwyMSBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0QXJl
YVJvbGU7CiAKICAgICBpZiAobm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpIHsKLSAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7
Ci0gICAgICAgIGlmIChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAg
aWYgKGlucHV0LmlzQ2hlY2tib3goKSkKICAgICAgICAgICAgIHJldHVybiBDaGVja0JveFJvbGU7
Ci0gICAgICAgIGlmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQu
aXNSYWRpb0J1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIFJhZGlvQnV0dG9uUm9sZTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgaWYgKGlucHV0LmlzVGV4
dEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7CiAgICAgICAg
IC8vIE9uIGlPUywgdGhlIGRhdGUgZmllbGQgaXMgYSBwb3B1cCBidXR0b24uIE9uIG90aGVyIHBs
YXRmb3JtcyB0aGlzIGlzIGEgdGV4dCBmaWVsZC4KICNpZiBQTEFURk9STShJT1MpCi0gICAgICAg
IGlmIChpbnB1dC0+aXNEYXRlRmllbGQoKSkKKyAgICAgICAgaWYgKGlucHV0LmlzRGF0ZUZpZWxk
KCkpCiAgICAgICAgICAgICByZXR1cm4gUG9wVXBCdXR0b25Sb2xlOwogI2VuZGlmCiAgICAgICAg
IAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQuZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJjb2xvciIpKQogICAgICAgICAgICAgcmV0
dXJuIENvbG9yV2VsbFJvbGU7CiAjZW5kaWYKQEAgLTI4NDAsOCArMjg0MCw4IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRyZW4oKQogICAgIGlmICgh
bm9kZSB8fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7
Ci0gICAgSFRNTEVsZW1lbnQqIHNwaW5CdXR0b25FbGVtZW50ID0gaW5wdXQtPmlubmVyU3BpbkJ1
dHRvbkVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICBIVE1MRWxlbWVudCogc3BpbkJ1dHRvbkVsZW1l
bnQgPSBpbnB1dC5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKCFzcGluQnV0dG9u
RWxlbWVudCB8fCAhc3BpbkJ1dHRvbkVsZW1lbnQtPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zMjcxLDcgKzMyNzEsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKICAgICBpZiAoaXNMaW5r
YWJsZSgqdGhpcykpIHsKICAgICAgICAgRWxlbWVudCogYW5jaG9yID0gYW5jaG9yRWxlbWVudCgp
OwogICAgICAgICBpZiAoYW5jaG9yICYmIGlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKLSAg
ICAgICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvciktPmhyZWYoKTsKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFuY2hvcikuaHJl
ZigpOwogICAgIH0KIAogICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwpAQCAtMzI4Niw3ICszMjg2
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0CiAg
ICAgaWYgKCFhbmNob3IgfHwgIWlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuICF0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvcikt
PmhyZWYoKS5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVu
dD4oKmFuY2hvcikuaHJlZigpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpoYXNCb2xkRm9udCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAppbmRleCA5NTBmOTgyOTAyYTdh
ODYwZDhmZmY1MmNjZjJkNDE5YWJiMTBjZjAzLi5iNWUzNDZkNTZlNjdiNDQ1NGQwNGM5ZDYwYzk4
MTBhOTEyMWUxMmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNsaWRlci5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlTbGlkZXI6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIEhUTUxJbnB1dEVs
ZW1lbnQqIEFjY2Vzc2liaWxpdHlTbGlkZXI6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOworICAgIHJldHVy
biBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpOwogfQogCiAK
QEAgLTE1OSw3ICsxNTksNyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6
ZWxlbWVudFJlY3QoKSBjb25zdAogICAgIFJlbmRlck9iamVjdCogc2xpZGVyUmVuZGVyZXIgPSBt
X3BhcmVudC0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXNsaWRlclJlbmRlcmVyIHx8ICFzbGlkZXJS
ZW5kZXJlci0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICBy
ZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KHNsaWRlclJlbmRlcmVyLT5ub2RlKCkpLT5zbGlkZXJU
aHVtYkVsZW1lbnQoKS0+Ym91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oc2xpZGVyUmVuZGVyZXItPm5vZGUoKSktPnNsaWRlclRodW1iRWxlbWVudCgp
LT5ib3VuZGluZ0JveCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IGQ5ZDQzNWY4YmVh
N2MyYmIzM2Y3YzhkYzllMWI4YTExZGIwODE4NmEuLjUwZTU4ZDljZjJhYWZkMDUzYzFkZTMwZTQ1
NDQwN2JmODkwYTYxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTFRhYmxlRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdAogICAgIAogICAgIFJl
bmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CiAgICAgaWYgKHRh
YmxlLT5lbGVtZW50KCkgJiYgaXNIVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGUtPmVsZW1lbnQoKSk7
CiAgICAgCiAgICAgLy8gSWYgdGhlIHRhYmxlIGhhcyBhIGRpc3BsYXk6dGFibGUtcm93LWdyb3Vw
LCB0aGVuIHRoZSBSZW5kZXJUYWJsZSBkb2VzIG5vdCBoYXZlIGEgcG9pbnRlciB0byBpdCdzIEhU
TUxUYWJsZUVsZW1lbnQuCiAgICAgLy8gV2UgY2FuIGluc3RlYWQgZmluZCBpdCBieSBhc2tpbmcg
dGhlIGZpcnN0U2VjdGlvbiBmb3IgaXRzIHBhcmVudC4KQEAgLTEwOSw3ICsxMDksNyBAQCBIVE1M
VGFibGVFbGVtZW50KiBBY2Nlc3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCgpIGNvbnN0CiAg
ICAgaWYgKCFhY3R1YWxUYWJsZSB8fCAhaXNIVE1MVGFibGVFbGVtZW50KGFjdHVhbFRhYmxlKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxl
bWVudChhY3R1YWxUYWJsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+
KGFjdHVhbFRhYmxlKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFU
YWJsZSgpIGNvbnN0CkBAIC02MDgsNyArNjA4LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6dGl0bGUoKSBjb25zdAogICAgIC8vIHNlZSBpZiB0aGVyZSBpcyBhIGNhcHRpb24KICAgICBO
b2RlKiB0YWJsZUVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKHRhYmxlRWxl
bWVudCAmJiBpc0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50KSkgewotICAgICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVs
ZW1lbnQpLT5jYXB0aW9uKCk7CisgICAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0
aW9uID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxlRWxlbWVudCkuY2FwdGlvbigp
OwogICAgICAgICBpZiAoY2FwdGlvbikKICAgICAgICAgICAgIHRpdGxlID0gY2FwdGlvbi0+aW5u
ZXJUZXh0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCA5MzBlZjNiN2JjZmRmZGNjNDdkOWJmOWY1
NDllNjE0ZGUwYTQyNjk3Li5iODY1MTE4MDgyZDNhNzBkZDhhMzdjYjgzNjRmODNmNTkwODJlYjMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVj
dENhY2hlQXRrLmNwcApAQCAtMTQwLDEwICsxNDAsOCBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGls
ZHJlblNlbGVjdGlvbkNoYW5nZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiAgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG9iamVjdC0+d3JhcHBlcigpLCAic2VsZWN0aW9uLWNoYW5nZWQi
KTsKIAogICAgIC8vIEZpbmQgdGhlIGl0ZW0gd2hlcmUgdGhlIHNlbGVjdGlvbiBjaGFuZ2Ugd2Fz
IHRyaWdnZXJlZCBmcm9tLgotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxT
ZWxlY3RFbGVtZW50KG5vZGUpOwotICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm47Ci0g
ICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3QtPmFjdGl2ZVNlbGVjdGlvblN0YXJ0TGlz
dEluZGV4KCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Pigqbm9kZSk7CisgICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3Qu
YWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGxpc3RPYmplY3QgPSBnZXRMaXN0T2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKCFsaXN0T2Jq
ZWN0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCmluZGV4
IDZjNGNiZjkxNWZkNzBjYjFjNjRkZDgwZGQ0Y2YxNjdiODM3NDU2MjIuLjllODdmNGY1ZmJjNzdl
ZmY1Mjg1NzY1ZDY2ZmY3NDc1OTRkMDIyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VTZWxlY3Rpb24uY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9wdGlvbkZyb21TZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdp
bnQgaW4KICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9IVE1MU2VsZWN0
RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdE5vZGUgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7
CiAgICAgICAgIGlmICghc2VsZWN0Tm9kZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xOTUsOCArMTk1LDggQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlv
bkdldFNlbGVjdGlvbkNvdW50KEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQogICAgICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgaW50IHNlbGVjdGVk
SW5kZXggPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZElu
ZGV4KCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRl
eCA8IHN0YXRpY19jYXN0PGludD4odG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgp
KS0+bGlzdEl0ZW1zKCkuc2l6ZSgpKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBkb3du
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgo
KTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwg
c3RhdGljX2Nhc3Q8aW50Pihkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5v
ZGUoKSktPmxpc3RJdGVtcygpLnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAppbmRleCBmNmVkMTljMGFhNjlhYjgzMTVk
M2EzODE5MmYxODZlYTBhODQ2NTYzLi42NTliODhmOGM3OWFiYTFjNDAxMDFiNjk5MjkxNmQ0ZWI0
NjM3MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKQEAgLTIzOCwx
OSArMjM4LDE5IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJv
d0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKIHsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJ
ZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCBudWxscHRyKTsKKyAg
ICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUo
dGFibGUpLCBudWxscHRyKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0g
Y29yZSh0YWJsZSk7CiAgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUtPm5vZGUoKTsKICAgICAgICAg
aWYgKG5vZGUgJiYgaXNIVE1MVGFibGVFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudChub2RlKS0+
Y2FwdGlvbigpOworICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24g
PSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkuY2FwdGlvbigpOwogICAgICAgICAg
ICAgaWYgKGNhcHRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPmVs
ZW1lbnQoKSktPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRDb2x1bW5EZXNjcmlwdGlvbihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDM0ZDBjYjkxY2ZmOGExZDg2ODZm
NmY5NzA4ZjQ0Yzg2MzdlMWNlNmEuLjVjYjQ0MGE5MDIwODM0NmY5ZTlmNTE3MzMwOGY1YjYxMGUz
MjMwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTE3MSw3ICsxNzEsNyBA
QCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbihBdGtP
YmplY3QqIG9iamVjdCkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSwgMCk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIE5vZGUqIG5vZGUgPSAwOworICAgIE5v
ZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkKICAgICAgICAgbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBjb3JlT2JqZWN0LT5hcmlhUm9s
ZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlIHx8IGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKQEAg
LTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXRE
ZXNjcmlwdGlvbihBdGtPYmplY3QqIG9iamVjdCkKIAogICAgIC8vIGF0a190YWJsZV9nZXRfc3Vt
bWFyeSByZXR1cm5zIGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28g
ZXhwb3NlIHN1bW1hcnkgaGVyZS4KICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
VGFibGVSb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gdG9IVE1MVGFibGVFbGVtZW50
KG5vZGUpLT5zdW1tYXJ5KCk7CisgICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gZG93bmNhc3Q8SFRN
TFRhYmxlRWxlbWVudD4oKm5vZGUpLnN1bW1hcnkoKTsKICAgICAgICAgaWYgKCFzdW1tYXJ5Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KG9i
amVjdCwgQXRrQ2FjaGVkQWNjZXNzaWJsZURlc2NyaXB0aW9uLCBzdW1tYXJ5KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5
T2JqZWN0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJp
bGl0eU9iamVjdElPUy5tbQppbmRleCBlMWZkYzNiM2MyMTA0NWFiOGRjOWJjZjVmNDE0NzFlNWIz
ODQzMjdmLi4xYzliOTM5ZWZlMWFiMDdjMmUzZGExMmVmNzU2Nzk2ODNiYTk5MjA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxp
dHlPYmplY3RJT1MubW0KQEAgLTY3LDExICs2Nyw4IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpCiAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QgfHwgIXJlbmRlck9iamVjdC0+bm9kZSgpIHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKS0+aXNI
VE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KHJlbmRlck9iamVjdC0+
bm9kZSgpKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCkubGVuZ3RoKCk7CisgICAgSFRN
TElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KnJlbmRlck9iamVjdC0+bm9kZSgpKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LnZhbHVlKCku
bGVuZ3RoKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUln
bm9yZUF0dGFjaG1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IGIwZmRmNjViMjk2MmZhOWE4MWViYjk4OTViNzc4
MmNkM2U0ZTZhMTIuLjZmYmExOTk1NDFmYzkwYWE5ZjY0ZjhhOWJiNzIzOGE5OTdlMWIwNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
QEAgLTgzLDE2ICs4MywxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVtR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogICAgIEFTU0VSVChk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAKICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9t
aWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgIGlmICghYXRv
bWljUHJvcGVydHlOYW1lIHx8ICF0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05h
bWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkKKyAgICBpZiAoIWF0b21pY1Byb3BlcnR5TmFt
ZSB8fCAhZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRl
bSgqYXRvbWljUHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAotICAgIGlmIChVTkxJS0VMWSh0b0hUTUxEb2N1bWVudChkb2N1bWVu
dCktPndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVy
dHlOYW1lKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9j
dW1lbnQpLndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJv
cGVydHlOYW1lKSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9u
ID0gZG9jdW1lbnQtPndpbmRvd05hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKICAgICAg
ICAgQVNTRVJUKGNvbGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoY29sbGVjdGlvbikpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHRvSFRNTERvY3VtZW50KGRvY3VtZW50
KS0+d2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBkb3duY2Fz
dDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0
eU5hbWUpKSk7CiB9CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQpAQCAtMjQ2
LDcgKzI0Niw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7CiAgICAgaWYgKGRv
Y3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0
b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgICAgIGlm
IChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5k
b3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY1By
b3BlcnR5TmFtZSAmJiBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93
TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgbmFtZWRJ
dGVtR2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMjMs
NyArMzIzLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHUKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRv
bWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYg
KGF0b21pY1Byb3BlcnR5TmFtZSAmJiB0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRv
d05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJv
cGVydHlOYW1lICYmIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dO
YW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0
ZW1HZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRl
eCAxYWQzYzYyNjY1Y2Q2ZTExNWNhZjg4OWQ1YTI3N2JiMDM1MTVhZWY1Li43OTUzYzZjZDViZTM1
Y2I1YTg1NGJhMDAyZGYwZWM5ZTkxYzYxZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC03Myw4ICs3Myw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFCiAgICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
Y3VtZW50LmRvY3VtZW50TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpOwotICAgIGlmIChV
TkxJS0VMWShlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpKSB7Ci0gICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KGVsZW1lbnQpLT5jb250ZW50RnJhbWUo
KSkKKyAgICBpZiAoVU5MSUtFTFkoaXNIVE1MSUZyYW1lRWxlbWVudChlbGVtZW50KSkpIHsKKyAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqZWxl
bWVudCkuY29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlMoZXhlYywgZnJhbWUpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IGYy
NTFlYjJkZWJmMDIzY2QzNmVjZDRjOTI2MDFhMDBmY2U4Yjg0MTcuLjc3ZWFmZjU4MDE3ZmYxZjJi
NTZlZGYxODc3MDhmNmYyNDI0MDFlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdAogewogICAgIEhUTUxFbGVtZW50JiBlbGVt
ZW50ID0ganNDYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90QmFzZSktPmltcGwoKTsKICAgICBOb2Rl
KiBmcmFtZUVsZW1lbnQgPSBlbGVtZW50LmNoaWxkcmVuKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gdG9IVE1MRnJhbWVFbGVtZW50KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgp
KSB7CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxGcmFtZUVsZW1l
bnQ+KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChKU0RP
TVdpbmRvd1NoZWxsKiB3aW5kb3cgPSB0b0pTRE9NV2luZG93U2hlbGwoZG9jdW1lbnQtPmZyYW1l
KCksIGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHdpbmRvdyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHAKaW5kZXggNjNhMmRjNmFjOGIxMjAyZWM2ZThlNDllNzZhNGM2NTYxNmM2ZmRlYS4u
MmUxZDEyNjZlM2MyM2I4MTRkYTk5ZmVmOTgxNTg2ZWQ3OTUzZmYwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKEpTTm9kZSoganNOb2RlLCBOb2Rl
KiBub2RlLCBTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgaXMgZGVz
dHJveWVkLCBpdHMgbG9hZCBldmVudCB3aWxsIG5vdCBmaXJlLgogICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBET00gc2hvdWxkIG1hbmFnZSB0aGlzIGlzc3VlIHdpdGhvdXQgdGhlIGhlbHAgb2Yg
SmF2YVNjcmlwdCB3cmFwcGVycy4KICAgICAgICAgICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQpLmhhc1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KS5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgICAgICAgICAgZWxzZSBpZiAoaXNIVE1MQXVkaW9FbGVtZW50KGVsZW1lbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0b0hUTUxBdWRpb0VsZW1lbnQoZWxlbWVudCkucGF1c2VkKCkp
CisgICAgICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxIVE1MQXVkaW9FbGVtZW50PihlbGVtZW50
KS5wYXVzZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZjgy
ZWQyNzgxYzUwNzI1Y2VkZDE1NDcwMWYwMmRlZGZlMDhjNGVlZi4uNjI2MzIxYzZiODcxY2NjYzdk
ODFmZWEyYjFkY2YwZmRiYjNjNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTY1NSw3ICs2NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUo
Y29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAg
ICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxl
ID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxl
bWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVy
VmlzaWJsZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1
bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlv
bnMuaAppbmRleCAxZGIxOWVjZDYxYTJmZDZjNDMyZTg5NDZlOGM1YjM2NGU3MjEwNjUwLi43ZmE0
ZGM1Yjg5OTBmZWZmZjRiMTcxOWQ0ODAxODA5NTU2ODhmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTg2LDcgKzg2LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIGlzQ2hlY2tlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7CiAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVh
ckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpCisgICAgaWYg
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjE1Yzc5
Y2YzNWI0NzI4ZjA2NzU4YzM0M2NiMDk5NWI5MWU2MmY1YS4uNDI5Yzg0YTE2Njk5ODZkZGNjNTY5
N2I2NmVhOGM5ZjNhYjcxOWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApA
QCAtMTMzOCw3ICsxMzM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICBpZiAoZSAm
JiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsK
ICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9u
cy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8v
IHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2Vy
ZSBleHBsaWNpdGx5IHNpemVkLgotICAgICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlKSB8
fCAhdG9IVE1MSW5wdXRFbGVtZW50KGUpLT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgIGlmICgh
aXNIVE1MSW5wdXRFbGVtZW50KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZSku
aXNJbWFnZUJ1dHRvbigpKQogICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCAxMDNlNjQx
YWM2ZTdjNWViNDBjMTc1MzJlYTAxNDQ1ZjYxMWMxNTJmLi4wNzIwMDM3ZTlhODdkMDM0MGRkMTA5
ODA0NWJkODJhMzIzZWRiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgU3R5bGVTaGVldCogU3R5bGVTaGVldExpc3Q6Oml0ZW0odW5zaWdu
ZWQgaW5kZXgpCiBIVE1MU3R5bGVFbGVtZW50KiBTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElFIGFsc28g
c3VwcG9ydHMgcmV0cmlldmluZyBhIHN0eWxlc2hlZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUv
aWQgb2YgdGhlIDxzdHlsZT4gdGFnCiAgICAgLy8gKHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGFs
bCB0aGUgb3RoZXIgY29sbGVjdGlvbnMpCkBAIC03Nyw4ICs3Nyw4IEBAIEhUTUxTdHlsZUVsZW1l
bnQqIFN0eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAogICAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2Ug
YW55d2F5IDspCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmdldEVsZW1lbnRC
eUlkKG5hbWUpOwogICAgIGlmIChlbGVtZW50ICYmIGlzSFRNTFN0eWxlRWxlbWVudChlbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggYzBmMTgwYzgyNjk4
YjY5ZGE1Y2VmOGNmMmIyYzQ5YjYyMDUwYTkzZi4uMjAzN2JiN2ZiODMzMGQyNjgwYmZlNWMxM2Ew
OTkwODU5NjFiOWRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVy
LmNwcApAQCAtMjc4NSw3ICsyNzg1LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVu
aXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KgogICAgIGlm
IChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICBpZiAo
Y2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPmVsZW1lbnRTdHls
ZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVy
VmlzaWJsZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNzk3LDE0ICsyNzk3
LDE0IEBAIHN0YXRpYyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRl
c3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCoKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHls
ZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXRVbmlxdWUoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQ
bGFjZWhvbGRlclZpc2libGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0
aWMgYm9vbCBpc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1
cm4gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgdG9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICBy
ZXR1cm4gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJs
ZSgpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFz
UGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1cnJlbnRTY3JpcHRJbmNyZW1lbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlci5oCmluZGV4IGY3ZTg0MWE3MGI3NDFjZTE0OWMwODVlMjJmNTY2
ZGI1NDZjOTU5YmMuLjdjNDg4YzA3MTg3MmUyN2RjODM3NWY0MGMwOGU0YTA0NzZlZGI5YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VycmVudFNjcmlwdEluY3JlbWVudGVyLmgKQEAgLTQy
LDcgKzQyLDcgQEAgcHVibGljOgogICAgICAgICAsIG1faXNIVE1MU2NyaXB0RWxlbWVudChpc0hU
TUxTY3JpcHRFbGVtZW50KGVsZW1lbnQpKQogICAgIHsKICAgICAgICAgaWYgKG1faXNIVE1MU2Ny
aXB0RWxlbWVudCkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KHRv
SFRNTFNjcmlwdEVsZW1lbnQoZWxlbWVudCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cHVz
aEN1cnJlbnRTY3JpcHQoZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICB9CiAKICAgICB+Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKaW5kZXggNGNiZmFmMTM1Mzc2ZTVjYzk5YmViOWJlMDJjNjQ5NzIwZWI0ODgw
ZC4uMTljZjljMjJmOGE0NTVhNzM4OGU4ZjNhMDc0MzZjMjg5Y2EwYjBjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFUcmFuc2Zlci5jcHAKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBpbnQgeSkKIAogICAgIENh
Y2hlZEltYWdlKiBpbWFnZTsKICAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgaW1hZ2UgPSB0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCktPmNhY2hlZEltYWdlKCk7CisgICAgICAgIGltYWdlID0g
ZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKmVsZW1lbnQpLmNhY2hlZEltYWdlKCk7CiAgICAg
ZWxzZQotICAgICAgICBpbWFnZSA9IDA7CisgICAgICAgIGltYWdlID0gbnVsbHB0cjsKIAogICAg
IG1fZHJhZ0xvY2F0aW9uID0gSW50UG9pbnQoeCwgeSk7CiAKQEAgLTI3MCw3ICsyNzAsNyBAQCB2
b2lkIERhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBp
bnQgeSkKICAgICAgICAgbV9kcmFnSW1hZ2VMb2FkZXItPnN0YXJ0TG9hZGluZyhtX2RyYWdJbWFn
ZSk7CiAgICAgfQogCi0gICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gaW1hZ2UgPyAwIDogZWxlbWVu
dDsKKyAgICBtX2RyYWdJbWFnZUVsZW1lbnQgPSBpbWFnZSA/IG51bGxwdHIgOiBlbGVtZW50Owog
CiAgICAgdXBkYXRlRHJhZ0ltYWdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0
MmQwZTBkYWUyMzhkZTBhN2Y2N2EzOTM1NDFiYjY1MzI3OGExOGZjLi5lMGE3MDYxNGQ1NzRjYTlj
YzY0YzJmMmU3M2M1ZGZiMTJiOGU5MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE1
NTEsOCArMTU1MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0
bGUpCiAgICAgLy8gVGhlIERPTSBBUEkgaGFzIG5vIG1ldGhvZCBvZiBzcGVjaWZ5aW5nIGRpcmVj
dGlvbiwgc28gYXNzdW1lIExUUi4KICAgICB1cGRhdGVUaXRsZShTdHJpbmdXaXRoRGlyZWN0aW9u
KHRpdGxlLCBMVFIpKTsKIAotICAgIGlmIChtX3RpdGxlRWxlbWVudCAmJiBpc0hUTUxUaXRsZUVs
ZW1lbnQobV90aXRsZUVsZW1lbnQuZ2V0KCkpKQotICAgICAgICB0b0hUTUxUaXRsZUVsZW1lbnQo
bV90aXRsZUVsZW1lbnQuZ2V0KCkpLT5zZXRUZXh0KHRpdGxlKTsKKyAgICBpZiAobV90aXRsZUVs
ZW1lbnQgJiYgaXNIVE1MVGl0bGVFbGVtZW50KCptX3RpdGxlRWxlbWVudCkpCisgICAgICAgIGRv
d25jYXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkuc2V0VGV4dCh0aXRsZSk7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlRWxlbWVudChjb25zdCBTdHJpbmdXaXRoRGly
ZWN0aW9uJiB0aXRsZSwgRWxlbWVudCogdGl0bGVFbGVtZW50KQpAQCAtMjg4MSw3ICsyODgxLDcg
QEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNldENvb2tpZSB3
b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4u
Lj4KICAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vIEV4Y2Vw
dGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9yZWQuCi0gICAgICAgICAgICB0b0hU
TUxEb2N1bWVudCh0aGlzKS0+c2V0Q29va2llKGNvbnRlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICAgICAgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqdGhpcykuc2V0Q29va2llKGNvbnRl
bnQsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC00
NjUyLDE0ICs0NjUyLDE0IEBAIGNvbnN0IFZlY3RvcjxJY29uVVJMPiYgRG9jdW1lbnQ6Omljb25V
UkxzKGludCBpY29uVHlwZXNNYXNrKQogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuLT5p
dGVtKGkpOwogICAgICAgICBpZiAoIWNoaWxkLT5oYXNUYWdOYW1lKGxpbmtUYWcpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSB0
b0hUTUxMaW5rRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGlmICghKGxpbmtFbGVtZW50LT5pY29u
VHlwZSgpICYgaWNvblR5cGVzTWFzaykpCisgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0Vs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KCpjaGlsZCk7CisgICAgICAgIGlmICgh
KGxpbmtFbGVtZW50Lmljb25UeXBlKCkgJiBpY29uVHlwZXNNYXNrKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAobGlua0VsZW1lbnQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAg
ICAgIGlmIChsaW5rRWxlbWVudC5ocmVmKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gUHV0IGl0IGF0IHRoZSBmcm9udCB0byBlbnN1cmUgdGhhdCBpY29u
cyBzZWVuIGxhdGVyIHRha2UgcHJlY2VkZW5jZSBhcyByZXF1aXJlZCBieSB0aGUgc3BlYy4KLSAg
ICAgICAgSWNvblVSTCBuZXdVUkwobGlua0VsZW1lbnQtPmhyZWYoKSwgbGlua0VsZW1lbnQtPmlj
b25TaXplcygpLCBsaW5rRWxlbWVudC0+dHlwZSgpLCBsaW5rRWxlbWVudC0+aWNvblR5cGUoKSk7
CisgICAgICAgIEljb25VUkwgbmV3VVJMKGxpbmtFbGVtZW50LmhyZWYoKSwgbGlua0VsZW1lbnQu
aWNvblNpemVzKCksIGxpbmtFbGVtZW50LnR5cGUoKSwgbGlua0VsZW1lbnQuaWNvblR5cGUoKSk7
CiAgICAgICAgIG1faWNvblVSTHMuYXBwZW5kKG5ld1VSTCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4YjZjMWU2ZmU1NmQ3NzFjMGMy
ZmFlMmJkNWI2NTk3MDIwN2E4MDUuLjc3ZWVjM2I3NWY0OWE4MDAyNGQ2YjA5MTE1YzIzYTE5ZmQy
OWIzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC01
MywxOCArNTMsMTggQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hlc05hbWUoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogCiBpbmxpbmUgYm9vbCBrZXlN
YXRjaGVzTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgdG9I
VE1MTWFwRWxlbWVudChlbGVtZW50KS5nZXROYW1lKCkuaW1wbCgpID09ICZrZXk7CisgICAgcmV0
dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+
KGVsZW1lbnQpLmdldE5hbWUoKS5pbXBsKCkgPT0gJmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5
TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVt
ZW50KSAmJiB0b0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwo
KSA9PSAma2V5OworICAgIHJldHVybiBpc0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpICYmIGRvd25j
YXN0PEhUTUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkubG93ZXIoKS5pbXBsKCkgPT0g
JmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8v
IEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxkIG1hdGNoIGJvdGggaW1h
Z2UgYW5kIG9iamVjdCBlbGVtZW50cy4KLSAgICByZXR1cm4gaXNIVE1MSW1hZ2VFbGVtZW50KGVs
ZW1lbnQpICYmIHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5tYXRjaGVzTG93ZXJjYXNlZFVz
ZW1hcChrZXkpOworICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkubWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAo
a2V5KTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE2OCwy
MiArMTY4LDIyIEBAIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TmFt
ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBE
b2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiB0
b0hUTUxNYXBFbGVtZW50KGdldDxrZXlNYXRjaGVzTWFwTmFtZT4oa2V5LCBzY29wZSkpOworICAg
IHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZ2V0PGtleU1hdGNoZXNNYXBOYW1lPihr
ZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwg
Y29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxl
bWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3BlKSk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRN
YXBOYW1lPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50T3Jk
ZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
SFRNTEltYWdlRWxlbWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXA+KGtleSwgc2Nv
cGUpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZ2V0PGtleU1hdGNo
ZXNMb3dlcmNhc2VkVXNlbWFwPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxMYWJlbEVsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewot
ICAgIHJldHVybiB0b0hUTUxMYWJlbEVsZW1lbnQoZ2V0PGtleU1hdGNoZXNMYWJlbEZvckF0dHJp
YnV0ZT4oa2V5LCBzY29wZSkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MTGFiZWxFbGVtZW50
PihnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKSk7CiB9CiAKIEVs
ZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
LmNwcAppbmRleCBkN2E5ZDY2NjczYTZhZTNlYjAxMzFmZjAzYTNmYjMwNDBlZTBkNmNmLi42MWQ5
OWE3MWM0YjljMTk2MDM4NjRjY2IyMDI5YWM4MDBjN2I0OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yODYsNyAr
Mjg2LDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZl
U3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKICAgICAgICAgICAgIGJvb2wgZW5hYmxl
ZFZpYVNjcmlwdCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzSFRNTExpbmtFbGVtZW50KGVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGxp
bmtFbGVtZW50LmlzRGlzYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgZW5hYmxlZFZpYVNjcmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZp
YVNjcmlwdCgpOwpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTCiAg
ICAgICAgICAgICBpZiAoaXNTVkdTdHlsZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgc2hlZXQgPSBkb3duY2FzdDxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICBzaGVldCA9IHRvSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpLnNoZWV0KCk7CisgICAg
ICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpLnNo
ZWV0KCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQgPSB0b0hUTUxT
dHlsZUVsZW1lbnQoZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRv
d25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKICAgICAg
ICAgICAgIC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0
aGFuCiAgICAgICAgICAgICAvLyBQRVJTSVNURU5UKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCAzZTA2ZWQ3MGMyNTE1YTI4NTRjNTc3YTBhNjI0N2YzM2Q3YjE1ZWE2Li45MWZlMmE4NWFjN2Ix
NTYwYTljNTAxNmVkZDA4ODcxMWExNTk4ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50
UmFyZURhdGEoKS0+Y2xlYXJDbGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRy
ZWVTY29wZSogbmV3U2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRN
TERvY3VtZW50KiBuZXdEb2N1bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAm
JiBuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1
bWVudCgmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1
bWVudCogbmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgbmV3
U2NvcGUtPmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVudCgpID8gZG93bmNhc3Q8SFRNTERv
Y3VtZW50PigmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgIGlmIChu
ZXdTY29wZSAhPSAmdHJlZVNjb3BlKCkpCiAgICAgICAgIG5ld1Njb3BlID0gbnVsbHB0cjsKIApA
QCAtMTM4MSw3ICsxMzgxLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJiBpbnNlcnRpb25Qb2ludCkKIAogICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0luVHJlZVNj
b3BlKCkpIHsKICAgICAgICAgVHJlZVNjb3BlKiBvbGRTY29wZSA9ICZpbnNlcnRpb25Qb2ludC50
cmVlU2NvcGUoKTsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVudCA9IGluRG9jdW1l
bnQoKSAmJiBvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hU
TUxEb2N1bWVudCgmb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgICAg
ICBIVE1MRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVudCgpICYmIG9sZFNjb3BlLT5k
b2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IGRvd25jYXN0PEhUTUxEb2N1bWVudD4o
Jm9sZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKG9sZFNj
b3BlICE9ICZ0cmVlU2NvcGUoKSB8fCAhaXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgb2xk
U2NvcGUgPSBudWxscHRyOwogCkBAIC0yNTkwLDcgKzI1OTAsNyBAQCBpbmxpbmUgdm9pZCBFbGVt
ZW50Ojp1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkb2N1bWVudCgpLmlzSFRNTERvY3Vt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQodG9IVE1M
RG9jdW1lbnQoZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOworICAgIHVwZGF0ZU5hbWVG
b3JEb2N1bWVudChkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KCkpLCBvbGROYW1lLCBu
ZXdOYW1lKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKFRyZWVT
Y29wZSYgc2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuZXdOYW1lKQpAQCAtMjYzOCw3ICsyNjM4LDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6
dXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXcKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgdXBkYXRlSWRGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVu
dChkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1N
YXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKKyAgICB1cGRhdGVJZEZvckRvY3Vt
ZW50KGRvd25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZElkLCBuZXdJZCwgVXBk
YXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJpYnV0
ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlSWRGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBz
Y29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJ
ZCkKQEAgLTI2ODUsOSArMjY4NSw5IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlTGFiZWwoVHJlZVNj
b3BlJiBzY29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQotICAg
ICAgICBzY29wZS5yZW1vdmVMYWJlbCgqb2xkRm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCAqdG9I
VE1MTGFiZWxFbGVtZW50KHRoaXMpKTsKKyAgICAgICAgc2NvcGUucmVtb3ZlTGFiZWwoKm9sZEZv
ckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKnRoaXMp
KTsKICAgICBpZiAoIW5ld0ZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgc2Nv
cGUuYWRkTGFiZWwoKm5ld0ZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRvSFRNTExhYmVsRWxl
bWVudCh0aGlzKSk7CisgICAgICAgIHNjb3BlLmFkZExhYmVsKCpuZXdGb3JBdHRyaWJ1dGVWYWx1
ZS5pbXBsKCksIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KCp0aGlzKSk7CiB9CiAKIHZvaWQg
RWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVl
KQpAQCAtMjc0MSwxMSArMjc0MSwxMCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBFbGVt
ZW50OjplbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eQogICAgIGlm
IChIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGNhY2hlZEhUTUxDb2xsZWN0aW9uKHR5cGUp
KQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbjsKIAotICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gY29sbGVjdGlvbjsKICAgICBpZiAodHlwZSA9PSBUYWJsZVJvd3MpIHsKLSAgICAgICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlv
bjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4odG9IVE1MVGFibGVFbGVtZW50KCp0aGlzKSwgdHlw
ZSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFk
ZENhY2hlZENvbGxlY3Rpb248SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+KGRvd25jYXN0PEhUTUxU
YWJsZUVsZW1lbnQ+KCp0aGlzKSwgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFNlbGVj
dE9wdGlvbnMpIHsKLSAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxp
c3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KHRvSFRNTFNl
bGVjdEVsZW1lbnQoKnRoaXMpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24+KGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqdGhpcyksIHR5cGUpOwogICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBGb3JtQ29udHJvbHMpIHsKICAgICAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoZm9ybVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogICAgICAgICByZXR1cm4g
ZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uPigqdGhpcywgdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGFhMWEwMGFjNjllMDk3YTgwMDY3OWNjMTJhZTM5ODM1
MWIwYTY1MDIuLjQwOTRmMzNjOTIyZGY1MDFkNDk1ZWYzNWRlMjkxYWFkNThkMDA3NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zNTcsMTcgKzM1NywxNyBAQCBi
b29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQ
dHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBjbGlja0hh
bmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlLmdldCgpKSkKLSAg
ICAgICAgdG9IVE1MSW5wdXRFbGVtZW50KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQs
IGNsaWNrSGFuZGxpbmdTdGF0ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAK
ICAgICBpZiAoIWV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgZGlzcGF0Y2hFdmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5k
b3dFdmVudENvbnRleHQpOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCgmZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgw
KTsKKyAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKICAgICBldmVudC0+c2V0
RXZlbnRQaGFzZSgwKTsKIAogICAgIGlmIChjbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0g
ICAgICAgIHRvSFRNTElucHV0RWxlbWVudCgqbm9kZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpl
dmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdT
dGF0ZSk7CiAKICAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBE
T00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCiAgICAgLy8gZGVmYXVsdCBoYW5k
bGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVy
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggNjA5NmM1ODQxZmZjOTg2
NWY5MGZmMjJmODNjYjE2NzcyNTA5NDMyYi4uZTMwNTZjMzYwMTI0OWVlMzllMzE4MjdjYWQyY2I4
OGVjYTI2YWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMzgzLDcg
KzM4Myw3IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKIFNj
cmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICBpZiAoaXNIVE1MU2NyaXB0RWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJu
IHRvSFRNTFNjcmlwdEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MU2NyaXB0RWxlbWVudD4oZWxlbWVudCk7CiAKICAgICBpZiAoaXNTVkdTY3JpcHRFbGVtZW50
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU2NyaXB0RWxlbWVudD4oZWxl
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggNzViOTY4
OWM4MGQzN2Y1NDdlYmVmZTU0N2ZmNDE1Mzk1ZGUxNTQ2Zi4uNGMyMmQwMDczNmRmZmUwMzI1ZTFi
YTExYzA4ODk2MDRkZTYyZWUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRl
LmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVT
dHlsZUZvckFsbExpbmtzKCkKIGlubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXNI
VE1MQW5jaG9yRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTEFuY2hvckVs
ZW1lbnQoZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CiAgICAgaWYg
KGNvbnN0IEF0b21pY1N0cmluZyogYXR0cmlidXRlID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudC5iYXNlVVJM
KCksICphdHRyaWJ1dGUpOwogICAgIHJldHVybiAwOwpAQCAtMTAxLDcgKzEwMSw3IEBAIEVJbnNp
ZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1l
bnQmIGVsZW1lbnQpCiAKICAgICBMaW5rSGFzaCBoYXNoOwogICAgIGlmIChpc0hUTUxBbmNob3JF
bGVtZW50KGVsZW1lbnQpKQotICAgICAgICBoYXNoID0gdG9IVE1MQW5jaG9yRWxlbWVudChlbGVt
ZW50KS52aXNpdGVkTGlua0hhc2goKTsKKyAgICAgICAgaGFzaCA9IGRvd25jYXN0PEhUTUxBbmNo
b3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBlbHNlCiAgICAgICAg
IGhhc2ggPSBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goZWxlbWVudC5kb2N1bWVudCgpLmJhc2VV
UkwoKSwgKmF0dHJpYnV0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtl
X25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNDViOGRi
NTE4ZDg4NGU3NDQ2ZmM2MzU4ZDlmM2JmMWM5ZmIyOGJlOS4uNGRkZWRjMTdjODkyOWY4ODhjMmVj
ZWJkNzI2Y2Q2YmVkODI1ODQzZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2Vf
bmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTY2Niwx
NCArNjY2LDYgQEAgc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFy
Z1R5cGU+IHsKIH07CiBFTkQKICAgICAgICAgOwotICAgICAgICBpZiAoJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfSBlcSAiSFRNTCIpIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKLS8vIEZJWE1F
OiBSZW1vdmUgdGhlc2UgbWFjcm9zIG9uY2UgdGhlIGNvZGUgaGFzIGJlZW4gcG9ydGVkIHRvIHVz
aW5nCi0vLyBkb3duY2FzdDwqRWxlbWVudD4oKS4KLSNkZWZpbmUgdG8kY2xhc3MoeCkgV2ViQ29y
ZTo6ZG93bmNhc3Q8V2ViQ29yZTo6JGNsYXNzPih4KQotRU5ECi0gICAgICAgICAgICA7Ci0gICAg
ICAgIH0KICAgICAgICAgcHJpbnQgRiAiXG4iOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCBiMmU1ZDNhODAwM2VlNGEwYTQ4OGFhNWE1NWEwZjFmMGJkY2Y1M2UwLi5l
OTBmZGZhMzNkYzI0ZmI1MzJjMTQ4YTlmNDMyYmI2MWMzNDkyOTQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6
OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogICAgIC8vIElmIHRoZSB0YXJnZXQg
aXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBv
ZiBpdHMgc2hhZG93IHRyZWUsCiAgICAgLy8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBm
b3IgdGhhdCB0ZXh0IGNvbnRyb2wuCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHRGb3JtQ29udHJvbE9mU2VsZWN0aW9uU3RhcnQgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
c2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
RnJvbUNvbnRyb2xPZlRhcmdldCA9IGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmV2ZW50
LT50YXJnZXQoKS0+dG9Ob2RlKCkpID8gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpKSA6IG51bGxwdHI7CisgICAgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQqIHRleHRGcm9tQ29udHJvbE9mVGFyZ2V0ID0gaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgqZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgPyBkb3duY2FzdDxIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudD4oZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgOiBudWxscHRyOwog
ICAgIGlmICh0ZXh0RnJvbUNvbnRyb2xPZlRhcmdldCAmJiAoc2VsZWN0aW9uLnN0YXJ0KCkuaXNO
dWxsKCkgfHwgdGV4dEZyb21Db250cm9sT2ZUYXJnZXQgIT0gdGV4dEZvcm1Db250cm9sT2ZTZWxl
Y3Rpb25TdGFydCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0ZXh0RnJv
bUNvbnRyb2xPZlRhcmdldC0+c2VsZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVNlbGVjdGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgc2VsZWN0aW9uLmlzRGlyZWN0aW9u
YWwoKSk7CkBAIC0zMjEsMTggKzMyMSwxOCBAQCBib29sIEVkaXRvcjo6Y2FuQ3V0KCkgY29uc3QK
IHN0YXRpYyBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudC5pc0ltYWdlRG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IEhUTUxFbGVtZW50KiBib2R5ID0gZG9jdW1lbnQuYm9keSgpOwogICAgIGlmICghYm9keSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUq
IG5vZGUgPSBib2R5LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFpc0hUTUxJbWFnZUVsZW1l
bnQobm9kZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0hUTUxJbWFnZUVsZW1l
bnQobm9kZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50Pihub2RlKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25z
dApAQCAtMzUzMywxOCArMzUzMywxOCBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIHsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoIW5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0T3JMaW5lQnJlYWsoKSkK
ICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCgqbm9kZSkpCi0gICAgICAgICAgICBub2RlID0gdG9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudChub2RlKS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkudmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSku
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBlbHNlIGlmIChub2Rl
LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAwZTNmM2ZlMDM5YzA3ZDVhMjFmMTkwNWQ5
ZmVkMDUyODQ2MDAzZjQyLi44ZGI3MmNmOWFjYWQyZDlkZjI0NGQyZjY0MWJlMTU0MTgyOGMwMGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTY3MCwx
NiArMTY3MCwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAKICAgICBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmIChmb2N1c2Vk
RWxlbWVudCAmJiBmb2N1c2VkRWxlbWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVu
dChkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChzZWxlY3RFbGVtZW50
LT5jYW5TZWxlY3RBbGwoKSkgewotICAgICAgICAgICAgc2VsZWN0RWxlbWVudC0+c2VsZWN0QWxs
KCk7CisgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGlzSFRNTFNlbGVjdEVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CisgICAgICAgIGlm
IChzZWxlY3RFbGVtZW50LmNhblNlbGVjdEFsbCgpKSB7CisgICAgICAgICAgICBzZWxlY3RFbGVt
ZW50LnNlbGVjdEFsbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwotICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFyZ2V0
ID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4gcm9vdDsKKyAgICBOb2RlKiBzZWxlY3RTdGFydFRhcmdl
dCA9IG51bGxwdHI7CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsK
ICAgICAgICAgcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7
CiAgICAgICAgIGlmIChOb2RlKiBzaGFkb3dSb290ID0gbV9zZWxlY3Rpb24ubm9uQm91bmRhcnlT
aGFkb3dUcmVlUm9vdE5vZGUoKSkKQEAgLTE2ODksNyArMTY4OSw3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEFsbCgpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fc2VsZWN0aW9u
LmlzTm9uZSgpICYmIGZvY3VzZWRFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAoZm9jdXNlZEVs
ZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICB0b0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KGZvY3VzZWRFbGVtZW50KS0+c2VsZWN0KCk7CisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVu
dCkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcm9vdCA9IGZvY3VzZWRFbGVtZW50LT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290
Tm9kZSgpOwpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2Nh
bkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiAgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMu
ZnJvbSgqc3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gKml0OwogICAgICAgICBpZiAoaXNIVE1M
Rm9ybUVsZW1lbnQoJmVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVt
ZW50KCZlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1l
bnQ+KCZlbGVtZW50KTsKICAgICAgICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVu
dCkuZm9ybSgpOwogICAgICAgICBpZiAoaXNIVE1MRnJhbWVFbGVtZW50QmFzZShlbGVtZW50KSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCAy
MTVhYTdhZWUyMDVlMmU1OGY3YTdjZTMxYzJmMjNjNTE5NjZmMmJiLi4xOGU1ODk0ZDJjYjFjNWY0
YWUxZjRlMjI5Mzk0OGU5NmIzMTczN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9k
ZSogbm9kCiAKICAgICBpZiAoISh0YXJnZXROb2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyh0YXJnZXROb2RlKSkpIHsKICNpZiBFTkFCTEUo
VEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFz
VGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQodGFyZ2V0Tm9kZSku
Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJnZXROb2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyBk
b3duY2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50Pih0YXJnZXROb2RlKS5jb250ZW50KCktPmZpcnN0
Q2hpbGQoKSA6IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2Vsc2UKICAgICAgICAgTm9kZSog
Y3VycmVudCA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDBiMDI0
NjI3MmQ5NTU3MmUyNDJlNjAwZWJlNDdkZmE3YTY3NTE0OWQuLmJkNTM2ZjA3OWYyMWZhY2U4M2Jk
ZTRiZjgzODM2MDcxYjEyZjcxOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMjczLDcgKzEyNzMsNyBAQCBib29sIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNs
b3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVt
ZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bh
c3N3b3JkRmllbGQoKSkKKyAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50
KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wp
LmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERpc2FibGUgc21h
cnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA0MDIyNWYwNmZh
YzZlY2VjMzg3ZmU1NGQxMmRhYmM0NTc2NmYyMjY0Li5iYTgzMjVmNTZjZWE0OWE4YzFjNTY4YWFi
MDBkYzRiOGRkNTU4MTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5jcHAKQEAgLTY1OCwxMyArNjU4LDEzIEBAIEVsZW1lbnQqIFZpc2libGVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogCiBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpu
b25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRh
cnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRl
ZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVl
Um9vdE5vZGUoKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdAogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0
ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAgICByZXR1
cm4gdGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hU
TUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1
cm4gdGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpOwog
fQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCmluZGV4IDhiYjc0OTZiOTVlMjQwMjIxZjRlN2E2YjNkMzg5YmY0MTdkMjgz
NzMuLjI0YmE1ZTFhMDIyNGU1MDk3MGQ4OTcwMzQ0ZmI3ODYxNjhhMTAyODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTIwMzUsNyArMjAz
NSw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSAiZGVjaW1h
bCI7CiAgICAgICAgIGxpc3QgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRMaXN0IGFsbG9jXSBp
bml0V2l0aE1hcmtlckZvcm1hdDpTdHJpbmcoInsiICsgbGlzdFN0eWxlVHlwZSArICJ9Iikgb3B0
aW9uczowXSk7CiAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSB0b0hUTUxPTGlzdEVsZW1l
bnQoZWxlbWVudCkuc3RhcnQoKTs7CisgICAgICAgICAgICBOU0ludGVnZXIgc3RhcnRpbmdJdGVt
TnVtYmVyID0gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oZWxlbWVudCkuc3RhcnQoKTsKICAg
ICAgICAgICAgIFtsaXN0IHNldFN0YXJ0aW5nSXRlbU51bWJlcjpzdGFydGluZ0l0ZW1OdW1iZXJd
OwogICAgICAgICB9CiAgICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsK
QEAgLTIwNDMsNyArMjA0Myw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgX2FkZFF1b3RlRm9y
RWxlbWVudChlbGVtZW50LCBZRVMsIF9xdW90ZUxldmVsKyspOwogICAgIH0gZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1l
bnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50
KTsKICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQudHlwZSgpID09ICJ0ZXh0IikgewogICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSgpOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3RoXSA+IDApCkBAIC0yMDUyLDcg
KzIwNTIsNyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCBOU0ludGVnZXIgZGVwdGgpCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKICAgICAgICAgaWYgKGlzSFRNTFRleHRBcmVh
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4
dEFyZWFFbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAg
ICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dEFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB0
ZXh0QXJlYUVsZW1lbnQudmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUg
bGVuZ3RoXSA+IDApCiAgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAwYWFjYWQ0NTdmMDUw
YjA0MmVmYzZjYWMwNDhkNTdiZmY4Y2QwODdjLi5lMGViMzY5YzI0M2IwMGYyZDg0MjhjMDAyZTA0
N2I2ODNlOWRkZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBA
IC0xODEsMTIgKzE4MSwxMiBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5n
ZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgICAgICByZXR1
cm47CiAKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGZvY3VzZWRFbGVt
ZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCAoZm9jdXNlZEVsZW1lbnQtPmhhc1RhZ05h
bWUoaW5wdXRUYWcpICYmCi0gICAgICAgICh0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNlZEVsZW1l
bnQpLT5pc1RleHRGaWVsZCgpIHx8Ci0gICAgICAgICB0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpLT5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKKyAgICBpZiAoZm9jdXNlZEVsZW1lbnQg
JiYgKGlzSFRNTFRleHRBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkgfHwgKGlzSFRNTElucHV0
RWxlbWVudChmb2N1c2VkRWxlbWVudCkKKyAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQorICAgICAgICAgICAgfHwgZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkp
KSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdG9IVE1MRWxlbWVudChmb2N1c2VkRWxlbWVu
dCktPnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKKyAgICAgICAgdG9IVE1MRWxl
bWVudCgqZm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsK
ICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmMyMmJm
ZTI4YTEwNGViYWYxNTQ2MDFkZmU4Yzk4ODliMmYyMWVkZC4uNDNlNjk1NzM0MGFkYmU0NTZiZmNi
ZmNiMzQ1ZmM3MGM4YmU0ODgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzQ2
LDcgKzc0Niw3IEBAIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSogbm9kZSkKICAgICBpZiAo
IWlzSFRNTERpdkVsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhU
TUxEaXZFbGVtZW50JiBlbGVtZW50ID0gdG9IVE1MRGl2RWxlbWVudCgqbm9kZSk7CisgICAgSFRN
TERpdkVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRGl2RWxlbWVudD4oKm5vZGUpOwog
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCmluZGV4IDJlMmQ5YmQzYjBhM2Ri
ZTRjODIyNmU2MDk1Yjc3YjBhMDgwZDAyOGQuLmVhOTEzMTE4YTA5N2MzZDAyYjNkY2YzNjgwMTE4
MzAwOGI4MWYxNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCkBAIC0y
MjgsNyArMjI4LDcgQEAgVmVjdG9yPENvbG9yPiBDb2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMo
KSBjb25zdAogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRh
dGFMaXN0KCk7CiAgICAgaWYgKGRhdGFMaXN0KSB7CiAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gb3B0aW9ucyA9IGRhdGFMaXN0LT5vcHRpb25zKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50
KG9wdGlvbnMtPml0ZW0oaSkpOyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
SFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pihv
cHRpb25zLT5pdGVtKGkpKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1Zh
bGlkVmFsdWUob3B0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIENvbG9yIGNvbG9yKG9wdGlvbi0+dmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDM1ZTMyZDM4MTRlMDdjMGExYWY2
MzExMDIwODFmNGU3MjhhOWM3M2YuLmQ2ZjE0ZDczNTM1MzIzNjkxZmM5NmY4YjBmOGZjZjNiMzg2
ODhmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
CkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6bG9h
ZERvY3VtZW50VGVtcGxhdGUoKQogICAgIGVsc2UgaWYgKCFpc0hUTUxUYWJsZUVsZW1lbnQodGFi
bGVFbGVtZW50LmdldCgpKSkKICAgICAgICAgTE9HX0VSUk9SKCJFbGVtZW50IG9mIGlkIFwiZnRw
RGlyZWN0b3J5VGFibGVcIiBpcyBub3QgYSB0YWJsZSBlbGVtZW50Iik7CiAgICAgZWxzZSAKLSAg
ICAgICAgbV90YWJsZUVsZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50Lmdl
dCgpKTsKKyAgICAgICAgbV90YWJsZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50
Pih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogCiAgICAgLy8gQmFpbCBpZiB3ZSBmb3VuZCB0aGUgdGFi
bGUgZWxlbWVudAogICAgIGlmIChtX3RhYmxlRWxlbWVudCkKQEAgLTMxMSw3ICszMTEsNyBAQCBi
b29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAK
ICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIG9uZSBtYW51YWxseQogICAgIHRhYmxlRWxlbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKLSAgICBtX3RhYmxl
RWxlbWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQuZ2V0KCkpOworICAgIG1f
dGFibGVFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50Lmdl
dCgpKTsKICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRy
LCAiZnRwRGlyZWN0b3J5VGFibGUiKTsKIAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSB0
YWJsZSBlbGVtZW50LCBsZXRzIHRyeSB0byBhcHBlbmQgb3VyIG93biB0byB0aGUgYm9keQpAQCAt
MzM2LDcgKzMzNiw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZUJh
c2ljRG9jdW1lbnQoKQogICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKGJvZHlFbGVtZW50LCBJ
R05PUkVfRVhDRVBUSU9OKTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBk
b2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhYmxlVGFnLCBmYWxzZSk7Ci0gICAgbV90YWJsZUVs
ZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50LmdldCgpKTsKKyAgICBtX3Rh
YmxlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlRWxlbWVudC5nZXQo
KSk7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwg
ImZ0cERpcmVjdG9yeVRhYmxlIik7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnN0eWxlQXR0ciwgIndpZHRoOjEwMCUiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDQ0ZWUwNTA3YWQ3NWU0NmY2NGY1
YThhZTJhMGYwNDdkODEwYjA2NzUuLjlkZjQwNTk4OTI0OThjZWRjZjIzNmRjNDZhY2VhM2RhMTAz
ZDExYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5j
cHAKQEAgLTk2LDEwICs5NiwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6ZmluZEFzc29jaWF0ZWRGb3JtKGNvbnN0IEhUTUxFbGVtZW50KiBlbAogICAgICAgICAv
LyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVx
dWFsIHRvCiAgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0
IHRoZSByZXN1bHQgb2YKICAgICAgICAgLy8gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoKSBv
dmVyIHRoZSBnaXZlbiBlbGVtZW50LgotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0g
PSAwOworICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSBudWxscHRyOwogICAgICAg
ICBFbGVtZW50KiBuZXdGb3JtQ2FuZGlkYXRlID0gZWxlbWVudC0+dHJlZVNjb3BlKCkuZ2V0RWxl
bWVudEJ5SWQoZm9ybUlkKTsKICAgICAgICAgaWYgKG5ld0Zvcm1DYW5kaWRhdGUgJiYgaXNIVE1M
Rm9ybUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSkpCi0gICAgICAgICAgICBuZXdGb3JtID0gdG9I
VE1MRm9ybUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBuZXdGb3JtID0g
ZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0
dXJuIG5ld0Zvcm07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCmluZGV4IGYxNjBhMmI4MWQxNDY0NjlkMWNlYWNmMmJmYTg5ZDljNTJiMTk4NDEuLjM0
YWZlYjlmODlmZDNmMjM4MTk4NDU0N2M3MDI0NzMwNWI4ZDM4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNjEsMTYgKzE2MSwxNiBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZl
bnQqIGV2ZW50KQogICAgIGlmICghaXNIVE1MSW1hZ2VFbGVtZW50KHRhcmdldCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHRvSFRNTElt
YWdlRWxlbWVudCh0YXJnZXQpOwotICAgIGlmICghaW1hZ2VFbGVtZW50IHx8ICFpbWFnZUVsZW1l
bnQtPmlzU2VydmVyTWFwKCkpCisgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2VFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKnRhcmdldCk7CisgICAgaWYgKCFpbWFnZUVsZW1l
bnQuaXNTZXJ2ZXJNYXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpbWFnZUVsZW1l
bnQtPnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFn
ZSgpKQorICAgIGlmICghaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC5y
ZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJJ
bWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7
CisgICAgUmVuZGVySW1hZ2UmIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZSgqaW1hZ2VFbGVtZW50
LnJlbmRlcmVyKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3Mg
dHJ1ZSBmb3IgdXNlVHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24g
PSByZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50
KS0+cGFnZVgoKSwgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVkoKSkpOworICAgIEZsb2F0UG9p
bnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50
KHRvTW91c2VFdmVudChldmVudCktPnBhZ2VYKCksIHRvTW91c2VFdmVudChldmVudCktPnBhZ2VZ
KCkpKTsKICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJz
b2x1dGVQb3NpdGlvbi55KCk7CiAgICAgdXJsLmFwcGVuZCgnPycpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXJlYUVsZW1lbnQuY3BwCmluZGV4IGIzNzk1NmMyMWJjNGE3NTZiMjc5OWE5YmRhMjE1
YTBhN2ZhYjUyYTMuLmRkODRiZGM2ODQwYzdhYjc2OTQxM2ZmZDFmMWEzNzNjMTY5NTc0MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKQEAgLTE4Myw5ICsxODMsOSBA
QCBIVE1MSW1hZ2VFbGVtZW50KiBIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCgpIGNvbnN0
CiB7CiAgICAgTm9kZSogbWFwRWxlbWVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1hcEVs
ZW1lbnQgfHwgIWlzSFRNTE1hcEVsZW1lbnQobWFwRWxlbWVudCkpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxl
bWVudChtYXBFbGVtZW50KS0+aW1hZ2VFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxNYXBFbGVtZW50PigqbWFwRWxlbWVudCkuaW1hZ2VFbGVtZW50KCk7CiB9CiAKIGJvb2wgSFRN
TEFyZWFFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCAzMzI3YWJiYjNhYjliZjI1
ZGNiYWZkYWZhN2U5MzVhOGFjZGVhY2Y3Li45MWJiMjgxZjMxMjRjODgyYTRmNzcwNTcyYTIyNzBk
MjVjOTg5MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMTkx
LDEwICsxOTEsMTAgQEAgaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENv
bGxlY3Rpb24mIGh0bWxDb2xsZWN0aW9uLCBFbGVtZW50JiBlbGUKICAgICBjYXNlIFNlbGVjdE9w
dGlvbnM6CiAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKTsKICAg
ICBjYXNlIFNlbGVjdGVkT3B0aW9uczoKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFt
ZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkuc2VsZWN0ZWQoKTsK
KyAgICAgICAgcmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLnNlbGVjdGVkKCk7CiAgICAgY2FzZSBEYXRhTGlz
dE9wdGlvbnM6Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewot
ICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCk7CisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7
CisgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFvcHRpb24uaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgJiYgIW9wdGlvbi52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIGlubGluZSBi
b29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBodG1sQ29sbGVjdGlv
biwgRWxlbWVudCYgZWxlCiAgICAgY2FzZSBNYXBBcmVhczoKICAgICAgICAgcmV0dXJuIGVsZW1l
bnQuaGFzVGFnTmFtZShhcmVhVGFnKTsKICAgICBjYXNlIERvY0FwcGxldHM6Ci0gICAgICAgIHJl
dHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1l
KG9iamVjdFRhZykgJiYgdG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5jb250YWluc0phdmFB
cHBsZXQoKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxl
bWVudD4oZWxlbWVudCkuY29udGFpbnNKYXZhQXBwbGV0KCkpOwogICAgIGNhc2UgRG9jRW1iZWRz
OgogICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFnKTsKICAgICBjYXNl
IERvY0xpbmtzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBmNDY5ZWM1MjM3
NDRiNzVmN2EyZDM0YmQwNDk1NzQxMjgyNzk1NjdjLi5jODcwYzMwNDBhYzlhYzJlM2NiODQ0YmZi
ZTE3YTcxNGNiNTA3MGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzc5
LDcgKzM3OSw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFz
cygpIGNvbnN0CiAKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVu
dCgpOwogICAgIGlmIChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0
IEhUTUxEb2N1bWVudCYgaHRtbERvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpOwor
ICAgICAgICBjb25zdCBIVE1MRG9jdW1lbnQmIGh0bWxEb2N1bWVudCA9IGRvd25jYXN0PEhUTUxE
b2N1bWVudD4oZG9jdW1lbnQpOwogICAgICAgICByZXR1cm4gaHRtbERvY3VtZW50LmluRGVzaWdu
TW9kZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjgsNyArNDI4LDcgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHRoaXM7CiAjaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIGlmIChoYXNUYWdOYW1lKHRlbXBsYXRl
VGFnKSkKLSAgICAgICAgICAgIGNvbnRhaW5lciA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0aGlz
KS0+Y29udGVudCgpOworICAgICAgICAgICAgY29udGFpbmVyID0gZG93bmNhc3Q8SFRNTFRlbXBs
YXRlRWxlbWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKICNlbmRpZgogICAgICAgICByZXBsYWNlQ2hp
bGRyZW5XaXRoRnJhZ21lbnQoKmNvbnRhaW5lciwgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAg
ICAgfQpAQCAtOTIwLDExICs5MjAsMTEgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb24KIFRleHRE
aXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rp
b25hbGl0eVRleHROb2RlKSBjb25zdAogewogICAgIGlmIChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KCp0aGlzKSkgewotICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4
dEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0X2Nhc3Q8SFRNTEVs
ZW1lbnQqPih0aGlzKSk7CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihjb25zdF9jYXN0
PEhUTUxFbGVtZW50Jj4oKnRoaXMpKTsKICAgICAgICAgYm9vbCBoYXNTdHJvbmdEaXJlY3Rpb25h
bGl0eTsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRleHRFbGVtZW50
LT52YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0
eSk7CisgICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVudC52
YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7
CiAgICAgICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQotICAgICAgICAgICAg
KnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/
IHRleHRFbGVtZW50IDogbnVsbHB0cjsKKyAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlID0gaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPyAmdGV4dEVsZW1lbnQgOiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/
IExUUiA6IFJUTDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwCmluZGV4IGNhMjU2NGEyMGQyYTJiNjExMzE4ODdiMjhjNGEyZmFlMTRlZGJlNTYuLjM2NDJi
ODVjYjZjYjU3Mjg1ZDZjZDA3ZTVhYjNlOWE1NDQxMWZhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMTg4LDEyICsxODgsMTIgQEAgYm9vbCBIVE1MRW1i
ZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAog
ICAgIC8vIElmIG15IHBhcmVudCBpcyBhbiA8b2JqZWN0PiBhbmQgaXMgbm90IHNldCB0byB1c2Ug
ZmFsbGJhY2sgY29udGVudCwgSQogICAgIC8vIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgZ2V0
IGEgcmVuZGVyZXIuCi0gICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKLSAgICBp
ZiAocCAmJiBwLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgaWYgKCFwLT5yZW5k
ZXJlcigpKQorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBp
ZiAocGFyZW50ICYmIGlzSFRNTE9iamVjdEVsZW1lbnQocGFyZW50KSkgeworICAgICAgICBpZiAo
IXBhcmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCF0b0hUTUxPYmplY3RFbGVtZW50KHApLT51c2VGYWxsYmFja0NvbnRlbnQoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFwLT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOworICAg
ICAgICBpZiAoIWRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PigqcGFyZW50KS51c2VGYWxsYmFj
a0NvbnRlbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFwYXJlbnQtPnJlbmRlcmVyKCktPmlz
RW1iZWRkZWRPYmplY3QoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRl
eCBkYjUwYjI3YWYzYzBmMzlmMmM4NDY2MjNlNDVhZjJhNDEyYTk3ZmIzLi4wNDYxOWI1ODc4YzM1
YzAxYThkYjQ4YmJhMTdmMjVhN2YyZGIzYjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEhUTUxGaWVsZFNl
dEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKCkgY29uc3QKIAogICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRNTEZp
ZWxkU2V0RWxlbWVudCY+KCp0aGlzKSkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShvYmplY3RUYWcpKQotICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0
b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKTsKKyAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLmFwcGVuZCgmZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAg
ICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
ZWxlbWVudCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCmluZGV4IGEzMWY5MjZlN2E3ZmNkZTVlZDA5OTZmMjJlYjViYTUzNTA4M2Q4
MTkuLjEyYWNmYjNhYzU4MmZlYmI1NDA2OWRhNGYyYjY3MzU0YmVjMDNkMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMTA0LDcgKzEw
NCw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZp
ZWxkc2V0QW5jZXN0b3IoKSBjb25zdAogICAgIEVsZW1lbnQqIHByZXZpb3VzQW5jZXN0b3IgPSBu
dWxscHRyOwogICAgIGZvciAoRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnRFbGVtZW50KCk7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAg
aWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChhbmNlc3RvcikgJiYgYW5jZXN0b3ItPmZhc3RIYXNB
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgewotICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVu
dCYgZmllbGRTZXRBbmNlc3RvciA9IHRvSFRNTEZpZWxkU2V0RWxlbWVudCgqYW5jZXN0b3IpOwor
ICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmllbGRTZXRBbmNlc3RvciA9IGRvd25j
YXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KCphbmNlc3Rvcik7CiAgICAgICAgICAgICBib29sIGlz
SW5GaXJzdExlZ2VuZCA9IHByZXZpb3VzQW5jZXN0b3IgJiYgaXNIVE1MTGVnZW5kRWxlbWVudChw
cmV2aW91c0FuY2VzdG9yKSAmJiBwcmV2aW91c0FuY2VzdG9yID09IGZpZWxkU2V0QW5jZXN0b3Iu
bGVnZW5kKCk7CiAgICAgICAgICAgICByZXR1cm4gIWlzSW5GaXJzdExlZ2VuZDsKICAgICAgICAg
fQpAQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9mb2N1cyhIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBzZXQg
b2YgaGFzVGFnTmFtZSBjaGVja3MgYmUgcmVwbGFjZWQgYnkgYQogICAgIC8vIHZpcnR1YWwgbWVt
YmVyIGZ1bmN0aW9uPwogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCi0gICAg
ICAgIHJldHVybiAhdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLT5pc0lucHV0VHlwZUhpZGRl
bigpOworICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50
KS5pc0lucHV0VHlwZUhpZGRlbigpOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KGtleWdlblRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwCmluZGV4IDc3YWQ3NDIzOGYyZDQzMTBhMmNlZDkyNDhjOGMyYWNjMDY1
YjAwZTcuLjY4YzFkZWVmMjQ3NzMyNzMxZjdlMDUzNmEwMzAwNzVkZGYzZjk3ZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCkBA
IC01NiwxNCArNTYsMTQgQEAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGUKIHsKICAgICBBU1NFUlQo
aXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpIHx8IG93bmVyTm9kZSgpLmhhc1RhZ05hbWUo
ZmllbGRzZXRUYWcpKTsKICAgICBpZiAoaXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpLmFzc29jaWF0ZWRF
bGVtZW50cygpOwotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQob3duZXJOb2RlKCkp
LmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1F
bGVtZW50Pihvd25lck5vZGUoKSkuYXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG93bmVyTm9kZSgpKS5hc3NvY2lhdGVkRWxlbWVu
dHMoKTsKIH0KIAogY29uc3QgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiYgSFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb246OmZvcm1JbWFnZUVsZW1lbnRzKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKTsKLSAgICByZXR1cm4gdG9IVE1MRm9ybUVs
ZW1lbnQob3duZXJOb2RlKCkpLmltYWdlRWxlbWVudHMoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTEZvcm1FbGVtZW50Pihvd25lck5vZGUoKSkuaW1hZ2VFbGVtZW50cygpOwogfQogCiBzdGF0
aWMgdW5zaWduZWQgZmluZEZvcm1Bc3NvY2lhdGVkRWxlbWVudChjb25zdCBWZWN0b3I8Rm9ybUFz
c29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGM4OGVhYzk1MWRlMDI5M2E1
NzE5NzdhYWNhYjIwZjcyN2Y5ZGMzMGEuLjQ1ODliNDc3NzU3ZjZkYjJhM2IwM2M4MmI1ZjYzNWE1
OWM0OWQ4YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTMx
OCw3ICszMTgsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0VGV4dEZpZWxkVmFsdWVzKFN0
cmluZ1BhaXJWZWN0b3ImIGZpZWxkTmFtZXNBbmRWYWx1ZXMpCiAgICAgICAgIEhUTUxFbGVtZW50
JiBlbGVtZW50ID0gY29udHJvbC5hc0hUTUxFbGVtZW50KCk7CiAgICAgICAgIGlmICghaXNIVE1M
SW5wdXRFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlucHV0LmlzVGV4dEZpZWxkKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgZmllbGROYW1lc0FuZFZhbHVlcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoaW5wdXQubmFtZSgpLnN0cmluZygpLCBpbnB1dC52YWx1ZSgpKSk7CkBAIC03NDUsNyAr
NzQ1LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVz
TWFwKEZvcm1OYW1lZEl0ZW0qIGl0ZW0pIGNvbnN0CiAgICAgfQogCiAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oZWxlbWVudC5oYXNUYWdOYW1lKGltZ1RhZykpOwotICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1faW1hZ2VFbGVtZW50cy5maW5kKCZ0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihtX2ltYWdlRWxlbWVudHMuZmluZCgmZG93bmNhc3Q8SFRNTElt
YWdlRWxlbWVudD4oZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKIH0KICNlbHNlCiBpbmxpbmUgdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVzTWFwKEZvcm1OYW1l
ZEl0ZW0qKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNzM4YTkxOThlNzkxZjc5MWUyNGYyN2VmNmIwZGRmZDA0MmM1OWEzZi4uMjhjZjMwMjdiMWM2
YTI4OWVjYTBhNjQ5ZGQ2MDA1YTBiNGRkMzE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCkBAIC0xODMsMTMgKzE4MywxMyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cgogICAgICAgICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICAgICAgYm9vbCB3
aWxsSGF2ZU5hbWUgPSAhdmFsdWUuaXNOdWxsKCk7CiAgICAgICAgICAgICBpZiAoaGFzTmFtZSgp
ICE9IHdpbGxIYXZlTmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHRvSFRN
TERvY3VtZW50KCZ0aGlzLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBIVE1MRG9jdW1l
bnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERvY3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0
cmlidXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5hZGREb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1w
bCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGREb2N1bWVu
dE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRl
bSgqaWQuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5y
ZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUxvYWRlci5jcHAKaW5kZXggMTg3OWRiYzI5NTA0ZWMyMzEzNDc5MmY3MzViNjUwMTgxMmE2YThk
Mi4uZmIzNGM4Y2NkOTIwNjZmNGUwZjAzMzZhODFlNzVkMzIxMmNkNWM1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxJ
bWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQogICAgIH0KIAogICAg
IGlmIChsb2FkRXJyb3IgJiYgaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAg
ICB0b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7
CisgICAgICAgIGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZh
bGxiYWNrQ29udGVudCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAppbmRleCBhOGViYWE5ZDM2ZDYyYTU2ZjA3OTJhMzhlZWFjNWRkM2I5MzgxOTU4Li5l
MmQ1NWUzMzUxNDViYTI5OWNiNzIxZjdkOGRhNzdkNmNiZGU2NTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTE1MTUsMTggKzE1MTUsMTYgQEAgSFRNTEVs
ZW1lbnQqIEhUTUxJbnB1dEVsZW1lbnQ6Omxpc3QoKSBjb25zdAogSFRNTERhdGFMaXN0RWxlbWVu
dCogSFRNTElucHV0RWxlbWVudDo6ZGF0YUxpc3QoKSBjb25zdAogewogICAgIGlmICghbV9oYXNO
b25FbXB0eUxpc3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmICghbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGxp
c3RBdHRyKSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
IWVsZW1lbnQtPmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcpKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIWVsZW1lbnQgfHwgIWlzSFRNTERhdGFMaXN0RWxlbWVudChlbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50KGVs
ZW1lbnQpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50
KTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZXNldExpc3RBdHRyaWJ1dGVUYXJnZXRP
YnNlcnZlcigpCkBAIC0xODU1LDcgKzE4NTMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dHVwRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyhEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzJgog
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGlmIChIVE1MRGF0YUxpc3RFbGVtZW50
KiBkYXRhTGlzdCA9IHRoaXMtPmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQob3B0aW9ucy0+aXRlbShpKSk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KG9wdGlvbnMtPml0ZW0oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghaXNWYWxpZFZhbHVl
KG9wdGlvbi0+dmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBwYXJhbWV0ZXJzLnN1Z2dlc3Rpb25WYWx1ZXMuYXBwZW5kKHNhbml0aXplVmFsdWUob3B0aW9u
LT52YWx1ZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCmlu
ZGV4IDcxNGJkYjJlMWJkOGNhYjNhOGY1YmUxYmNjNzFjZDE0MzI0N2JkODQuLjFmNWQ2N2ZjOTQw
YzU5M2UyZGI2ZTg2ODk5MWFkNDMzMjZiNmIyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEtleWdlbkVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxl
bWVudDo6c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIEhUTUxT
ZWxlY3RFbGVtZW50KiBIVE1MS2V5Z2VuRWxlbWVudDo6c2hhZG93U2VsZWN0KCkgY29uc3QKIHsK
ICAgICBTaGFkb3dSb290KiByb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHJldHVy
biByb290ID8gdG9IVE1MU2VsZWN0RWxlbWVudChyb290LT5maXJzdENoaWxkKCkpIDogMDsKKyAg
ICByZXR1cm4gcm9vdCA/IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihyb290LT5maXJzdENo
aWxkKCkpIDogbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKaW5kZXggNTk3M2JjMjA3MzlkYWFlMmRkNDQyMzRhMGNj
ZTE2MWI5YmUzMGZjYi4uMmZiNGQyNTBmMjUxYjBmZjk1MjlmODdhOGU4ODc4MzFhZDdlZTQyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKQEAgLTc5LDEwICs3
OSwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSgp
IGNvbnN0CiAgICAgLy8gaXRzIHBhcmVudCwgdGhlbiB0aGUgZm9ybSBhdHRyaWJ1dGUgbXVzdCBy
ZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlCiAgICAgLy8gZm9ybSBhdHRyaWJ1dGUgb24gdGhh
dCBmaWVsZHNldCBlbGVtZW50LiBPdGhlcndpc2UsIGl0IG11c3QgcmV0dXJuIG51bGwuCiAgICAg
Q29udGFpbmVyTm9kZSogZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFmaWVsZHNl
dCB8fCAhZmllbGRzZXQtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIWZpZWxkc2V0IHx8ICFpc0hUTUxGaWVsZFNldEVsZW1lbnQoZmllbGRzZXQp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVs
ZW1lbnQoZmllbGRzZXQpLT5mb3JtKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNl
dEVsZW1lbnQ+KCpmaWVsZHNldCkuZm9ybSgpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDNkMjFjNTJhZmE4M2Iz
MjY0NzhlMTZjNGQ5YTJiYzU3YWNkODI4NmEuLmQzNjhiYWRhNWRhMGJhNjJjNjUxYTQ4MTY3NDkz
ZWI3OTJmMjU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApA
QCAtMzg3Niw3ICszODc2LDcgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3Vy
Y2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyoga2UKICAgICB9CiAKICAg
ICBVUkwgbWVkaWFVUkw7Ci0gICAgSFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IDA7CisgICAg
SFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IG51bGxwdHI7CiAgICAgU3RyaW5nIHR5cGU7CiAg
ICAgU3RyaW5nIHN5c3RlbTsKICAgICBib29sIGxvb2tpbmdGb3JTdGFydE5vZGUgPSBtX25leHRD
aGlsZE5vZGVUb0NvbnNpZGVyOwpAQCAtMzg5Nyw3ICszODk3LDcgQEAgVVJMIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0
cmluZyoga2UKICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpICE9IHRoaXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBzb3VyY2UgPSB0b0hUTUxTb3VyY2VFbGVtZW50KCZu
b2RlKTsKKyAgICAgICAgc291cmNlID0gZG93bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+KCZub2Rl
KTsKIAogICAgICAgICAvLyBJZiBjYW5kaWRhdGUgZG9lcyBub3QgaGF2ZSBhIHNyYyBhdHRyaWJ1
dGUsIG9yIGlmIGl0cyBzcmMgYXR0cmlidXRlJ3MgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZyAu
Li4ganVtcCBkb3duIHRvIHRoZSBmYWlsZWQgc3RlcCBiZWxvdwogICAgICAgICBtZWRpYVVSTCA9
IHNvdXJjZS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0cik7CkBAIC00ODgzLDkgKzQ4
ODMsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgaWYg
KGhhc01lZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5lbnRlcmVkRnVs
bHNjcmVlbigpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpc0hUTUxWaWRlb0VsZW1l
bnQodGhpcykpIHsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogYXNWaWRlbyA9IHRvSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKTsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgYXNWaWRlbyA9IGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCku
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRl
b0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoYXNWaWRlbyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRl
b0VsZW1lbnQoJmFzVmlkZW8pOwogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVz
KCkud2Via2l0YmVnaW5mdWxsc2NyZWVuRXZlbnQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4IDY2MDE3NDYwYmNhZTI5
M2E1ZTQ2MmQ3YWI4NjdkMTA5M2FiNTU5ZDkuLmZlZjQxZmRkZTNlY2ZkZTlhNDhjNGFjMTRlZWJi
OTUyZTE5YzA2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAKQEAgLTY2LDE0ICs2NiwxNCBAQCBib29sIFdpbmRvd05hbWVDb2xsZWN0aW9uOjplbGVtZW50
TWF0Y2hlcyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdAogYm9vbCBEb2N1
bWVudE5hbWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hlc0lmSWRBdHRyaWJ1dGVNYXRjaChjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGZpeCBIVE1M
SW1hZ2VFbGVtZW50IHRvIHVwZGF0ZSB0aGUgaGFzaCBtYXAgZm9yIHVzIHdoZW4gbmFtZSBhdHRy
aWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGFw
cGxldFRhZykgfHwgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIHRvSFRNTE9iamVj
dEVsZW1lbnQoZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0oKSkKKyAgICByZXR1cm4gZWxlbWVudC5o
YXNUYWdOYW1lKGFwcGxldFRhZykgfHwgKGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkgJiYg
ZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCkpCiAg
ICAgICAgIHx8IChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5oYXNOYW1l
KCkpOwogfQogCiBib29sIERvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZO
YW1lQXR0cmlidXRlTWF0Y2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
aXNIVE1MRm9ybUVsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYg
dG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpKQorICAgICAgICB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoaXNIVE1MT2JqZWN0RWxlbWVudChl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuaXNEb2NOYW1l
ZEl0ZW0oKSkKICAgICAgICAgfHwgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwogfQogCkBA
IC04NSw4ICs4NSw4IEBAIGJvb2wgRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNo
ZXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljCiAgICAgICAgIHJldHVybiBl
bGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZTsKICAgICBpZiAoZWxlbWVu
dC5oYXNUYWdOYW1lKGFwcGxldFRhZykpCiAgICAgICAgIHJldHVybiBlbGVtZW50LmdldE5hbWVB
dHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSB8fCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkuaW1w
bCgpID09IG5hbWU7Ci0gICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAg
ICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8
IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSkgJiYgdG9IVE1MT2JqZWN0
RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpOworICAgIGlmIChpc0hUTUxPYmplY3RF
bGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0
ZSgpLmltcGwoKSA9PSBuYW1lIHx8IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0g
bmFtZSkgJiYgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJ
dGVtKCk7CiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8IChlbGVtZW50
LmdldElkQXR0cmlidXRlKCkuaW1wbCgpID09IG5hbWUgJiYgZWxlbWVudC5oYXNOYW1lKCkpOwog
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKaW5kZXggOTE3N2VhYTMwZGFmOWM5NThhYTcwNGZlN2JhY2ZhZmZmZDg2ZDVhMS4uYzA1YTQw
NWZmMDJhYjI4YWZlNDI0Y2NmMTFmZGZjNmI5ZmZiMWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTQzNiwyMiArNDM2LDIyIEBAIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCiAgICAgICAgIGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CiAgICAgfQogICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0
ZW0gJiYgaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewotICAg
ICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoJnRoaXMtPmRvY3Vt
ZW50KCkpOworICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERv
Y3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKIAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGlmIChpc05hbWVkSXRlbSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
RG9jdW1lbnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmFkZERvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0
ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZURv
Y3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSAmJiBpZCAhPSBuYW1lKSB7CiAgICAgICAgICAgICBpZiAoaXNO
YW1lZEl0ZW0pCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmFkZERvY3VtZW50TmFtZWRJdGVt
KCpuYW1lLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZERvY3Vt
ZW50TmFtZWRJdGVtKCpuYW1lLmltcGwoKSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBs
KCksICp0aGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVEb2N1bWVudE5hbWVk
SXRlbSgqbmFtZS5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2RvY05h
bWVkSXRlbSA9IGlzTmFtZWRJdGVtOwpAQCAtNDY2LDcgKzQ2Niw3IEBAIGJvb2wgSFRNTE9iamVj
dEVsZW1lbnQ6OmNvbnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0CiAgICAgICAgIGlmIChjaGlsZC5o
YXNUYWdOYW1lKHBhcmFtVGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC5nZXROYW1lQXR0
cmlidXRlKCksICJ0eXBlIikKICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKGNoaWxkLmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShv
YmplY3RUYWcpICYmIHRvSFRNTE9iamVjdEVsZW1lbnQoY2hpbGQpLmNvbnRhaW5zSmF2YUFwcGxl
dCgpKQorICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIGRvd25jYXN0
PEhUTUxPYmplY3RFbGVtZW50PihjaGlsZCkuY29udGFpbnNKYXZhQXBwbGV0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGNoaWxkLmhhc1RhZ05hbWUoYXBwbGV0VGFn
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dEdyb3VwRWxlbWVudC5jcHAKaW5kZXggYzBhYjcwZDhlZTY5OTQ3Y2U0YTk5MmM4MTMzYmFjZThl
MzEwMzBmYS4uOTVkNmFiYzFmZWU2M2JlOTA4NzJhMjUwYzBlMzc2NGUwOGMxZTIxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC04NiwxMCArODYs
MTAgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWMKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6
cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFy
ZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxl
Y3RUYWcpKQorICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0
KSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVj
dCkKLSAgICAgICAgdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRl
bXMoKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3QpLnNldFJl
Y2FsY0xpc3RJdGVtcygpOwogfQogCiBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBM
YWJlbFRleHQoKSBjb25zdApAQCAtMTA3LDEzICsxMDcsMTMgQEAgU3RyaW5nIEhUTUxPcHRHcm91
cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29uc3QKIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRh
aW5lck5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFz
ZWxlY3QtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFpc0hU
TUxTZWxlY3RFbGVtZW50KHNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50
Tm9kZSgpOwogICAgIAogICAgIGlmICghc2VsZWN0KQotICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChz
ZWxlY3QpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KTsK
IH0KIAogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggYTZiMTQ3MDU5NjRh
NTRmYjE4ODQwN2ZiNzczMDAwY2Q2N2M2NDg3Ny4uMWFiN2EwNDA4YmY0ZjhhYmNkZGFjZTdjMjFi
MWFlNzk5ZGQwMjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKQEAgLTI1NywyMyArMjU3LDIzIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogSFRNTERhdGFMaXN0RWxlbWVudCog
SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBm
b3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50IDsgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFt
ZShkYXRhbGlzdFRhZykpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50
KHBhcmVudCk7CisgICAgICAgIGlmIChpc0hUTUxEYXRhTGlzdEVsZW1lbnQocGFyZW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihwYXJlbnQpOwog
ICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KICNlbmRpZgogCiBI
VE1MU2VsZWN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgp
IGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAg
IHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgIHdo
aWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KSkKICAgICAgICAgc2Vs
ZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIXNlbGVjdCkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvSFRNTFNl
bGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQ+KHNlbGVjdCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCmluZGV4
IGYxZGY0YzQxZWYwZGJiNjEyMjBlNTQxOWVjZDAyODE4Yjg1MmYwYWYuLmYyOTIxMmQ1YjZmOWE0
NTkyMDBjMjFiNTllMzM0MDk3ZmYxMjNiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgdm9pZCBIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OmFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50LCBp
bnQgaW5kZXgKICAgICBlYyA9IDA7CiAKICAgICBpZiAoaW5kZXggPT0gLTEgfHwgdW5zaWduZWQo
aW5kZXgpID49IGxlbmd0aCgpKQotICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlv
biwgMCwgZWMpOworICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlvbiwgbnVsbHB0
ciwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgc2VsZWN0RWxlbWVudCgpLmFkZChuZXdPcHRpb24s
IHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbShpbmRleCkpLCBlYyk7CisgICAgICAgIHNlbGVjdEVs
ZW1lbnQoKS5hZGQobmV3T3B0aW9uLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbShp
bmRleCkpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCmluZGV4IDFjNWU2ODg5YmY4NTlhYzk1OTlmZTBmNzM4
MDEyMWRlYTQ1MThkNmMuLjljNzkyNTY1ZTE0YWE1MzJhODZjOTkzOTBlYzA0NTRlYjQ3OGE4ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApAQCAtMzcs
OCArMzcsOCBAQCBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgSFRN
TENvbGxlY3Rpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPEhUTUxPcHRpb25zQ29s
bGVjdGlvbj4gY3JlYXRlKEhUTUxTZWxlY3RFbGVtZW50JiwgQ29sbGVjdGlvblR5cGUpOwogCi0g
ICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQoKSB7IHJldHVybiB0b0hUTUxTZWxl
Y3RFbGVtZW50KG93bmVyTm9kZSgpKTsgfQotICAgIGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50JiBz
ZWxlY3RFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChvd25lck5v
ZGUoKSk7IH0KKyAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIHsgcmV0dXJu
IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KKyAgICBjb25zdCBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KIAogICAgIHZvaWQgYWRkKFBhc3NS
ZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNDk2ZWQ1YjAwYTBiYzRiODYxZjFlZjVmM2ZlYTM2YTlkMWIyNDgzMC4uOThmNWM4NWMyNmZh
YTIzMGM5MzNhZDg2OTM2M2ZkM2Q4NWJmMTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC00MTcsMTEgKzQxNywxMSBAQCBzdGF0aWMg
dm9pZCBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oSFRNTFBsdWdJ
bkltYWdlRWxlbWVudExpcwogICAgICAgICBpZiAobm9kZS0+aXNQbHVnaW5FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0gdG9IVE1MUGx1
Z0luRWxlbWVudChub2RlKTsKICAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJ
bkltYWdlRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5vZGUpOwot
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTCYgbG9hZGVkVVJMID0gcGx1Z0luSW1hZ2VFbGVtZW50
LT5sb2FkZWRVcmwoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3RoZXJNaW1lVHlwZSA9IHBs
dWdJbkltYWdlRWxlbWVudC0+bG9hZGVkTWltZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICAgICAgY29uc3QgVVJMJiBsb2Fk
ZWRVUkwgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIG90aGVyTWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkTWltZVR5cGUo
KTsKICAgICAgICAgICAgICAgICBpZiAocGx1Z0luT3JpZ2luID09IGxvYWRlZFVSTC5ob3N0KCkg
JiYgbWltZVR5cGUgPT0gb3RoZXJNaW1lVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcGx1Z0lu
TGlzdC5hcHBlbmQocGx1Z0luSW1hZ2VFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcGx1
Z0luTGlzdC5hcHBlbmQoJnBsdWdJbkltYWdlRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmlu
ZGV4IDQxNDI3NTk3ODBmMGRiYmI5MjI3OTc2NDUxMTQxMzUzNDMyNWEyNjAuLjQ4MmI4MmY4NWFj
NjIyMGUzOTliZTI4Y2IzNGQyNGMxYzFhMzJkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCkBAIC0xNDksOCArMTQ5LDggQEAgYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6aGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpIGNvbnN0CiAgICAgQVNTRVJUKGxpc3RJ
bmRleCA+PSAwKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGxp
c3RJdGVtcygpW2xpc3RJbmRleF0pOwotICAgIHJldHVybiAhbGlzdEluZGV4ICYmIG9wdGlvbi0+
dmFsdWUoKS5pc0VtcHR5KCk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zKClbbGlzdEluZGV4XSk7CisgICAgcmV0
dXJuICFsaXN0SW5kZXggJiYgb3B0aW9uLnZhbHVlKCkuaXNFbXB0eSgpOwogfQogCiBTdHJpbmcg
SFRNTFNlbGVjdEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKQEAgLTI1MSw3ICsy
NTEsNyBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKICAgICBm
b3IgKGF1dG8qIGl0ZW0gOiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoaXNIVE1MT3B0aW9u
RWxlbWVudCgqaXRlbSkpIHsKLSAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24g
PSB0b0hUTUxPcHRpb25FbGVtZW50KCppdGVtKTsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVt
ZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOwogICAgICAg
ICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRp
b24udmFsdWUoKTsKICAgICAgICAgfQpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAgdW5zaWduZWQgb3B0
aW9uSW5kZXggPSAwOwogICAgIGZvciAoYXV0byogaXRlbSA6IGxpc3RJdGVtcygpKSB7CiAgICAg
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KCppdGVtKSkgewotICAgICAgICAgICAgaWYgKHRv
SFRNTE9wdGlvbkVsZW1lbnQoKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUp
IHsKICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG9wdGlvbkluZGV4KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC02MDUsNyArNjA1LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQo
aXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpLT5zZWxlY3RlZCgpKTsKKyAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5k
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KGVsZW1lbnQpLT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTYyMCw3ICs2MjAsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fY2Fj
aGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSk7CisgICAg
ICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLT5z
ZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTY0NCwxNSArNjQ0LDE1IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVjdE90aGVyT3B0
aW9ucykKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFpc0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpIHx8IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlm
IChpID49IHN0YXJ0ICYmIGkgPD0gZW5kKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKKyAg
ICAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0
ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAoZGVzZWxl
Y3RPdGhlck9wdGlvbnMgfHwgaSA+PSBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLnNp
emUoKSkKLSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2Nh
Y2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShtX2NhY2hlZFN0YXRl
Rm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKICAgICB9CiAKICAgICBzY3JvbGxUb1NlbGVjdGlvbigp
OwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNo
YW5nZSgpCiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQo
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkg
JiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOwogICAg
ICAgICBpZiAoc2VsZWN0ZWQgIT0gbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb25baV0pCiAgICAgICAg
ICAgICBmaXJlT25DaGFuZ2UgPSB0cnVlOwogICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlv
bltpXSA9IHNlbGVjdGVkOwpAQCAtODAyLDE1ICs4MDIsMTUgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMpIGNvbnN0CiAg
ICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlm
ICh1cGRhdGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewotICAgICAgICAgICAgICAg
IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGN1cnJlbnQp
OworICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmICghZmlyc3RP
cHRpb24pCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gb3B0aW9uOwotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RPcHRpb24gPSAmb3B0aW9uOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0
ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTZWxlY3RlZCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwot
ICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gb3B0aW9uOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9zaXplIDw9IDEgJiYgIWZvdW5kU2VsZWN0ZWQgJiYgIW9wdGlvbi0+
aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxl
Y3RlZCA9IG9wdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZCA9ICZvcHRp
b247CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3NpemUgPD0gMSAmJiAhZm91bmRTZWxl
Y3RlZCAmJiAhb3B0aW9uLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kU2VsZWN0ZWQgPSAmb3B0aW9uOwogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZFNlbGVjdGVkLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTg0MSw3ICs4NDEsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNl
bGVjdGVkSW5kZXgoKSBjb25zdAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKICAg
ICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlm
ICh0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAg
aWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAg
ICB9CkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0T3B0
aW9uKGludCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJ
bmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKIAotICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gMDsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IG51bGxwdHI7CiAgICAg
aWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIGVsZW1lbnQgPSBpdGVtc1tsaXN0SW5kZXhd
OwogICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkgewpAQCAtODgxLDcg
Kzg4MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdE9wdGlvbihpbnQgb3B0aW9u
SW5kZXgsIFNlbGVjdE9wdGlvbkZsYWdzIGZsYWdzKQogICAgICAgICAgICAgICAgIHNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleCA8IDAgfHwgc2hvdWxkRGVzZWxlY3QpCiAgICAgICAgICAgICAg
ICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKLSAgICAgICAgICAgIHRv
SFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAg
ICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVk
U3RhdGUodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVs
ZW1lbnQqIGV4Y2x1ZGVFbGVtZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwog
ICAgICAgICBpZiAoZWxlbWVudCAhPSBleGNsdWRlRWxlbWVudCAmJiBpc0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgIH0KIH0KIApA
QCAtOTgxLDEwICs5ODEsMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBIVE1MU2VsZWN0RWxlbWVudDo6
c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNb
aV0pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKLSAgICAgICAgaWYgKCFvcHRp
b24tPnNlbGVjdGVkKCkpCisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKTsKKyAgICAgICAgaWYgKCFvcHRpb24u
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGF0ZS5hcHBlbmQo
b3B0aW9uLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKG9wdGlvbi52YWx1ZSgpKTsK
ICAgICAgICAgaWYgKCFtdWx0aXBsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
OTk4LDcgKzk5OCw3IEBAIHNpemVfdCBIVE1MU2VsZWN0RWxlbWVudDo6c2VhcmNoT3B0aW9uc0Zv
clZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIHNpemVfdCBsaXN0CiAgICAgZm9yIChzaXplX3Qg
aSA9IGxpc3RJbmRleFN0YXJ0OyBpIDwgbG9vcEVuZEluZGV4OyArK2kpIHsKICAgICAgICAgaWYg
KCFpc0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAodG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpCisgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKS52
YWx1ZSgpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIHJldHVy
biBub3RGb3VuZDsKQEAgLTEwMTYsMTMgKzEwMTYsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUp
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtc1NpemU7ICsraSkgewogICAgICAgICBp
ZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pLT5zZXRTZWxlY3RlZFN0YXRl
KGZhbHNlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSku
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKCFtdWx0aXBsZSgpKSB7
CiAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gc2VhcmNoT3B0aW9uc0ZvclZhbHVlKHN0YXRl
WzBdLCAwLCBpdGVtc1NpemUpOwogICAgICAgICBpZiAoZm91bmRJbmRleCAhPSBub3RGb3VuZCkK
LSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRT
ZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCppdGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICB9IGVs
c2UgewogICAgICAgICBzaXplX3Qgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RhdGUudmFsdWVTaXplKCk7ICsraSkgewpAQCAtMTAzMiw3ICsxMDMyLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3Qg
Rm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IHNl
YXJjaE9wdGlvbnNGb3JWYWx1ZSh2YWx1ZSwgMCwgc3RhcnRJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoZm91bmRJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRTZWxl
Y3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCppdGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBmb3VuZEluZGV4ICsgMTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNjEs
OCArMTA2MSw4IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYgbGlzdCwgYm9vbCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ld
OwotICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpICYmICF0b0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewotICAgICAgICAgICAgbGlzdC5hcHBl
bmREYXRhKG5hbWUsIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnZhbHVlKCkpOworICAg
ICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpLnZhbHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDc1LDggKzEwNzUsOCBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBl
bmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxpc3QsIGJvb2wpCiAKIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAw
OwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CisgICAgSFRNTE9w
dGlvbkVsZW1lbnQqIGZpcnN0T3B0aW9uID0gbnVsbHB0cjsKKyAgICBIVE1MT3B0aW9uRWxlbWVu
dCogc2VsZWN0ZWRPcHRpb24gPSBudWxscHRyOwogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgKytpKSB7CkBAIC0xMDg0LDE2ICsxMDg0LDE3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5m
YXN0SGFzQXR0cmlidXRlKHNlbGVjdGVkQXR0cikpIHsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCk7CisgICAg
ICAgIGlmIChvcHRpb24uZmFzdEhhc0F0dHJpYnV0ZShzZWxlY3RlZEF0dHIpKSB7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIW1fbXVsdGlwbGUpCiAgICAgICAgICAgICAgICAg
c2VsZWN0ZWRPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwotICAgICAgICAgICAgdG9I
VE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKLSAgICAg
ICAgICAgIHNlbGVjdGVkT3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAg
ICAgICAgICAgIG9wdGlvbi5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgc2Vs
ZWN0ZWRPcHRpb24gPSAmb3B0aW9uOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRvSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAg
ICAgICAgb3B0aW9uLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogCiAgICAgICAgIGlmICghZmly
c3RPcHRpb24pCi0gICAgICAgICAgICBmaXJzdE9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCk7CisgICAgICAgICAgICBmaXJzdE9wdGlvbiA9ICZvcHRpb247CiAgICAgfQogCiAg
ICAgaWYgKCFzZWxlY3RlZE9wdGlvbiAmJiBmaXJzdE9wdGlvbiAmJiAhbV9tdWx0aXBsZSAmJiBt
X3NpemUgPD0gMSkKQEAgLTEyOTksMTAgKzEzMDAsMTAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdEluZGV4LCBib29sIG11bHRpLCBib29sIHNo
aWYKICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCkpIHsKICAgICAg
ICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2UgZHVy
aW5nIGRyYWcKICAgICAgICAgLy8gc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVj
dC4KLSAgICAgICAgaWYgKHRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5zZWxl
Y3RlZCgpICYmIG11bHRpU2VsZWN0KQorICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2VsZWN0ZWQoKSAmJiBtdWx0aVNlbGVjdCkKICAgICAg
ICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSBmYWxzZTsKICAgICAgICAgaWYgKCFtX2Fj
dGl2ZVNlbGVjdGlvblN0YXRlKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlj
a2VkRWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShm
YWxzZSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGFueSBzcGVjaWFsIG11bHRp
cGxlIHNlbGVjdGlvbiBtb2RlLCB0aGVuIGRlc2VsZWN0IGFsbApAQCAtMTMxNyw4ICsxMzE4LDgg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdElu
ZGV4LCBib29sIG11bHRpLCBib29sIHNoaWYKICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5j
aG9ySW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKIAogICAgIC8vIFNldCB0aGUgc2VsZWN0aW9uIHN0
YXRlIG9mIHRoZSBjbGlja2VkIG9wdGlvbi4KLSAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChj
bGlja2VkRWxlbWVudCkgJiYgIXRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlj
a2VkRWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgaWYgKGlzSFRNTE9wdGlv
bkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpICYmICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmNsaWNrZWRFbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZSh0
cnVlKTsKIAogICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3RlZEluZGV4KCkgZm9yIHRoZSBw
cmV2aW91cyBpbml0aWFsaXphdGlvbiwgb3IgSWYKICAgICAvLyB3ZSdyZSBkb2luZyBhIHNpbmds
ZSBzZWxlY3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IKQEAgLTE1
MzgsNyArMTUzOSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdElu
ZGV4KCkgY29uc3QKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gaXRlbXMuc2l6ZSgpOyBpOykgewogICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zWy0taV07Ci0gICAgICAgIGlmIChpc0hUTUxP
cHRpb25FbGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNl
bGVjdGVkKCkpCisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIGRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBpOwogICAgIH0KICAgICByZXR1cm4gLTE7CkBAIC0xNTU5LDkgKzE1NjAsOSBA
QCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50IGluZGV4KSBjb25z
dAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIAogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaW5kZXhdOwotICAgIGlmICgh
aXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSB8fCB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVy
biB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogfQogCiB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtMTU5Niw4
ICsxNTk3LDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJ
bmRleChpbnQgaW5kZXgpCiAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYgKGlzSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmICh0b0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQotICAgICAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgaWYg
KGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNlbGVj
dE9wdGlvbihpbmRleCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggZjY1
Y2IwMDgxOTY2ZTNjOWI3NTY1OTg3NzFhYzE1ZmQ0ZWJjYzFjNy4uYjFlNGVlZWIyYzYwNTdmZjJm
MmNmMzQzYzcxYzM3NzkyYzZhMWU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1h
cnlFbGVtZW50LmNwcApAQCAtODcsOCArODcsOCBAQCBIVE1MRGV0YWlsc0VsZW1lbnQqIEhUTUxT
dW1tYXJ5RWxlbWVudDo6ZGV0YWlsc0VsZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG1heURl
dGFpbHMgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQodGhpcyk7CiAgICAgaWYgKCFt
YXlEZXRhaWxzIHx8ICFtYXlEZXRhaWxzLT5oYXNUYWdOYW1lKGRldGFpbHNUYWcpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9IVE1MRGV0YWlsc0VsZW1lbnQobWF5RGV0YWlscyk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGV0YWls
c0VsZW1lbnQ+KG1heURldGFpbHMpOwogfQogCiBib29sIEhUTUxTdW1tYXJ5RWxlbWVudDo6aXNN
YWluU3VtbWFyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cAppbmRleCA1OWZlZWJlNTM1ZTRlZGM4MjZhM2M0ZmRhNmMzNTA2ZjhmZmI1MWI5Li5hYjcwMWYz
MjRjZjI2ZWM0MmVlNjFlYmQ5MDllOTc3YmYyMTllYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHAKQEAgLTcwLDEwICs3MCwxMCBAQCBQYXNzUmVmUHRyPEhUTUxU
YWJsZUVsZW1lbnQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYQogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIEhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24oKSBjb25zdAogewogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aGFz
VGFnTmFtZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZUNhcHRp
b25FbGVtZW50KGNoaWxkKTsKKyAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQo
Y2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50PihjaGlsZCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnNldENhcHRpb24oUGFzc1JlZlB0cjxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudD4gbmV3Q2FwdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCmluZGV4IGZjN2U4NWE5Yzgy
ZjQyMDQwMzVjNzc2MjVmMzVmMDFjMGE4OWI2YTAuLmY1MTA4MjRlZGJhNWFhYTdkZTA0NDYzN2Vi
ZDNmNDU1MDA5Nzc0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
UGFydEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIEhUTUxUYWJsZUVsZW1lbnQqIEhUTUxUYWJsZVBh
cnRFbGVtZW50OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudCA9IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAocGFyZW50ICYmICFpc0hUTUxUYWJsZUVs
ZW1lbnQocGFyZW50KSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7Ci0g
ICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxlbWVudChwYXJlbnQpOworICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAppbmRleCA0YzRkOTc5MmNjMTBkMjVmZDg2ZWNjZDBi
MWUyZDJkMWUzZmI3MDgwLi40N2ZmMzNiZDc1M2RiNDkzZTY5NDU5M2NiNjUwN2IzNDIzNzhiNDU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKQEAgLTcw
LDcgKzcwLDcgQEAgaW50IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KCkgY29uc3QKIAog
ICAgIGludCBySW5kZXggPSAwOwogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBo
ZWFkID0gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlKS0+dEhlYWQoKSkgeworICAgIGlmIChIVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogaGVhZCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0
YWJsZSkudEhlYWQoKSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGhlYWQtPmZpcnN0Q2hp
bGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChy
b3cgPT0gdGhpcykKICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpAQCAtOTEsNyArOTEs
NyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25zdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBmb290ID0gdG9IVE1M
VGFibGVFbGVtZW50KHRhYmxlKS0+dEZvb3QoKSkgeworICAgIGlmIChIVE1MVGFibGVTZWN0aW9u
RWxlbWVudCogZm9vdCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSkudEZvb3Qo
KSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGZvb3QtPmZpcnN0Q2hpbGQoKTsgcm93OyBy
b3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChyb3cgPT0gdGhpcykK
ICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAppbmRleCA3ZTVmNjY0MDZmYTY0YTBjYWFkNTBl
ZGE2NTA5ZGRkMDE5MWE5ZmUxLi4wNGE5NjA0MzZlMTA1NzYxODQzOTdkODk2YTMxNjVkNTg5YzFj
MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmNwcApAQCAtOTgsNyArOTgsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dz
Q29sbGVjdGlvbjo6cm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCogdGFibGUsCiAgICAgICAgIGNo
aWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocHJldmlvdXMtPnBhcmVudE5vZGUo
KSk7CiAgICAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVtZW50KGNoaWxkKSkK
LSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hpbGQpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKGF1
dG8gcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKmNoaWxkKS5maXJz
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xMzEsNyArMTMxLDcgQEAgSFRN
TFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Omxhc3RSb3coSFRNTFRh
YmxlRWxlbWVudCogdGFibGUpCiAKICAgICBmb3IgKGF1dG8qIGNoaWxkID0gRWxlbWVudFRyYXZl
cnNhbDo6bGFzdENoaWxkKHRhYmxlKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVt
ZW50KGNoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hp
bGQpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNo
aWxkKTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAg
ICAgICAgaWYgKGF1dG8qIHJvdyA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+
KCpjaGlsZCkubGFzdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xNjEsNyAr
MTYxLDcgQEAgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTFRhYmxlUm93c0Nv
bGxlY3Rpb246OmNyZWF0ZShIVE1MVGFibGVFbGVtZW4KIAogRWxlbWVudCogSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QK
IHsKLSAgICByZXR1cm4gcm93QWZ0ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oJnRh
YmxlRWxlbWVudCgpKSwgdG9IVE1MVGFibGVSb3dFbGVtZW50KHByZXZpb3VzKSk7CisgICAgcmV0
dXJuIHJvd0FmdGVyKGNvbnN0X2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KCZ0YWJsZUVsZW1lbnQo
KSksIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KHByZXZpb3VzKSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaAppbmRleCA2MzIy
YzM1OWIyMjg4NjQ0N2M1YWNhZTI1YmY2YzdiMTQ0YmVhZjNjLi5mN2NhNjA0NDUxZTk3OGI2MjYw
OWFhNmZkY2ZkYWQyZWM2MDhhMGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5oCkBAIC00MCw4ICs0MCw4IEBAIGNsYXNzIEhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uIGZpbmFsIDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gY3JlYXRlKEhUTUxUYWJsZUVs
ZW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBIVE1MVGFibGVFbGVtZW50JiB0YWJsZUVs
ZW1lbnQoKSB7IHJldHVybiB0b0hUTUxUYWJsZUVsZW1lbnQob3duZXJOb2RlKCkpOyB9Ci0gICAg
Y29uc3QgSFRNTFRhYmxlRWxlbWVudCYgdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9I
VE1MVGFibGVFbGVtZW50KG93bmVyTm9kZSgpKTsgfQorICAgIEhUTUxUYWJsZUVsZW1lbnQmIHRh
YmxlRWxlbWVudCgpIHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9k
ZSgpKTsgfQorICAgIGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQmIHRhYmxlRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQogCiAg
ICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQq
LCBIVE1MVGFibGVSb3dFbGVtZW50Kik7CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQq
IGxhc3RSb3coSFRNTFRhYmxlRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
bXBsYXRlRWxlbWVudC5jcHAKaW5kZXggMTdlNGMwODA3NjIyOWNiNzJmMWIwMTI1MmJkM2FkZTQz
OTUwN2IzOC4uNmY0MjE4OWNiODc4ZTBkOWQ0MzRkYTVhMDZiY2JlMGViMzUzMjVlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC03NSw3ICs3NSw3
IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRlbXBsYXRlRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wg
ZGVlcCkKIAogICAgIFJlZlB0cjxOb2RlPiBjbG9uZSA9IGNsb25lRWxlbWVudFdpdGhDaGlsZHJl
bigpOwogICAgIGlmIChtX2NvbnRlbnQpCi0gICAgICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5v
ZGVzKHRvSFRNTFRlbXBsYXRlRWxlbWVudChjbG9uZS5nZXQoKSktPmNvbnRlbnQoKSk7CisgICAg
ICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5vZGVzKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1l
bnQ+KGNsb25lLmdldCgpKS0+Y29udGVudCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCmluZGV4IDhjYjE1MWJhMjlmY2M3ZTk5OWRiNGEzZDQ2MjAyYWQ1ZjVhZmZjMDEu
LjM1ZjhlYWQ1ZjNiYWNiOTU3NzlkNzY0OTNiNDU1OWY3MThkYmUzMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC03MTcs
NyArNzE3LDcgQEAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRGb3Jt
Q29udHJvbChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKCFjb250YWluZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEVsZW1lbnQqIGFuY2VzdG9yID0gY29udGFpbmVy
LT5zaGFkb3dIb3N0KCk7Ci0gICAgcmV0dXJuIGFuY2VzdG9yICYmIGlzSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKmFuY2VzdG9yKSA/IHRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoYW5j
ZXN0b3IpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gYW5jZXN0b3IgJiYgaXNIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgqYW5jZXN0b3IpID8gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ+KGFuY2VzdG9yKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBjb25zdCBFbGVtZW50KiBw
YXJlbnRIVE1MRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5jcHAKaW5kZXggOGQ2M2FmMzgxZDY4YTFlNzAxNmMzY2QwYzE3ODNiMWQ4
YjU3ZGUyMC4uNWJhYmIwNWI0MjI4ZjVlNzJhMDdjZDNjMjhkOWFiZDRkZGYyOWU3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lk
IEltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsKICAgICBSZWZQdHI8
RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChodG1sVGFnLCBm
YWxzZSk7CiAgICAgYXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQpOwotICAgIHRvSFRNTEh0bWxFbGVt
ZW50KHJvb3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIGRvd25jYXN0
PEhUTUxIdG1sRWxlbWVudD4oKnJvb3RFbGVtZW50KS5pbnNlcnRlZEJ5UGFyc2VyKCk7CiAKICAg
ICBmcmFtZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwogCiAg
ICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChib2R5VGFn
LCBmYWxzZSk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIm1hcmdpbjogMHB4
Iik7CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUoZG9jdW1lbnQoKS5s
b2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKSkKLSAgICAgICAgdG9IVE1MQm9keUVsZW1lbnQo
Ym9keS5nZXQoKSktPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IsICJ3aGl0ZSIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOworICAgICAgICBk
b3duY2FzdDxIVE1MQm9keUVsZW1lbnQ+KCpib2R5KS5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCAid2hpdGUiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKTsKICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSk7CiAgICAgCiAgICAg
UmVmUHRyPEltYWdlRG9jdW1lbnRFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBJbWFnZURvY3VtZW50
RWxlbWVudDo6Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TGFiZWxzTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5j
cHAKaW5kZXggMzFmNjc1ZTE5YjgwZThmMThjM2E1NTk4ZGQxMTcxMWM1YzZhNzkwYy4uOGMyOTYy
MDYwZjJiZDA4ZWRhNjc4YjBhMGIxNGNlYWE0YTQ1NDQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9M
YWJlbHNOb2RlTGlzdC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgTGFiZWxzTm9kZUxpc3Q6On5MYWJl
bHNOb2RlTGlzdCgpCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0OjplbGVtZW50TWF0Y2hlcyhF
bGVtZW50JiB0ZXN0Tm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50
KHRlc3ROb2RlKSAmJiB0b0hUTUxMYWJlbEVsZW1lbnQodGVzdE5vZGUpLmNvbnRyb2woKSA9PSAm
b3duZXJOb2RlKCk7CisgICAgcmV0dXJuIGlzSFRNTExhYmVsRWxlbWVudCh0ZXN0Tm9kZSkgJiYg
ZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4odGVzdE5vZGUpLmNvbnRyb2woKSA9PSAmb3duZXJO
b2RlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlh
RG9jdW1lbnQuY3BwCmluZGV4IGM5Yjc3M2I0YWRhN2JlZTdiOTJhOGZjMmU5NzkxNTUwYjY3NjFk
ZDcuLjZiZmQwNDA4YzVlODMzNmZjMmVjOGNiYWViNWFmZGIxMzU0YmQwMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIE1lZGlhRG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKICAgICBSZWZQdHI8RWxlbWVu
dD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNl
KTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgSUdOT1JFX0VYQ0VQ
VElPTik7CiAgICAgZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KHJvb3RFbGVtZW50LmdldCgpKTsK
LSAgICB0b0hUTUxIdG1sRWxlbWVudChyb290RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJz
ZXIoKTsKKyAgICBkb3duY2FzdDxIVE1MSHRtbEVsZW1lbnQ+KCpyb290RWxlbWVudCkuaW5zZXJ0
ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRTdGFy
dCk7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9j
dW1lbnRTdHJ1Y3R1cmUoKQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IGRv
Y3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodmlkZW9UYWcsIGZhbHNlKTsKIAotICAgIG1fbWVkaWFF
bGVtZW50ID0gdG9IVE1MVmlkZW9FbGVtZW50KG1lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgbV9t
ZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsZW1lbnQuZ2V0
KCkpOwogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCAiIik7
CiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdXRvcGxheUF0dHIsICIiKTsKIApA
QCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1l
bnRTdHJ1Y3R1cmUoKQogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCBlbGVtZW50U3R5bGUudG9TdHJpbmcoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gc291cmNl
RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc291cmNlVGFnLCBmYWxzZSk7Ci0g
ICAgSFRNTFNvdXJjZUVsZW1lbnQmIHNvdXJjZSA9IHRvSFRNTFNvdXJjZUVsZW1lbnQoKnNvdXJj
ZUVsZW1lbnQpOworICAgIEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UgPSBkb3duY2FzdDxIVE1M
U291cmNlRWxlbWVudD4oKnNvdXJjZUVsZW1lbnQpOwogICAgIHNvdXJjZS5zZXRTcmMoZG9jdW1l
bnQoKS0+dXJsKCkpOwogCiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVu
dCgpLT5sb2FkZXIoKSkKQEAgLTE2MSwyMiArMTYxLDIyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRQ
YXJzZXI+IE1lZGlhRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiBzdGF0aWMgaW5saW5lIEhUTUxW
aWRlb0VsZW1lbnQqIGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoQ29udGFpbmVyTm9kZSYgbm9kZSkK
IHsKICAgICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gdG9I
VE1MVmlkZW9FbGVtZW50KCZub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRl
b0VsZW1lbnQ+KCZub2RlKTsKIAogICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZUxpc3QgPSBub2Rl
LmdldEVsZW1lbnRzQnlUYWdOYW1lTlModmlkZW9UYWcubmFtZXNwYWNlVVJJKCksIHZpZGVvVGFn
LmxvY2FsTmFtZSgpKTsKICAgIAotICAgIGlmIChub2RlTGlzdC5nZXQoKS0+bGVuZ3RoKCkgPiAw
KQotICAgICAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGVMaXN0LmdldCgpLT5pdGVt
KDApKTsKKyAgICBpZiAobm9kZUxpc3QtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGVMaXN0LT5pdGVtKDApKTsKIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxWaWRlb0Vs
ZW1lbnQqIGFuY2VzdG9yVmlkZW9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgd2hpbGUgKG5v
ZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpKQorICAgIHdoaWxlIChub2RlICYmICFp
c0hUTUxWaWRlb0VsZW1lbnQobm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRPclNo
YWRvd0hvc3ROb2RlKCk7CiAKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGUpOwor
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pihub2RlKTsKIH0KIAogdm9pZCBN
ZWRpYURvY3VtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKQEAgLTI0Mywx
OSArMjQzLDE5IEBAIHZvaWQgTWVkaWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVy
RmlyZWQoVGltZXI8TWVkaWFEb2N1bWVudD4mKQogCiAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCA9IGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoKmh0bWxCb2R5KSkgewogICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGVt
YmVkVGFnLCBmYWxzZSk7Ci0gICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkRWxlbWVudCA9
IHRvSFRNTEVtYmVkRWxlbWVudChlbGVtZW50LmdldCgpKTsKKyAgICAgICAgSFRNTEVtYmVkRWxl
bWVudCYgZW1iZWRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVtYmVkRWxlbWVudD4oKmVsZW1lbnQp
OwogCi0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEwMCUi
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUi
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4i
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3Ry
aW5nKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEw
MCUiKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAw
JSIpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2lu
Iik7CisgICAgICAgIGVtYmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3Ry
aW5nKCkpOwogCiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGxvYWRl
cigpOwogICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwogICAgICAgICBpZiAoZG9jdW1l
bnRMb2FkZXIpCi0gICAgICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgZW1i
ZWRFbGVtZW50LnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigp
Lm1pbWVUeXBlKCkpOwogCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZXBs
YWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICB2aWRlb0VsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKCZlbWJlZEVs
ZW1lbnQsIHZpZGVvRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCmluZGV4IGY3MTZiMjc5OTQ3NWQxOTgwZTNm
Y2VjODdkODQ5OTU5ZWVkMjk4ZDUuLjhiMGY1MmVmNDQzOTNmMTQ0OTM3OWNmNzJmM2NlZDA0Mzc5
MDUwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgUGx1Z2luRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJl
KCkKIHsKICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChy
b290RWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgdG9IVE1MSHRtbEVsZW1lbnQocm9v
dEVsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgZG93bmNhc3Q8SFRNTEh0
bWxFbGVtZW50Pigqcm9vdEVsZW1lbnQpLmluc2VydGVkQnlQYXJzZXIoKTsKIAogICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5pbmplY3RV
c2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lk
IFBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAgICAgICAg
IAogICAgIFJlZlB0cjxFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KGVtYmVkVGFnLCBmYWxzZSk7CiAgICAgICAgIAotICAgIG1fZW1iZWRFbGVtZW50ID0g
dG9IVE1MRW1iZWRFbGVtZW50KGVtYmVkRWxlbWVudC5nZXQoKSk7CisgICAgbV9lbWJlZEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRW1iZWRFbGVtZW50PihlbWJlZEVsZW1lbnQuZ2V0KCkpOwogICAg
IG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOwogICAgIG1f
ZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggMjM5YTljZTYwYWNmZGM3MjYw
ZjlkNjA4OWZkNjEzNzU0NWRhY2VkMy4uNmVkYzBlOTVmNTgzODNlZGFhMTY2YzllNjZkOWU5MGRj
ZTZlZTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTg2LDcg
Kzg2LDcgQEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogICAgICAgICAvLyBMb29rIGZvciBtb3JlIHJhZGlvIGJ1dHRvbnMuCiAg
ICAgICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dEVsZW1lbnQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQobm9kZSk7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKICAgICAgICAg
aWYgKGlucHV0RWxlbWVudC0+Zm9ybSgpICE9IGVsZW1lbnQoKS5mb3JtKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmIGlu
cHV0RWxlbWVudC0+bmFtZSgpID09IGVsZW1lbnQoKS5uYW1lKCkgJiYgaW5wdXRFbGVtZW50LT5p
c0ZvY3VzYWJsZSgpKSB7CkBAIC0xMjMsOCArMTIzLDggQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6
aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKICAgICAvLyBz
a2lwIGFueSBvdGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCiAgICAgRWxlbWVudCogY3VycmVu
dEZvY3VzZWROb2RlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKICAg
ICBpZiAoY3VycmVudEZvY3VzZWROb2RlICYmIGlzSFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9j
dXNlZE5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGZvY3VzZWRJbnB1dCA9IHRv
SFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAgICBpZiAoZm9jdXNl
ZElucHV0LT5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LT5mb3JtKCkgPT0gZWxlbWVu
dCgpLmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpKQor
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBmb2N1c2VkSW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqY3VycmVudEZvY3VzZWROb2RlKTsKKyAgICAgICAgaWYgKGZvY3VzZWRJbnB1
dC5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LmZvcm0oKSA9PSBlbGVtZW50KCkuZm9y
bSgpICYmIGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9Ob2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3Qu
Y3BwCmluZGV4IGIyMDQ0ZjY3OGQ2NGI2YzcxZGNmY2E1MjBjMzFjYTc4ZmM3ZmFkMTMuLjcwMmYy
MWI1YzEyMTE3YmVkODU3ZGYxNDk5ZTdjNDRhYjk2MDIyNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb05vZGVMaXN0LmNwcApAQCAtODcsOSArODcsOSBAQCBib29sIFJhZGlvTm9kZUxpc3Q6OmNo
ZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVyKGNvbnN0IEVsZW1lbnQmIHRlc3RF
bAogewogICAgIEFTU0VSVCh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgdGVz
dEVsZW1lbnQuaXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiAgICAgaWYgKGlzSFRNTEZvcm1FbGVt
ZW50KG93bmVyTm9kZSgpKSkgewotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50
ID0gMDsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAg
ICBmb3JtRWxlbWVudCA9IHRvSFRNTE9iamVjdEVsZW1lbnQodGVzdEVsZW1lbnQpLmZvcm0oKTsK
KyAgICAgICAgICAgIGZvcm1FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KHRl
c3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1FbGVtZW50
ID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRlc3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAg
IGlmICghZm9ybUVsZW1lbnQgfHwgZm9ybUVsZW1lbnQgIT0gJm93bmVyTm9kZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAppbmRleCAwMDIzOTg0NWQzZWQ0NDNmMDUzYzI0
YzcwODFlNzdkMzNjMTI4ODczLi45NzhiNTE1MTYzOTIyM2Q3MjMwYzYyOGYyYjUyYmFhOTlhMjFm
MzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcApAQCAtMzcyLDExICsz
NzIsMTEgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6dXBkYXRlVGlja01hcmtWYWx1ZXMoKQogICAg
IG1fdGlja01hcmtWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KG9wdGlvbnMtPmxlbmd0aCgpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3B0aW9ucy0+bGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICBOb2RlKiBub2RlID0gb3B0aW9ucy0+aXRlbShpKTsKLSAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b0hUTUxPcHRpb25FbGVtZW50KG5vZGUpOwotICAgICAg
ICBTdHJpbmcgb3B0aW9uVmFsdWUgPSBvcHRpb25FbGVtZW50LT52YWx1ZSgpOwotICAgICAgICBp
ZiAoIWVsZW1lbnQoKS5pc1ZhbGlkVmFsdWUob3B0aW9uVmFsdWUpKQorICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudCYgb3B0aW9uRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
bm9kZSk7CisgICAgICAgIFN0cmluZyBvcHRpb25WYWx1ZSA9IG9wdGlvbkVsZW1lbnQudmFsdWUo
KTsKKyAgICAgICAgaWYgKCFlbGVtZW50KCkuaXNWYWxpZFZhbHVlKCZvcHRpb25WYWx1ZSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV90aWNrTWFya1ZhbHVlcy5hcHBlbmQocGFy
c2VUb051bWJlcihvcHRpb25WYWx1ZSwgRGVjaW1hbDo6bmFuKCkpKTsKKyAgICAgICAgbV90aWNr
TWFya1ZhbHVlcy5hcHBlbmQocGFyc2VUb051bWJlcigmb3B0aW9uVmFsdWUsIERlY2ltYWw6Om5h
bigpKSk7CiAgICAgfQogICAgIG1fdGlja01hcmtWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICBz
dGQ6OnNvcnQobV90aWNrTWFya1ZhbHVlcy5iZWdpbigpLCBtX3RpY2tNYXJrVmFsdWVzLmVuZCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcAppbmRleCBmZTIwNGVjM2Q4MDBhZmJiMDE4NjQwYmIwODFjNmExZDgwOTU3ZTdlLi45
MzkwNTU3MDg2MjViZDZjZDc5YWE3ZjQwMzZiZjAyM2UwZTE2ZDU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC04NSw4
ICs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FsbFdoaXRlc3BhY2UoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0KEhUTUxDb25zdHJ1Y3Rpb25TaXRl
VGFzayYgdGFzaykKIHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAodGFz
ay5wYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICB0YXNrLnBhcmVudCA9
IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXNrLnBhcmVudC5nZXQoKSktPmNvbnRlbnQoKTsKKyAg
ICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCp0YXNrLnBhcmVudCkpCisgICAgICAgIHRhc2su
cGFyZW50ID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKnRhc2sucGFyZW50KS5jb250
ZW50KCk7CiAjZW5kaWYKIAogICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSB0YXNrLmNo
aWxkLT5wYXJlbnROb2RlKCkpCkBAIC01MzEsOCArNTMxLDggQEAgdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNw
YWNlTW8KICAgICAgICAgZmluZEZvc3RlclNpdGUodGFzayk7CiAKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKLSAgICBpZiAodGFzay5wYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcp
KQotICAgICAgICB0YXNrLnBhcmVudCA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXNrLnBhcmVu
dC5nZXQoKSktPmNvbnRlbnQoKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCp0YXNr
LnBhcmVudCkpCisgICAgICAgIHRhc2sucGFyZW50ID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKnRhc2sucGFyZW50KS5jb250ZW50KCk7CiAjZW5kaWYKIAogICAgIC8vIFN0cmluZ3Mg
Y29tcG9zZWQgZW50aXJlbHkgb2Ygd2hpdGVzcGFjZSBhcmUgbGlrZWx5IHRvIGJlIHJlcGVhdGVk
LgpAQCAtNjE4LDggKzYxOCw4IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlv
blNpdGU6OmNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwKIGlubGluZSBEb2N1
bWVudCYgSFRNTENvbnN0cnVjdGlvblNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgp
CiB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKGN1cnJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICByZXR1cm4gdG9IVE1MVGVtcGxhdGVF
bGVtZW50KGN1cnJlbnRFbGVtZW50KCkpLT5jb250ZW50KCktPmRvY3VtZW50KCk7CisgICAgaWYg
KGlzSFRNTFRlbXBsYXRlRWxlbWVudChjdXJyZW50Tm9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCgpKS5jb250ZW50KCkt
PmRvY3VtZW50KCk7CiAjZW5kaWYKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CmluZGV4IDMxZjU0OTIzNDgzZDk0YzY3NmY0OTY4MmIwNmJmY2MzYWE4YjJhNjUuLmI5MzY4ZGY4
MDM3NjM2ZGIyZGQ2NTdkOGE5YTM4MDU3NDc3ZmIyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIEhUTUxU
cmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBE
b2N1bWVudEZyYWdtZW50JiBmCiAjZW5kaWYKIAogICAgICAgICByZXNldEluc2VydGlvbk1vZGVB
cHByb3ByaWF0ZWx5KCk7Ci0gICAgICAgIG1fdHJlZS5zZXRGb3JtKCFjb250ZXh0RWxlbWVudCB8
fCBpc0hUTUxGb3JtRWxlbWVudChjb250ZXh0RWxlbWVudCkgPyB0b0hUTUxGb3JtRWxlbWVudChj
b250ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9y
KCpjb250ZXh0RWxlbWVudCkpOworICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1l
bnQgfHwgaXNIVE1MRm9ybUVsZW1lbnQoY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZv
cm1FbGVtZW50Pihjb250ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0
Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVudCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwCmluZGV4IGEy
NmZmNGRiYWYwMWFmOTUwZWU1OTNiOTRhZmQ3NTNkMTdjMWYxOTAuLjVlM2FiZDIwMTNkMTQ5N2Fk
M2U5NDIyNjJlYjMyMTBjZmJjOTA2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IERldGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGVFbGVtZW50UmVu
ZGVyZXIoUGFzc1JlZjxSZW4KIAogYm9vbCBEZXRhaWxzTWFya2VyQ29udHJvbDo6cmVuZGVyZXJJ
c05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIHRvSFRNTFN1
bW1hcnlFbGVtZW50KHNoYWRvd0hvc3QoKSktPmlzTWFpblN1bW1hcnkoKSAmJiBIVE1MRGl2RWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxT
dW1tYXJ5RWxlbWVudD4oc2hhZG93SG9zdCgpKS0+aXNNYWluU3VtbWFyeSgpICYmIEhUTUxEaXZF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IGE5MmI4
NzIyMGQ4ZTA5YjllZDVjMjg5YzRiNzQ2MWExMTlkNzMzODYuLmQ0MmQ1YTQ3OTU4YzdhZmJiNGU5
ZmUyYzBjNDY1OWYwNGZhMzAzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQg
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIDIuIExldCB2aWRlbyBiZSB0aGUgbWVkaWEgZWxlbWVu
dCBvciBvdGhlciBwbGF5YmFjayBtZWNoYW5pc20uCi0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8gPSB0b0hUTUxWaWRlb0VsZW1lbnQobWVkaWFFbGVtZW50KTsKKyAgICBIVE1MVmlkZW9FbGVt
ZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCptZWRpYUVsZW1lbnQpOwog
CiAgICAgLy8gMy4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9mIGFic29sdXRlbHkgcG9z
aXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1MRGl2RWxlbWVu
dD4+IG91dHB1dDsKQEAgLTExMzUsNyArMTEzNSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgLy8gNy4gTGV0IGN1ZXMg
YmUgYW4gZW1wdHkgbGlzdCBvZiB0ZXh0IHRyYWNrIGN1ZXMuCiAgICAgLy8gOC4gRm9yIGVhY2gg
dHJhY2sgdHJhY2sgaW4gdHJhY2tzLCBhcHBlbmQgdG8gY3VlcyBhbGwgdGhlIGN1ZXMgZnJvbQog
ICAgIC8vIHRyYWNrJ3MgbGlzdCBvZiBjdWVzIHRoYXQgaGF2ZSB0aGVpciB0ZXh0IHRyYWNrIGN1
ZSBhY3RpdmUgZmxhZyBzZXQuCi0gICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gdmlkZW8tPmN1cnJl
bnRseUFjdGl2ZUN1ZXMoKTsKKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJyZW50
bHlBY3RpdmVDdWVzKCk7CiAKICAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwgZm9y
IGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCiAgICAgLy8gdGV4dCB0
cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFkZCB0
aG9zZSBib3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJT
aGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHAKaW5kZXggYTU3NjMzNGRlODM5MWFmNDE2M2UwMWM2NTZhZmE0ZTg1ZWZiNTIx
Mi4uNmVjNGU1NTEyZjkyMTlmMjMwMmU3MjcyZWRjNjFlOWVhMDY0ODY2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCkBAIC01MSw3
ICs1MSw3IEBAIE1ldGVyU2hhZG93RWxlbWVudDo6TWV0ZXJTaGFkb3dFbGVtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKIAogSFRNTE1ldGVyRWxlbWVudCogTWV0ZXJTaGFkb3dFbGVtZW50OjptZXRl
ckVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxNZXRlckVsZW1lbnQoc2hhZG93
SG9zdCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1ldGVyRWxlbWVudD4oc2hhZG93SG9z
dCgpKTsKIH0KIAogYm9vbCBNZXRlclNoYWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAKaW5kZXggZGNkMjI4YmI2ZmRjZGYzZGEzZTFk
NTYyZjViNmMyYWQ4NTVhZDNiYi4uOTA0MTdmMTFhYjVkZjIxYjNhMDk5OGE5YTdlNTI2NGZkNmJi
YzFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFk
b3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1No
YWRvd0VsZW1lbnQuY3BwCkBAIC00Niw3ICs0Niw3IEBAIFByb2dyZXNzU2hhZG93RWxlbWVudDo6
UHJvZ3Jlc3NTaGFkb3dFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAogSFRNTFByb2dyZXNz
RWxlbWVudCogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Ojpwcm9ncmVzc0VsZW1lbnQoKSBjb25zdAog
ewotICAgIHJldHVybiB0b0hUTUxQcm9ncmVzc0VsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTFByb2dyZXNzRWxlbWVudD4oc2hhZG93SG9zdCgpKTsKIH0KIAog
Ym9vbCBQcm9ncmVzc1NoYWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMjA2MjhjNzIzMDI4ZTNmYjYyY2ZkZmI3
MGJiMmM1MDM2ZDBjOTQ2MC4uMTkyZjhlMDA2M2ZhNWEwOGU4ZjQ4MjFmZGVkZTAzZmZlMjBhZDAx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgUGFzc1JlZlB0cjxTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
OjpjcmUKIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBh
IG1lbnUsIGlmIG5lZWRlZAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5w
dXRFbGVtZW50KHNoYWRvd0hvc3QoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFkb3dIb3N0KCkpOwogICAgIGlmIChpbnB1dCAm
JiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+
aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgp
OwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
Ojp3aWxsRGV0YWNoUmVuZGVyZXJzKCkKIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUg
ZWxlbWVudCBpcyB2aXNpYmxlLCBvbiBtb3VzZXVwLCBjbGVhciB0aGUgdmFsdWUsIGFuZCBzZXQg
c2VsZWN0aW9uCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHRvSFRNTElucHV0
RWxlbWVudChzaGFkb3dIb3N0KCkpKTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5w
dXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKSk7CiAgICAgaWYgKCFp
bnB1dCB8fCBpbnB1dC0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAoIWV2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6
OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKIHsKLSAgICBjb25zdCBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChzaGFkb3dIb3N0KCkpOworICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
c2hhZG93SG9zdCgpKTsKICAgICBpZiAoaW5wdXQgJiYgIWlucHV0LT5pc0Rpc2FibGVkT3JSZWFk
T25seSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggZmJlODhkNWUxNTlkZTU5OGE5NTkyZWIz
ZWZlNDRhNzFlNTljZGMwYi4uMmM3M2RiOWZkNGJlY2RhNDQ0ZGU5ZjNiODAzNzg3NmFhMjhhNzM3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05NzUsNyArOTc1LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdl
bnQ6OnZpYUluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIGRvY3VtZW4KIAogICAgIENTU1N0
eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBudWxscHRyOwogICAgIGlmIChzdHlsZUVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgY3NzU3R5bGVTaGVldCA9IHRvSFRNTFN0eWxlRWxl
bWVudChzdHlsZUVsZW1lbnQuZ2V0KCkpLT5zaGVldCgpOworICAgICAgICBjc3NTdHlsZVNoZWV0
ID0gZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oKnN0eWxlRWxlbWVudCkuc2hlZXQoKTsKICAg
ICBlbHNlIGlmIChzdHlsZUVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICBjc3NTdHls
ZVNoZWV0ID0gZG93bmNhc3Q8U1ZHU3R5bGVFbGVtZW50Pigqc3R5bGVFbGVtZW50KS5zaGVldCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApp
bmRleCBkMmRmNGE4N2E0ZTBlN2Q2Y2QxOTc4ZDRmY2M4NTUxZjlkNDljMmNiLi5iYmEzOWY2NmYx
NTFiNTkyNmE0ZjBmM2E2NTAwZWRhYWY4ZTVmZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTEyOTcsOCArMTI5Nyw4IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JOb2RlCiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVN
RU5UKQotICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRl
VGFnKSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRUZW1wbGF0ZUNvbnRlbnQoYnVpbGRPYmplY3RG
b3JOb2RlKHRvSFRNTFRlbXBsYXRlRWxlbWVudChlbGVtZW50KS0+Y29udGVudCgpLCAwLCBub2Rl
c01hcCkpOworICAgICAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KGVsZW1lbnQpKQorICAg
ICAgICAgICAgdmFsdWUtPnNldFRlbXBsYXRlQ29udGVudChidWlsZE9iamVjdEZvck5vZGUoZG93
bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKmVsZW1lbnQpLmNvbnRlbnQoKSwgMCwgbm9kZXNN
YXApKTsKICNlbmRpZgogCiAgICAgfSBlbHNlIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCA1Mjc4ZjRhYzUw
NmM4OTYzMTQyZTk3OGEzNjgyMWYxNTAxMTU1MWVhLi5lMDZiNTZkNzA3MTE2NzE2NzRmNGZhYTNm
OGJkODAyM2QwOWVlNGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1
Ym1pc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5j
cHAKQEAgLTE5MCw3ICsxOTAsNyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3Vi
bWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgICAgICBp
ZiAoIWVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICBjb250cm9s
LmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgaXNNdWx0aVBhcnRGb3JtKTsKICAgICAgICAg
aWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVs
ZW1lbnQpOwogICAgICAgICAgICAgaWYgKGlucHV0LmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAg
ICAgICAgICBmb3JtVmFsdWVzLmFwcGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0
Lm5hbWUoKS5zdHJpbmcoKSwgaW5wdXQudmFsdWUoKSkpOwogICAgICAgICAgICAgICAgIGlucHV0
LmFkZFNlYXJjaFJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5k
ZXggY2Q3MTZkOTU3ZTIwZWZkYjE3ODRiOTVkZDUxZjBkMDUzMTVhOThlYi4uY2M0MDM3YTdlOTE3
ZjRjYTlkZjVkMmY1ZWE4Mzk2YWQzODk0ZWU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCkBAIC0xMDMzLDkgKzEwMzMsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRPcGVu
ZXIoRnJhbWUqIG9wZW5lcikKIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNrQ29udGVu
dCgpCiB7CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUub3duZXJF
bGVtZW50KCk7Ci0gICAgaWYgKCFvd25lciB8fCAhb3duZXItPmhhc1RhZ05hbWUob2JqZWN0VGFn
KSkKKyAgICBpZiAoIW93bmVyIHx8ICFpc0hUTUxPYmplY3RFbGVtZW50KG93bmVyKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHRvSFRNTE9iamVjdEVsZW1lbnQob3duZXIpLT5yZW5kZXJGYWxsYmFj
a0NvbnRlbnQoKTsKKyAgICBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oKm93bmVyKS5yZW5k
ZXJGYWxsYmFja0NvbnRlbnQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAppbmRleCA5YmFk
OWI0N2U0YzZmZjVlYjk2ZjhhYmFlZjkyYTcyZjU2ZjQyNTQxLi45NzU0OTdhZGM1YTFiZDJhY2U0
MmRhODAxMmQxNWUyNGM0ZTEwOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
SW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5j
cHAKQEAgLTQwNiwxNCArNDA2LDE0IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGlu
Z0JlZm9yZUxvYWRFdmVudCgpCiAgICAgfQogICAgIGlmIChtX2ltYWdlKSB7CiAgICAgICAgIG1f
aW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICAgICAgbV9pbWFnZSA9IDA7CisgICAgICAg
IG1faW1hZ2UgPSBudWxscHRyOwogICAgIH0KIAogICAgIGxvYWRFdmVudFNlbmRlcigpLmNhbmNl
bEV2ZW50KCp0aGlzKTsKICAgICBtX2hhc1BlbmRpbmdMb2FkRXZlbnQgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAgICB0b0hUTUxP
YmplY3RFbGVtZW50KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CisgICAgICAg
IGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZhbGxiYWNrQ29u
dGVudCgpOwogCiAgICAgLy8gT25seSBjb25zaWRlciB1cGRhdGluZyB0aGUgcHJvdGVjdGlvbiBy
ZWYtY291bnQgb2YgdGhlIEVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHJldHVybmluZwogICAg
IC8vIGZyb20gdGhpcyBmdW5jdGlvbiBhcyBkb2luZyBzbyBtaWdodCByZXN1bHQgaW4gdGhlIGRl
c3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VMb2FkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcAppbmRleCBmOWFkZjZjZTdiN2IyZTEzNWEyMTJlNDg4N2M2YTU4NmQ1OGRj
M2U4Li45N2JkYWMxNzRjNmZiMTZkY2RlYjVlNTAxYTk4ZTNlMzBlN2YxZTRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCBib29s
IFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIG93
bmVyRWxlbWVudCwgY29uc3QgUwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgY29t
cGxldGVkVVJMID0gY29tcGxldGVVUkwodXJsKTsKIAotICAgIGJvb2wgaGFzRmFsbGJhY2tDb250
ZW50ID0gaXNIVE1MT2JqZWN0RWxlbWVudChvd25lckVsZW1lbnQpICYmIHRvSFRNTE9iamVjdEVs
ZW1lbnQob3duZXJFbGVtZW50KS5oYXNGYWxsYmFja0NvbnRlbnQoKTsKKyAgICBib29sIGhhc0Zh
bGxiYWNrQ29udGVudCA9IGlzSFRNTE9iamVjdEVsZW1lbnQob3duZXJFbGVtZW50KSAmJiBkb3du
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudD4ob3duZXJFbGVtZW50KS5oYXNGYWxsYmFja0NvbnRlbnQo
KTsKIAogICAgIGJvb2wgdXNlRmFsbGJhY2s7CiAgICAgaWYgKHNob3VsZFVzZVBsdWdpbihjb21w
bGV0ZWRVUkwsIG1pbWVUeXBlLCBvd25lckVsZW1lbnQuc2hvdWxkUHJlZmVyUGx1Z0luc0Zvcklt
YWdlcygpLCBoYXNGYWxsYmFja0NvbnRlbnQsIHVzZUZhbGxiYWNrKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuY3BwCmluZGV4IGVhNDA3OWM2NzRmZTVlM2ZkMmY2ODBhYzY1MzM0ZDg1NDUwNWY3NWEuLmQz
MmQzNjlkYmM5MTk0NDVhYTAzZDRkNmM1MDU5ZjVmM2YyNzcyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKQEAgLTQwOSw5ICs0MDksOSBAQCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVz
dWx0LmlubmVyTm9uU2hhcmVkRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBHZXQgdG9vbHRp
cCByZXByZXNlbnRpbmcgZm9ybSBhY3Rpb24sIGlmIHJlbGV2YW50CiAgICAgICAgICAgICBpZiAo
aXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlucHV0LT5pc1N1Ym1pdEJ1dHRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBpbnB1dC0+Zm9ybSgpKSB7CisgICAgICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0LmlzU3VibWl0QnV0dG9uKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGlucHV0
LmZvcm0oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcCA9IGZvcm0tPmFjdGlv
bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0tPnJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IGZvcm0tPnJlbmRlcmVy
KCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBDaHJvbWU6
OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICh0b29sVGlw
LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5pbm5l
ck5vblNoYXJlZEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVu
dChlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIHRvb2xUaXAgPSB0b0hUTUxJbnB1dEVsZW1l
bnQoZWxlbWVudCktPmRlZmF1bHRUb29sVGlwKCk7CisgICAgICAgICAgICAgICAgdG9vbFRpcCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5kZWZhdWx0VG9vbFRpcCgpOwog
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvYnRhaW4gdGV4dCBkaXJlY3Rp
b24gb2YgdG9vbHRpcCBmcm9tCiAgICAgICAgICAgICAgICAgLy8gQ2hyb21lQ2xpZW50IG9yIHBs
YXRmb3JtLiBBcyBvZiBPY3RvYmVyIDIwMTEsIGFsbCBjbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKaW5kZXggNTE1OTYyNDZlN2Y4ZGRlYWM2YTYyZGI5NTFjMWVlMDFl
MjE5ODQxMy4uNWFkMzNiYzE2OGUxOGNkZmI0MmE5NGZmMzIyZDNlNjQwOWY5MjAzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTYyMyw3ICs2MjMsNyBAQCBFbGVt
ZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNl
RnJhbWUsIEVsZW1lbnQqIHN0YQogewogICAgIHN0YXRlLnR5cGUgPSAoc291cmNlRnJhbWUtPnNl
bGVjdGlvbigpLmNvbnRhaW5zKGRyYWdPcmlnaW4pKSA/IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rp
b24gOiBEcmFnU291cmNlQWN0aW9uTm9uZTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvIHJl
bmRlcmVyID0gc3RhcnRFbGVtZW50LT5yZW5kZXJlcigpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSBy
ZW5kZXJlci0+cGFyZW50KCkpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVy
LT5ub25Qc2V1ZG9FbGVtZW50KCk7CkBAIC02NDYsNyArNjQ2LDcgQEAgRWxlbWVudCogRHJhZ0Nv
bnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVt
ZW50KiBzdGEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgobV9kcmFnU291cmNlQWN0
aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkxpbmspCiAgICAgICAgICAgICAgICAgJiYgaXNIVE1MQW5j
aG9yRWxlbWVudChlbGVtZW50KQotICAgICAgICAgICAgICAgICYmIHRvSFRNTEFuY2hvckVsZW1l
bnQoZWxlbWVudCktPmlzTGl2ZUxpbmsoKSkgeworICAgICAgICAgICAgICAgICYmIGRvd25jYXN0
PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCkuaXNMaXZlTGluaygpKSB7CiAgICAgICAgICAg
ICAgICAgc3RhdGUudHlwZSA9IHN0YXRpY19jYXN0PERyYWdTb3VyY2VBY3Rpb24+KHN0YXRlLnR5
cGUgfCBEcmFnU291cmNlQWN0aW9uTGluayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CiAgICAgICAgICAgICB9CkBAIC02NTQsNyArNjU0LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRy
b2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50
KiBzdGEKICAgICB9CiAKICAgICAvLyBXZSBlaXRoZXIgaGF2ZSBub3RoaW5nIHRvIGRyYWcgb3Ig
d2UgaGF2ZSBhIHNlbGVjdGlvbiBhbmQgd2UncmUgbm90IG92ZXIgYSBkcmFnZ2FibGUgZWxlbWVu
dC4KLSAgICByZXR1cm4gKHN0YXRlLnR5cGUgJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSA/
IHN0YXJ0RWxlbWVudCA6IDA7CisgICAgcmV0dXJuIChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFj
dGlvblNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQgOiBudWxscHRyOwogfQogCiBzdGF0aWMgQ2Fj
aGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZDliNjcwZDIxMWFjYjFmMzRmZmE0YTE2NmRlOTMyMjU1
OTIzOWU1My4uYzEzMTViNjFjNjk4ZTBmZDdiYzgyZmY1MWU2YjJjNDYxZjU5NzMzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgRnJhbWUq
IEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAjaWYgRU5B
QkxFKENVUlNPUl9TVVBQT1JUKQogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShOb2RlKiBub2Rl
KQogewotICAgIHJldHVybiBub2RlICYmIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiB0b0hU
TUxJbnB1dEVsZW1lbnQobm9kZSktPmlzSW1hZ2VCdXR0b24oKTsKKyAgICByZXR1cm4gbm9kZSAm
JiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km5vZGUpLmlzSW1hZ2VCdXR0b24oKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBub2Rl
J3MgZWRpdGFibGUgYmxvY2sgaXMgbm90IGN1cnJlbnQgZm9jdXNlZCBmb3IgZWRpdGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDc1ZDhjNWRmMjE1YWEzNGRi
ZjJiYTU2OWJkODE5NDU1Njg3YzQxYWQuLmEwM2FhMGQ2ZmVkZDg0ZGI3MTk2ODljZjc4YjFmYjgx
NTRiZDE4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTg4
NSw5ICs4ODUsOSBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9u
YWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYQogICAgICAgICAgICAgY29udGFp
bmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rp
b24oZGlyZWN0aW9uLCBmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgICAgICBzdGFydGluZ1JlY3Qg
PSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkRWxlbWVudCwgdHJ1ZSAvKiBp
Z25vcmUgYm9yZGVyICovKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxBcmVhRWxlbWVudChm
b2N1c2VkRWxlbWVudCkpIHsKLSAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IHRv
SFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsKLSAgICAgICAgICAgIGNvbnRhaW5lciA9
IHNjcm9sbGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRp
cmVjdGlvbiwgYXJlYS0+aW1hZ2VFbGVtZW50KCkpOwotICAgICAgICAgICAgc3RhcnRpbmdSZWN0
ID0gdmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbihhcmVhLCBkaXJlY3Rpb24p
OworICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVhID0gZG93bmNhc3Q8SFRNTEFyZWFF
bGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOworICAgICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xs
YWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBhcmVhLmltYWdlRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IHZpcnR1
YWxSZWN0Rm9yQXJlYUVsZW1lbnRBbmREaXJlY3Rpb24oJmFyZWEsIGRpcmVjdGlvbik7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA5MmNiNzkxNWNm
YjA2MTNmM2MxMDhmNmZmNmE1MDExZTFmZWZjODk3Li45YWFmMjVkMzdiMzA4Yjg2OTIxMTZhZTMy
YmEyMmJhMjEzODVkNDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNDE2LDcg
KzE0MTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShSZW5k
ZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiAgICAgSFRNTEZyYW1lT3duZXJFbGVt
ZW50JiBlbGVtZW50ID0gZW1iZWRkZWRPYmplY3QuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBp
ZiAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxFbWJlZEVsZW1lbnQoZWxl
bWVudCkpIHsKICAgICAgICAgLy8gVGVsbCB0aGUgRE9NIGVsZW1lbnQgdGhhdCBpdCBuZWVkcyBh
IHdpZGdldCB1cGRhdGUuCi0gICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVs
ZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgaWYgKCFwbHVnaW5FbGVtZW50Lm5lZWRzQ2hl
Y2tGb3JTaXplQ2hhbmdlKCkpCiAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LnNldE5lZWRzV2lk
Z2V0VXBkYXRlKHRydWUpOwogICAgIH0KQEAgLTI3ODksNyArMjc4OSw3IEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRP
YmplY3QpCiAKICAgICBpZiAoZW1iZWRkZWRPYmplY3QuaXNTbmFwc2hvdHRlZFBsdWdJbigpKSB7
CiAgICAgICAgIGlmIChpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVk
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYg
cGx1Z2luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChlbGVtZW50KTsKKyAgICAg
ICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgICAgIHBsdWdpbkVsZW1l
bnQuY2hlY2tTbmFwc2hvdFN0YXR1cygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAg
LTI4MDAsNyArMjgwMCw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdChS
ZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiAgICAgLy8gRklYTUU6IFRoaXMg
Y291bGQgdHVybiBpbnRvIGEgcmVhbCB2aXJ0dWFsIGRpc3BhdGNoIGlmIHdlIGRlZmluZWQKICAg
ICAvLyB1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRpb24pIG9uIEhUTUxFbGVtZW50Lgog
ICAgIGlmIChpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVkRWxlbWVu
dChlbGVtZW50KSB8fCBpc0hUTUxBcHBsZXRFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQoZWxlbWVudCk7CisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKICAgICAg
ICAgaWYgKHBsdWdpbkVsZW1lbnQubmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkgewogICAgICAg
ICAgICAgcGx1Z2luRWxlbWVudC5jaGVja1NuYXBzaG90U3RhdHVzKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDZlYTBjZGFh
MDljZWU2ZTY1MDJiMmM5OGMzMTBjMTY4NmRkY2VjYTEuLjg5MDkzOGMzNzRlZmExMjNhNzFiZjg3
NDNjN2U4ZjhkYzRjMGYxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CkBAIC0yMzEsMTkgKzIzMSwxOSBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFt
ZShGcmFtZSogZnJhbWUpCiAgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRp
ZXModG9TdHlsZWRFbGVtZW50KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CiAK
ICAgICAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQpOwotICAgICAgICAgICAgVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7Ci0gICAgICAgICAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7
Ci0gICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1l
bnQtPnJlbmRlcmVyKCksIHVybCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQq
IGxpbmtFbGVtZW50ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKSkgewotICAgICAg
ICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICBIVE1MSW1hZ2VF
bGVtZW50JiBpbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVu
dCk7CisgICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAg
Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LmNhY2hlZEltYWdlKCk7Cisg
ICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1lbnQu
cmVuZGVyZXIoKSwgdXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChl
bGVtZW50KSkgeworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxMaW5rRWxlbWVudD4oKmVsZW1lbnQpOworICAgICAgICAgICAgaWYgKENTU1N0
eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQuc2hlZXQoKSkgeworICAgICAgICAgICAgICAg
IFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQuZ2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKICAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHls
ZVNoZWV0KHNoZWV0LCB1cmwpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJM
cy5jb250YWlucyh1cmwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0hU
TUxTdHlsZUVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmIChDU1NTdHlsZVNoZWV0
KiBzaGVldCA9IHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KS0+c2hlZXQoKSkKKyAgICAgICAg
ICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+
KCplbGVtZW50KS5zaGVldCgpKQogICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQoc2hlZXQsIFVSTCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggYjhjODg1MTk2NWE5MTQ0NmM2ZmVmNDk1OGJmMzFi
M2JlYWZjZDgzZC4uOWQ2MjNhMTZkMjljOGU5ZDg0MDRjMGZjODlkN2VhNWYzMjNhMDI0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTY3LDEzICs2Nywx
MyBAQCBGb2N1c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRhdGUoTm9kZSogbm9kZSwgRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uKQogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwogCiAg
ICAgaWYgKGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxBcmVhRWxlbWVu
dCogYXJlYSA9IHRvSFRNTEFyZWFFbGVtZW50KG5vZGUpOwotICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZSA9IGFyZWEtPmltYWdlRWxlbWVudCgpOworICAgICAgICBIVE1MQXJlYUVsZW1l
bnQmIGFyZWEgPSBkb3duY2FzdDxIVE1MQXJlYUVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2UgPSBhcmVhLmltYWdlRWxlbWVudCgpOwogICAgICAgICBpZiAo
IWltYWdlIHx8ICFpbWFnZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICB2aXNpYmxlTm9kZSA9IGltYWdlOwotICAgICAgICByZWN0ID0gdmlydHVhbFJlY3RGb3JB
cmVhRWxlbWVudEFuZERpcmVjdGlvbihhcmVhLCBkaXJlY3Rpb24pOworICAgICAgICByZWN0ID0g
dmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbigmYXJlYSwgZGlyZWN0aW9uKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDUxNDgwN2I5MDA2
NmVlODgwMzQ1MTEyMjFjYzQxMDRkNTdiZDUwYzYuLmI4MmY5ZWIyNGI4NzM2YmFmZTU1MzVkZTEx
ZTNiNjY5MjA0MjlhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC0zNTEs
OCArMzUxLDggQEAgc3RhdGljIE5vZGUqIGFuY2VzdG9yUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwKICAgICAgICAgICAgIC8vIElmIHdl
IGFyZSBpbnRlcmVzdGVkIGFib3V0IHRoZSBmcmFtZSwgdXNlIGl0LgogICAgICAgICAgICAgaWYg
KG5vZGVCb3VuZHMpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY2hlY2sgdG8gc2Vl
IHdoZXRoZXIgdGhpcyBub2RlIGlzIGFuIGFyZWEgZWxlbWVudC4gIFRoZSBvbmx5IHdheSB0aGlz
IGNhbiBoYXBwZW4gaXMgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2hlY2suCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRl
c3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmFyZWFUYWcpKQotICAgICAgICAgICAgICAgICAgICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJ
bnRSZWN0KHRvSFRNTEFyZWFFbGVtZW50KG5vZGUpLT5jb21wdXRlUmVjdChoaXRUZXN0UmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5yZW5kZXJlcigpKSk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUgPT0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgaXNIVE1MQXJlYUVsZW1lbnQobm9kZSkpCisgICAg
ICAgICAgICAgICAgICAgICpub2RlQm91bmRzID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8SFRN
TEFyZWFFbGVtZW50Pigqbm9kZSkuY29tcHV0ZVJlY3QoaGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+cmVuZGVyZXIoKSkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUg
JiYgbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgKm5vZGVCb3VuZHMgPSBu
b2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA5
NTkzYjc2MDQxOTk1MmQwYmMyMGExNGJmN2UyNjQxODA1NGQwODlmLi5hYTRiYTlmZDljOWRiYTI1
MzNmYWNkZWM0ZTA2Mzc3M2JhY2IxNTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCkBAIC00NCwxMCArNDQsMTEgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9j
a0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNp
bmNsdWRlICJTVkdBRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAi
WExpbmtOYW1lcy5oIgogCkBAIC0yNzIsMTQgKzI3MywxNCBAQCBTdHJpbmcgSGl0VGVzdFJlc3Vs
dDo6YWx0RGlzcGxheVN0cmluZygpIGNvbnN0CiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9k
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAgIGlmIChpc0hUTUxJbWFnZUVs
ZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlID0gdG9IVE1MSW1hZ2VFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdl
dCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1
dGUoYWx0QXR0ciksIG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKKyAgICBpZiAoaXNIVE1M
SW1hZ2VFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpIHsKKyAgICAgICAgSFRNTEltYWdl
RWxlbWVudCYgaW1hZ2UgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNo
YXJlZE5vZGUpOworICAgICAgICByZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS5mYXN0R2V0QXR0
cmlidXRlKGFsdEF0dHIpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CiAgICAgfQogICAg
IAotICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkp
KSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50
KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJp
bmcoaW5wdXQtPmFsdCgpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgaWYgKGlz
SFRNTElucHV0RWxlbWVudCgqbV9pbm5lck5vblNoYXJlZE5vZGUpKSB7CisgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1faW5uZXJO
b25TaGFyZWROb2RlKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW5wdXQuYWx0KCks
IG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5n
KCk7CkBAIC0zMzUsMTUgKzMzNiwxNSBAQCBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZV
UkwoKSBjb25zdAogICAgIGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUpCiAgICAgICAgIHJldHVy
biBVUkwoKTsKIAotICAgIGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUtPmhhc1RhZ05hbWUoZW1i
ZWRUYWcpICYmICFtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQor
ICAgIGlmICghaXNIVE1MRW1iZWRFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkgJiYgIWlz
SFRNTE9iamVjdEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKICAgICAgICAgcmV0dXJu
IFVSTCgpOwogCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFBs
dWdJbkltYWdlRWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7Ci0gICAgVVJMIHVy
bCA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVh
ZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhlbGVtZW50LT51cmwoKSkpOworICAgIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
PigqbV9pbm5lck5vblNoYXJlZE5vZGUpOworICAgIFVSTCB1cmwgPSBtX2lubmVyTm9uU2hhcmVk
Tm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxT
cGFjZXMoZWxlbWVudC51cmwoKSkpOwogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIFVSTCgpOwogCi0gICAgaWYgKGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkgPT0gImFwcGxp
Y2F0aW9uL3BkZiIgfHwgKGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkuaXNFbXB0eSgpICYmIHVybC5w
YXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKKyAgICBpZiAoZWxlbWVudC5zZXJ2aWNl
VHlwZSgpID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IChlbGVtZW50LnNlcnZpY2VUeXBlKCkuaXNF
bXB0eSgpICYmIHVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKICAgICAgICAg
cmV0dXJuIHVybDsKICAgICByZXR1cm4gVVJMKCk7CiB9CkBAIC00MjQsMTIgKzQyNSwxMiBAQCB2
b2lkIEhpdFRlc3RSZXN1bHQ6OnRvZ2dsZU1lZGlhRnVsbHNjcmVlblN0YXRlKCkgY29uc3QKIHZv
aWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAogewogI2lm
IEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdChtZWRpYUVsZW1l
bnQoKSk7Ci0gICAgaWYgKG1lZGlhRWx0ICYmIGlzSFRNTFZpZGVvRWxlbWVudChtZWRpYUVsdCkp
IHsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbHQgPSB0b0hUTUxWaWRlb0VsZW1l
bnQobWVkaWFFbHQpOwotICAgICAgICBpZiAoIXZpZGVvRWx0LT5pc0Z1bGxzY3JlZW4oKSAmJiBt
ZWRpYUVsdC0+c3VwcG9ydHNGdWxsc2NyZWVuKCkpIHsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQodGhpcy0+bWVkaWFFbGVtZW50KCkpOworICAgIGlmIChtZWRpYUVsZW1lbnQg
JiYgaXNIVE1MVmlkZW9FbGVtZW50KG1lZGlhRWxlbWVudCkpIHsKKyAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlh
RWxlbWVudCk7CisgICAgICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1l
ZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKCkpIHsKICAgICAgICAgICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
LSAgICAgICAgICAgIHZpZGVvRWx0LT5lbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIHZp
ZGVvRWxlbWVudC5lbnRlckZ1bGxzY3JlZW4oKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpA
QCAtNDM4LDggKzQzOSw4IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9y
VmlkZW8oKSBjb25zdAogYm9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYUNvbnRyb2xzRW5hYmxlZCgp
IGNvbnN0CiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsdCA9IG1lZGlhRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gbWVkaWFFbHQtPmNvbnRy
b2xzKCk7CisgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRoaXMtPm1l
ZGlhRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5jb250cm9scygpOwog
I2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNTE3LDEwICs1MTgsMTAgQEAgYm9vbCBI
aXRUZXN0UmVzdWx0Ojppc0xpdmVMaW5rKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJVUkxFbGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVu
dChtX2lubmVyVVJMRWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JF
bGVtZW50KG1faW5uZXJVUkxFbGVtZW50LmdldCgpKS0+aXNMaXZlTGluaygpOworICAgIGlmIChp
c0hUTUxBbmNob3JFbGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKm1faW5uZXJVUkxFbGVtZW50KS5pc0xpdmVMaW5r
KCk7CiAKLSAgICBpZiAobV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFU
YWcpKQorICAgIGlmIChpc1NWR0FFbGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCiAgICAgICAg
IHJldHVybiBtX2lubmVyVVJMRWxlbWVudC0+aXNMaW5rKCk7CiAKICAgICByZXR1cm4gZmFsc2U7
CkBAIC01NTUsMTEgKzU1NiwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRh
YmxlKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1faW5uZXJOb25TaGFy
ZWROb2RlLmdldCgpKSkKKyAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX2lubmVyTm9u
U2hhcmVkTm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzSFRNTElucHV0
RWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hU
TUxJbnB1dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgp
OworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVk
Tm9kZSkuaXNUZXh0RmllbGQoKTsKIAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+
aGFzRWRpdGFibGVTdHlsZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmNwcAppbmRleCBmNGRhY2ZhZTNjMGYzYTEzZjQ5OWFhMTA5MGM4OTE0MDQyMzE0ZjY5Li4x
MzljYjk3MmY1N2EwMDAwOGYxMTEwYjkyOTRhNDBmZjgyOTFkMGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgUmVu
ZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8gSWYgd2UncmUgYW4gaW5w
dXQgZWxlbWVudCwgd2UgbWF5IG5lZWQgdG8gY2hhbmdlIG91ciBidXR0b24gdGV4dC4KICAgICBp
ZiAoaXNIVE1MSW5wdXRFbGVtZW50KGZvcm1Db250cm9sRWxlbWVudCgpKSkgewotICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChmb3JtQ29udHJvbEVs
ZW1lbnQoKSk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oZm9ybUNvbnRyb2xFbGVtZW50KCkpOwogICAgICAgICBTdHJpbmcgdmFs
dWUgPSBpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCk7CiAgICAgICAgIHNldFRleHQodmFsdWUpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBi
ZWRkMWM3NDZkM2RiZDU4MDZhYmJhZDdiMTU4Mzg0NjJlNDViOWJjLi40OTcwYzA0ZWI4NTcwYzA5
ODllOTU5NGRhY2QwNTFmNGY4M2UyY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwCkBAIC0xNDIsOCArMTQyLDggQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmll
ciwKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShvbFRhZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSFRN
TE9MaXN0RWxlbWVudChlbGVtZW50KS0+c3RhcnQoKTsKKyAgICAgICAgICAgIGlmIChpc0hUTUxP
TGlzdEVsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0
PEhUTUxPTGlzdEVsZW1lbnQ+KCplbGVtZW50KS5zdGFydCgpOwogICAgICAgICAgICAgICAgIGlz
UmVzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAKaW5kZXggY2I5MjBhZjYyNjdhYzI5OTZlOWNhNzdkZjFhZWQxYjdmYmM4MDE5OS4uMzE4ZDcz
ZGExOTcxYjNlYTE5OWZiNjc5ZDA1NjhiZDMxYmQ2OWM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0yMzgsNyArMjM4LDcg
QEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQuaXNQbHVn
SW5JbWFnZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIHNuYXBzaG90
ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHBsdWdJbkVsZW1lbnQpLnNuYXBzaG90SW1hZ2Uo
KTsKKyAgICBJbWFnZSogc25hcHNob3QgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
PihwbHVnSW5FbGVtZW50KS5zbmFwc2hvdEltYWdlKCk7CiAgICAgaWYgKHNuYXBzaG90KQogICAg
ICAgICBwYWludFNuYXBzaG90SW1hZ2UocGFpbnRJbmZvLCBwYWludE9mZnNldCwgc25hcHNob3Qp
OwogfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91
dCgpCiAgICAgaWYgKCF3YXNNaXNzaW5nV2lkZ2V0ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRT
aXplLndpZHRoKCkgJiYgbmV3U2l6ZS5oZWlnaHQoKSA+PSBvbGRTaXplLmhlaWdodCgpKSB7CiAg
ICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCA9IGZyYW1lT3duZXJFbGVtZW50
KCk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzUGx1Z2luRWxlbWVudCgpICYmIHRvSFRNTFBsdWdJ
bkVsZW1lbnQoZWxlbWVudCkuaXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkgewotICAgICAgICAgICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4o
ZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAocGx1Z0luSW1hZ2VFbGVtZW50LmRpc3BsYXlTdGF0
ZSgpID4gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCAmJiBwbHVnSW5JbWFn
ZUVsZW1lbnQuc25hcHNob3REZWNpc2lvbigpID09IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6Ok1h
eVNuYXBzaG90V2hlblJlc2l6ZWQpIHsKICAgICAgICAgICAgICAgICBwbHVnSW5JbWFnZUVsZW1l
bnQuc2V0TmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICB2aWV3KCku
ZnJhbWVWaWV3KCkuYWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZSgqdGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCmluZGV4IGE0MDVhYTRkNmQ4NjZlNWVhMzEy
NjQwMTM3Yzk0YmY1MGM3ZWU1MWQuLjlmNjcyZDdhNjE4ZDBjYTBlOGFkNjIwNmQwNGEzZTkxNTkx
MGMyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC0z
OCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBlbnVtIEZpbmRMZWdlbmRPcHRpb24geyBJZ25vcmVG
bG9hdGluZ09yT3V0T2ZGbG93LCBJbmNsdWRlRmxvYXRpbmdPck91dE9mRmxvdyB9OwogICAgIFJl
bmRlckJveCogZmluZExlZ2VuZChGaW5kTGVnZW5kT3B0aW9uID0gSWdub3JlRmxvYXRpbmdPck91
dE9mRmxvdykgY29uc3Q7CiAKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50JiBmaWVsZFNldEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZUZvck5vbkFub255
bW91cygpKTsgfQorICAgIEhUTUxGaWVsZFNldEVsZW1lbnQmIGZpZWxkU2V0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuY3BwCmluZGV4IDUwMWM1MWVhNGMzOGM0NTJjZTU3MWY5MGU0YWZjYzdiODc0NzQ0MWEu
LjI5NTFjZmE5ZGI2ZTA4YTRmMmQ2ZTJiMzg0ZjliODc2MDM0YzJlZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAt
NzAsNyArNzAsNyBAQCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZpbGVVcGxvYWRD
b250cm9sKCkKIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6Omlu
cHV0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChub2Rl
Rm9yTm9uQW5vbnltb3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjp1cGRhdGVGcm9tRWxlbWVudCgpCkBAIC0yNTUsNyArMjU1LDcgQEAgSFRNTElucHV0RWxl
bWVudCogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgTm9kZSogYnV0dG9u
Tm9kZSA9IGlucHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHJl
dHVybiBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJ
bnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkg
OiAwOworICAgIHJldHVybiBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQo
KSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PihidXR0b25Ob2RlKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6YnV0dG9uVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZS5jcHAKaW5kZXggZDhiYTMxYTBmZjVlN2Y3M2RkYjA3ZGVjMjEzZTllMzljYTM0NjA2Mi4u
NDM5MzhjZjQwYTMyOTJiYzJmZWNjZjU0NjEyNTZjMDIyZWEzNDQ5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCkBAIC0zNSw3ICszNSw3IEBAIFJlbmRlckZyYW1l
OjpSZW5kZXJGcmFtZShIVE1MRnJhbWVFbGVtZW50JiBmcmFtZSwgUGFzc1JlZjxSZW5kZXJTdHls
ZT4gc3R5bGUpCiAKIEhUTUxGcmFtZUVsZW1lbnQmIFJlbmRlckZyYW1lOjpmcmFtZUVsZW1lbnQo
KSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxGcmFtZUVsZW1lbnQoUmVuZGVyRnJhbWVCYXNl
OjpmcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZyYW1lRWxl
bWVudD4oUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogRnJhbWVF
ZGdlSW5mbyBSZW5kZXJGcmFtZTo6ZWRnZUluZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKaW5kZXggNDQ4NTEzN2NkMGMzYWQ4YTZlNWE0ZDFh
MTAyZTZjNzFmOWQzMWE5Ny4uMTc3MTdkODBlYmRhM2RkY2E0NzA5MzU2ODJjYjNiZTdmYjFkZmNj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC01
OSw3ICs1OSw3IEBAIFJlbmRlckZyYW1lU2V0Ojp+UmVuZGVyRnJhbWVTZXQoKQogCiBIVE1MRnJh
bWVTZXRFbGVtZW50JiBSZW5kZXJGcmFtZVNldDo6ZnJhbWVTZXRFbGVtZW50KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gdG9IVE1MRnJhbWVTZXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7CiB9CiAKIFJlbmRlckZyYW1lU2V0OjpHcmlkQXhpczo6R3JpZEF4aXMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCmluZGV4IGU0MmZl
OGQyMjhlMmExNDRmZTQ1ZTQwYmQ2ZjFiZDA1MDgyOGI0N2YuLjYyMWNmMjhjMGYwOTRlNzc2MzJm
OGRhOWE0MGFiMDE1OTEwZDMzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySFRNTENhbnZhcy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUmVuZGVySFRNTENhbnZhczo6UmVu
ZGVySFRNTENhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJT
dHkKIAogSFRNTENhbnZhc0VsZW1lbnQmIFJlbmRlckhUTUxDYW52YXM6OmNhbnZhc0VsZW1lbnQo
KSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxDYW52YXNFbGVtZW50KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlRm9y
Tm9uQW5vbnltb3VzKCkpOwogfQogCiBib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5
ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklG
cmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAppbmRl
eCAwZWRjZTJkYmQ2ZTg5NWExNjMwY2NhYzJjZDYzOWNhOWEzZDk3OTlhLi45MGM2MzU3YmU5MTdm
MjQ2M2FkYTA5NDJiZDYwODUzNTRiNjdlZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySUZyYW1lLmNwcApAQCAtNDYsNyArNDYsNyBAQCBSZW5kZXJJRnJhbWU6OlJlbmRlcklG
cmFtZShIVE1MSUZyYW1lRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5
bAogCiBIVE1MSUZyYW1lRWxlbWVudCYgUmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdG9IVE1MSUZyYW1lRWxlbWVudChSZW5kZXJGcmFtZUJhc2U6OmZy
YW1lT3duZXJFbGVtZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVu
dD4oUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogYm9vbCBSZW5k
ZXJJRnJhbWU6OnNob3VsZENvbXB1dGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCBkNjE1NWZjNmQ2ZTQ4NjYwNTc3NDA2
OWFiYmYzNzNiZDZlNGZhOGVmLi5lODU4NTgyYWM3NGJkYTgyMzQwZTI4NTEwNTA2Mjc2ZTQ0NjM5
NmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTEzMSw3
ICsxMzEsNyBAQCBSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUsIFN0eWxlSW1hZwogICAgIGltYWdlUmVzb3VyY2UoKS5p
bml0aWFsaXplKHRoaXMpOwogCiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkK
LSAgICAgICAgbV9oYXNTaGFkb3dDb250cm9scyA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50
KS5oYXNTaGFkb3dDb250cm9scygpOworICAgICAgICBtX2hhc1NoYWRvd0NvbnRyb2xzID0gZG93
bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkuaGFzU2hhZG93Q29udHJvbHMoKTsKIH0K
IAogUmVuZGVySW1hZ2U6OlJlbmRlckltYWdlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4gc3R5bGUsIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UpCkBAIC01MTcsMjAgKzUx
NywyMCBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50
SW5mbyYgcGFpbnRJbmZvKQogICAgIGlmICghZm9jdXNlZEVsZW1lbnQgfHwgIWlzSFRNTEFyZWFF
bGVtZW50KGZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEFyZWFF
bGVtZW50KiBhcmVhRWxlbWVudCA9IHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsK
LSAgICBpZiAoYXJlYUVsZW1lbnQtPmltYWdlRWxlbWVudCgpICE9IGVsZW1lbnQoKSkKKyAgICBI
VE1MQXJlYUVsZW1lbnQmIGFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpOworICAgIGlmIChhcmVhRWxlbWVudC5pbWFnZUVsZW1lbnQoKSAhPSBl
bGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW4gaWYgdGhlIHRoZW1lIGhh
bmRsZXMgZm9jdXMgcmluZyBkcmF3aW5nIGZvciBlbnRpcmUgZWxlbWVudHMsIGl0IHdvbid0IGRv
IGl0IGZvcgogICAgIC8vIGFuIGFyZWEgd2l0aGluIGFuIGltYWdlLCBzbyB3ZSBkb24ndCBjYWxs
IFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyBoZXJlLgogCi0gICAgUGF0aCBwYXRoID0g
YXJlYUVsZW1lbnQtPmNvbXB1dGVQYXRoKHRoaXMpOworICAgIFBhdGggcGF0aCA9IGFyZWFFbGVt
ZW50LmNvbXB1dGVQYXRoKHRoaXMpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgYWRkaXRpb25hbCBjb2RlIHRvIGNs
aXAgdGhlIHBhdGggdG8gdGhlIGltYWdlJ3MgYm91bmRpbmcgYm94PwogCi0gICAgUmVuZGVyU3R5
bGUqIGFyZWFFbGVtZW50U3R5bGUgPSBhcmVhRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAg
IFJlbmRlclN0eWxlKiBhcmVhRWxlbWVudFN0eWxlID0gYXJlYUVsZW1lbnQuY29tcHV0ZWRTdHls
ZSgpOwogICAgIHVuc2lnbmVkIHNob3J0IG91dGxpbmVXaWR0aCA9IGFyZWFFbGVtZW50U3R5bGUt
Pm91dGxpbmVXaWR0aCgpOwogICAgIGlmICghb3V0bGluZVdpZHRoKQogICAgICAgICByZXR1cm47
CkBAIC01NjAsOCArNTYwLDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAoIWlt
ZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZUVsdCA9IChlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQo
KSkpID8gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgOiAwOwotICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRl
T3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CisgICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50ID0gKGVsZW1lbnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgp
KSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAg
ICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWxlbWVudCA/IGlt
YWdlRWxlbWVudC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAg
ICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VSZXNvdXJjZSgpLmltYWdlKCkuZ2V0KCk7CiAgICAgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQs
IGltYWdlLCBpbWFnZSwgTGF5b3V0U2l6ZShyZWN0LnNpemUoKSkpOwogICAgIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkpOwpAQCAtNjIyLDggKzYyMiw4IEBAIExheW91dFVuaXQgUmVuZGVySW1h
Z2U6Om1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5k
ZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBl
bGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyB0b0hUTUxJbWFnZUVs
ZW1lbnQoZWxlbWVudCgpKSA6IDA7Ci0gICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS5nZXRJ
bWFnZU1hcChpLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpKSA6IDA7CisgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2UgPSBlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+dHJlZVNjb3BlKCkuZ2V0SW1hZ2VNYXAoaW1hZ2Ut
PmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5k
ZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKQEAgLTY1NSwxMCArNjU1LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVw
ZGF0ZUFsdFRleHQoKQogICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9
IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAo
aXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRN
TEltYWdlRWxlbWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7CisgICAgaWYgKGlzSFRNTElucHV0
RWxlbWVudCgqZWxlbWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKmVsZW1lbnQoKSkuYWx0VGV4dCgpOworICAgIGVsc2UgaWYgKGlzSFRNTElt
YWdlRWxlbWVudCgqZWxlbWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRN
TEltYWdlRWxlbWVudD4oKmVsZW1lbnQoKSkuYWx0VGV4dCgpOwogfQogCiBib29sIFJlbmRlcklt
YWdlOjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAzNGY5NzJkOTQ5YzEwZTg4YWNkMTBkODU1
MDU3YjA1OWJiOTQxYmNmLi5hZWE0ZjkwOTBmOWM0M2VjYjlkZjIxMTJkMjNiOTk4ZGQwZjMyOWFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cApAQCAtNzQsNyArNzQsNyBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBv
c2l0aW5nU3RyYXRlZ3koY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcgogewogICAgIEFTU0VS
VChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlci5ub2RlKCkpOworICAgIGNv
bnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dD4ocmVuZGVyZXIubm9kZSgpKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250
ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFz
OwpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmlt
YXJ5R3JhcGhpY3NMYXllcigpCiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKENBKQogICAg
IGlmICghY29tcG9zaXRvcigpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSAmJiByZW5kZXJl
cigpLmlzQ2FudmFzKCkpIHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cyA9IHRvSFRNTENhbnZhc0VsZW1lbnQocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgICAgICBj
b25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNhbnZhcy0+c2hvdWxkQWNj
ZWxlcmF0ZShjYW52YXMtPnNpemUoKSkpCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dEFjY2VsZXJhdGVzRHJhd2luZyh0cnVlKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgYm9v
bCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogI2VuZGlmCiAjaWYg
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2Ug
aWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJl
bmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewotICAgICAgICBjb25zdCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlcigpLmVs
ZW1lbnQoKSk7CisgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAgICAgICBp
ZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29u
dGV4dCgpKQogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZv
cm1MYXllcihjb250ZXh0LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRz
TGF5ZXJGb3JDYW52YXMpOwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApp
bmRleCAxNTUzODIyNDhmMjZhNjUwNjU2ZDg3MDRkOGZiNmIzYWQwY2Q2ODkwLi40YmU0NjkxZDAz
YWIyNTAwNmQ0Y2UyNjMxYzk1NWU4NzQxZTBjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMjQzNSw3ICsyNDM1LDcg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52
YXMoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICNpZiBVU0UoQ09NUE9TSVRJTkdfRk9SX1NNQUxM
X0NBTlZBU0VTKQogICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9z
aXRpbmcgPSB0cnVlOwogI2Vsc2UKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9
IHRvSFRNTENhbnZhc0VsZW1lbnQocmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJl
ci5lbGVtZW50KCkpOwogICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29t
cG9zaXRpbmcgPSBjYW52YXMtPnNpemUoKS5hcmVhKCkgPj0gY2FudmFzQXJlYVRocmVzaG9sZFJl
cXVpcmluZ0NvbXBvc2l0aW5nOwogI2VuZGlmCiAgICAgICAgIENhbnZhc0NvbXBvc2l0aW5nU3Ry
YXRlZ3kgY29tcG9zaXRpbmdTdHJhdGVneSA9IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVu
ZGVyZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4
IDU3NTlhYmMzNzhmNDAzZjA5NTBiNWE1YmM3ZGJjNGU4OGQzOWZjNGYuLjYyYWVkYzNhNzFjYzQ2
YzIzZmViZTIxODhhODQ3M2Q0ZDg2ZmQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBSZW5kZXJMaXN0Qm94Ojp+UmVu
ZGVyTGlzdEJveCgpCiAKIEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJMaXN0Qm94OjpzZWxlY3RF
bGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlRm9y
Tm9uQW5vbnltb3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4o
bm9kZUZvck5vbkFub255bW91cygpKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVG
cm9tRWxlbWVudCgpCkBAIC0xMTcsOSArMTE3LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRh
dGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZv
bnQgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKICAgICAgICAgICAgIGlmIChpc0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25F
bGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAg
ICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAo
aXNIVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9
IHRvSFRNTE9wdEdyb3VwRWxlbWVudChlbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAg
ICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQp
Lmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBp
dGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChk
LmJvbGRlcldlaWdodCgpKTsKICAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRl
bUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKQEAgLTM4Nywx
MyArMzg3LDEzIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgU3RyaW5nIGl0ZW1UZXh0
OwogICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gaXNIVE1MT3B0aW9uRWxlbWVudChsaXN0SXRl
bUVsZW1lbnQpOwogICAgIGlmIChpc09wdGlvbkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0g
dG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3Bl
Y3RHcm91cExhYmVsKCk7CisgICAgICAgIGl0ZW1UZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwo
KTsKICAgICBlbHNlIGlmIChpc0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSkK
LSAgICAgICAgaXRlbVRleHQgPSB0b0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50
KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAgICAgaXRlbVRleHQgPSBkb3duY2FzdDxIVE1MT3B0
R3JvdXBFbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIGFw
cGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRl
eHRDb2xvciA9IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJdGVtRWxlbWVu
dC0+cmVuZGVyU3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
IDogc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAg
aWYgKGlzT3B0aW9uRWxlbWVudCAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVu
dCktPnNlbGVjdGVkKCkpIHsKKyAgICBpZiAoaXNPcHRpb25FbGVtZW50ICYmIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CiAgICAgICAg
IGlmIChmcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50
KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSAmc2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgdGV4
dENvbG9yID0gdGhlbWUoKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7
CiAgICAgICAgIC8vIEhvbm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBkaXNhYmxlZCBpdGVt
cwpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgSFRNTEVs
ZW1lbnQqIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29s
b3IgYmFja0NvbG9yOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVu
dCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT5zZWxlY3RlZCgpKSB7
CisgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSAmJiBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkuc2VsZWN0ZWQoKSkgewogICAg
ICAgICBpZiAoZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1
bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgPT0gJnNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgICAg
IGJhY2tDb2xvciA9IHRoZW1lKCkuYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpOwogICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcAppbmRleCAzNjhlZDllMmJlZWIxZjg4YjU1NDZiN2ZkNjgzNGJlNjFlNmJhMjdhLi5m
YTAxMmM5ZThiYmMzYTY3MzczYjIwNDAzYmU1MWUwMDE5NmQzM2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBpbmxp
bmUgaW50IFJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4g
bV9leHBsaWNpdFZhbHVlOwogCiAgICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QodGhp
cyk7Ci0gICAgSFRNTE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlzdC0+
aGFzVGFnTmFtZShvbFRhZykpID8gdG9IVE1MT0xpc3RFbGVtZW50KGxpc3QpIDogbnVsbHB0cjsK
KyAgICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNU
YWdOYW1lKG9sVGFnKSkgPyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxw
dHI7CiAgICAgaW50IHZhbHVlU3RlcCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlz
dEVsZW1lbnQtPmlzUmV2ZXJzZWQoKSkKICAgICAgICAgdmFsdWVTdGVwID0gLTE7CkBAIC01MDEs
NyArNTAxLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMo
KQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0g
ICAgSFRNTE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3ROb2RlICYmIGxpc3ROb2Rl
LT5oYXNUYWdOYW1lKG9sVGFnKSkgPyB0b0hUTUxPTGlzdEVsZW1lbnQobGlzdE5vZGUpIDogbnVs
bHB0cjsKKyAgICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYg
bGlzdE5vZGUtPmhhc1RhZ05hbWUob2xUYWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+
KGxpc3ROb2RlKSA6IG51bGxwdHI7CiAgICAgaWYgKG9MaXN0RWxlbWVudCkgewogICAgICAgICBv
TGlzdEVsZW1lbnQtPml0ZW1Db3VudENoYW5nZWQoKTsKICAgICAgICAgaXNMaXN0UmV2ZXJzZWQg
PSBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNYXJxdWVlLmNwcAppbmRleCBiZGVhOTc5MjkyOTZkZDBhNTZiMzZhY2I5M2JiYjlhYThk
Y2I5Y2IyLi4yNWE5N2U2YjNhNThlOTg4ZDZhYTQ2NTEzODlkZjc2ODNhMDAyNDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03Myw4ICs3Myw4IEBA
IGludCBSZW5kZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1
bHQgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZVNwZWVkKCk7CiAgICAgRWxl
bWVudCogZWxlbWVudCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGlmIChl
bGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykpCi0gICAgICAgIHJlc3Vs
dCA9IHN0ZDo6bWF4KHJlc3VsdCwgdG9IVE1MTWFycXVlZUVsZW1lbnQoZWxlbWVudCktPm1pbmlt
dW1EZWxheSgpKTsKKyAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxNYXJxdWVlRWxlbWVudChlbGVt
ZW50KSkKKyAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxIVE1MTWFy
cXVlZUVsZW1lbnQ+KCplbGVtZW50KS5taW5pbXVtRGVsYXkoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5k
ZXggMTM0Y2Y5NDBmOGM5MzFiYTM0MTdkZDBmMmMxMjA5YjgwZjlkZmVjOS4uMzdlZWE1ZWU3MjNi
ZGY4ZGQ1ZTU5MDUxZTU5OGM5OWI4OWM0NDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBzaXplX3Qgc2Vs
ZWN0ZWRPcHRpb25Db3VudChjb25zdCBSZW5kZXJNZW51TGlzdCYgcmVuZGVyTWVudUxpc3QpCiAK
ICAgICBzaXplX3QgY291bnQgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZJdGVtczsgKytpKSB7Ci0gICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0
aW9uVGFnKSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkp
CisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSkgJiYgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAg
ICAgICArK2NvdW50OwogICAgIH0KICAgICByZXR1cm4gY291bnQ7CkBAIC0xNjgsNyArMTY4LDcg
QEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAKIEhUTUxTZWxlY3RF
bGVtZW50JiBSZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9
CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3Ry
aW5nIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jl
c3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7
CiAgICAgICAgIGFwcGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCB0ZXh0LCAnICcpOwogICAgICAg
ICBpZiAodGhlbWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAg
ICAgICAvLyBBZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3Vs
YXRlIHBlcmNlbnRhZ2UgdmFsdWVzIGZvciBub3cuCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBS
ZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAgIGlm
IChpID49IDAgJiYgaSA8IHNpemUpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJ
dGVtc1tpXTsKICAgICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50
ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CiAgICAgICAgICAgICBtX29wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNDUxLDkgKzQ1MSw5IEBAIFN0cmluZyBSZW5kZXJNZW51
TGlzdDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIFN0cmluZyBpdGVt
U3RyaW5nOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAg
ICBpZiAoaXNIVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtU3RyaW5n
ID0gdG9IVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOworICAg
ICAgICBpdGVtU3RyaW5nID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQp
Lmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgZWxzZSBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVt
ZW50KSkKLSAgICAgICAgaXRlbVN0cmluZyA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICAgICAgaXRlbVN0cmluZyA9
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNw
ZWN0R3JvdXBMYWJlbCgpOwogCiAgICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1T
dHJpbmcsICcgJyk7CiAgICAgcmV0dXJuIGl0ZW1TdHJpbmc7CkBAIC02NTQsNyArNjU0LDcgQEAg
Ym9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdAogICAgIGlmIChsaXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRl
eF07Ci0gICAgcmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0
aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gaXNIVE1MT3B0aW9u
RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1
bnNpZ25lZCBsaXN0SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNw
cAppbmRleCBlNjI0Njg2YzVhNDRjYjA0NzAxOGJhMTJjMTUzZWFlM2Y2YmFkNzMzLi45ZWRiYmQ5
OWI1MGZmZDBhOTRmNzY4ODY5MzQ4YjlmYWEzNzhiYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZXRlci5jcHAKQEAgLTQ0LDEwICs0NCwxMCBAQCBIVE1MTWV0ZXJFbGVtZW50
KiBSZW5kZXJNZXRlcjo6bWV0ZXJFbGVtZW50KCkgY29uc3QKICAgICBBU1NFUlQoZWxlbWVudCgp
KTsKIAogICAgIGlmIChpc0hUTUxNZXRlckVsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0
dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE1ldGVyRWxlbWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCkt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCkt
PnNoYWRvd0hvc3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1lbnQ+KGVs
ZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9n
aWNhbFdpZHRoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
cm9ncmVzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3Bw
CmluZGV4IDI0MjVmMDYyMzFmZTg5MTViZTg5MTZkZTkyMTI3YWMxZGUxMDIxYjYuLjJiNGYwNTdh
YTEzZTdjZjMzNzYyN2NiMjcwZjMyNzIyNDJiZDY2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcApAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBSZW5k
ZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUoKQogSFRNTFByb2dyZXNzRWxlbWVudCog
UmVuZGVyUHJvZ3Jlc3M6OnByb2dyZXNzRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVt
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmIChpc0hUTUxQcm9ncmVzc0VsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRv
SFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFByb2dyZXNzRWxlbWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCkt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50
KCktPnNoYWRvd0hvc3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQcm9ncmVzc0VsZW1l
bnQ+KGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKIH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggYWVi
ODhiZTE4YWNkOWRiOWE2MzgxZTNmNmMwMGQ2NjliYTNhZTk3MS4uMTA3OTc5ZTFlZjlmZTNiMDAz
NWMzZjc2N2Y3ZDc5YjA3M2RjMGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVy
KCkKIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyU2xpZGVyOjplbGVtZW50KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMo
KSk7CiB9CiAKIGludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBz
aG90dGVkUGx1Z0luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hv
dHRlZFBsdWdJbi5jcHAKaW5kZXggNzk3OGZlMjFlNGRjZDZkNzlmYjRiNGZiNDAwOTJlOTIxZmFi
Y2YxNi4uZGUzNzI2ZDJjMzZlZDNiNWE1YWJiY2Q4YmRlMzBmYjY2YjllNmRjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3Bw
CkBAIC02NCw3ICs2NCw3IEBAIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjp+UmVuZGVyU25hcHNo
b3R0ZWRQbHVnSW4oKQogCiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBSZW5kZXJTbmFwc2hvdHRl
ZFBsdWdJbjo6cGx1Z0luSW1hZ2VFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50KFJlbmRlckVtYmVkZGVkT2JqZWN0OjpmcmFtZU93bmVyRWxlbWVu
dCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmZyYW1lT3duZXJFbGVtZW50KCkpOwogfQogCiB2b2lkIFJlbmRlclNu
YXBzaG90dGVkUGx1Z0luOjpsYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggOGIwZDBlZmJiM2Q1ZmI2MGVjNWE4MjE3OGEyMzMx
NDRmOGI1MjlkNC4uNDAzNWY2NjA0MTllYWY1MDgzYWRiM2QzZWI4MWMyZDlhMTk4Nzc5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00
OCw3ICs0OCw3IEBAIFJlbmRlclRleHRDb250cm9sOjp+UmVuZGVyVGV4dENvbnRyb2woKQogCiBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sOjppbm5lclRleHRFbGVt
ZW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCmluZGV4IDkxZGI1M2Q5MDU1NzkwMWJjOWVjY2VmZThm
Y2Q2M2EwNzBlY2QyY2UuLjUyNzE4ZGEzYjE1MDU2ZTczYzgyYzViNzA2NWJkNDZhNTQ5OTFjYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lLmNwcApAQCAtNDUsNyArNDUsNyBAQCBSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6flJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lKCkKIAogSFRNTFRleHRBcmVhRWxlbWVu
dCYgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnRleHRBcmVhRWxlbWVudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRvSFRNTFRleHRBcmVhRWxlbWVudChSZW5kZXJUZXh0Q29udHJvbDo6dGV4
dEZvcm1Db250cm9sRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVh
RWxlbWVudD4oUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CmluZGV4IDU5NTdlZTdhNjhiOTJiZGJjMjZkMDJjYWIwMGJmYzlkYjkyYWQ2MmQuLmMyZWM3ZDY3
NDYwNTAzZTliZmNjZWEwMTQ4ZGI3M2FkYmZmYmU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC00
ODEsNyArNDgxLDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxT
Y3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KIAogSFRNTElucHV0RWxlbWVu
dCYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewot
ICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1lbnQoUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3Jt
Q29udHJvbEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KFJlbmRlclRleHRDb250cm9sOjp0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBhMTUwOGI4OGJiODk5
ZGYwNTgxZTJkNDYwZDRjODgwYWM1M2Q4MzBkLi5mYjVlZTVjZTNmMmFkZTA4ZGRiNzMwYTQzMzcz
ODNmMjc3MzAwMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
QEAgLTk4MCw3ICs5ODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghaW5w
dXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0
ID0gdG9IVE1MRGF0YUxpc3RFbGVtZW50KGlucHV0LT5saXN0KCkpOworICAgIEhUTUxEYXRhTGlz
dEVsZW1lbnQqIGRhdGFMaXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQt
Pmxpc3QoKSk7CiAgICAgaWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDM2
LDggKzEwMzYsOCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRGaWxsQ29sb3Ioby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgTm9kZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBBU1NFUlQo
aXNIVE1MT3B0aW9uRWxlbWVudChub2RlKSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAgU3RyaW5n
IHZhbHVlID0gb3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQmIG9wdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOwor
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7CiAgICAgICAgIGlm
ICghaW5wdXQtPmlzVmFsaWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgZG91YmxlIHBhcnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5w
dXQtPnNhbml0aXplVmFsdWUodmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbQppbmRleCA5NGUxYmRiM2ZhYWZmY2Q4YzgxOTI0Yjg0YTJhYTRlMWMwYzM5
ZjhkLi43ODliZWY1NjFiNTJjNTI1OWQ1NjdkMzJkZjAyN2YxZTFhZDc2ZWMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC02NzIsNyArNjcyLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYgYm94LCBjb24KIAogICAgIC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAg
ICBpZiAoYm94LmlzTWVudUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkp
LT5tdWx0aXBsZSgpKSB7CisgICAgaWYgKGJveC5pc01lbnVMaXN0KCkgJiYgZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CiAgICAgICAgIGludCBz
aXplID0gMjsKICAgICAgICAgaW50IGNvdW50ID0gMzsKICAgICAgICAgaW50IHBhZGRpbmcgPSAz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IGQ0Y2Fi
MmIyYzk3NjVhOGQ0YmU5ZTg1NTFlZTBjNmJiMzVhOTY2NzQuLmM1YWZlYmQzMWMyYjVlMTg3NTU3
YjI4MGEwNGY2ZmU1ZjQ2MjQ2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0KQEAgLTE2NzgsNyArMTY3OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAg
ICBpZiAoIWlucHV0LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaW5wdXQtPmlzVGV4dEZv
cm1Db250cm9sKCkgJiYgIXRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoaW5wdXQpLT5pc1Jl
YWRPbmx5KCkpKQorICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIChp
bnB1dC0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCppbnB1dCkuaXNSZWFkT25seSgpKSkKICAgICAgICAgdXBkYXRlUHJlc3NlZFN0
YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0sIG8pOwogICAgIGVsc2UgaWYgKFtbc2VhcmNo
IGNhbmNlbEJ1dHRvbkNlbGxdIGlzSGlnaGxpZ2h0ZWRdKQogICAgICAgICBbW3NlYXJjaCBjYW5j
ZWxCdXR0b25DZWxsXSBzZXRIaWdobGlnaHRlZDpOT107CkBAIC0xODYxLDEzICsxODYxLDEzIEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQtPmlzUGx1Z0lu
SW1hZ2VFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTFBsdWdJbklt
YWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
KHBsdWdJbkVsZW1lbnQpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdl
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCpwbHVnSW5FbGVtZW50
KTsKIAotICAgIEltYWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC0+c25hcHNob3RJ
bWFnZSgpOworICAgIEltYWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC5zbmFwc2hv
dEltYWdlKCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbiogcGx1Z0luUmVuZGVyZXIgPSB0b1JlbmRlclNuYXBz
aG90dGVkUGx1Z0luKHBsdWdJbkltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVy
U25hcHNob3R0ZWRQbHVnSW4qIHBsdWdJblJlbmRlcmVyID0gdG9SZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbihwbHVnSW5JbWFnZUVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgRmxvYXRQb2ludCBzbmFw
c2hvdEFic1BvcyA9IHBsdWdJblJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICBzbmFw
c2hvdEFic1Bvcy5tb3ZlKHBsdWdJblJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBwbHVnSW5SZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwgcGx1Z0luUmVuZGVyZXItPmJvcmRlclRvcCgpICsgcGx1Z0lu
UmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwCmluZGV4IDVjOTYwNmZiNjhjNGVhZmVhNzY4ZTcwMWZhMzZjOWIzNDUwY2IwNTIu
LjZlYWZmMzNiYjUxZjUwNTRhNWJmZGU0YzFiNTBlNzk3MjYyYzMwOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgUmVu
ZGVyVmlkZW86OmxheW91dCgpCiAgICAgCiBIVE1MVmlkZW9FbGVtZW50JiBSZW5kZXJWaWRlbzo6
dmlkZW9FbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KFJl
bmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRl
b0VsZW1lbnQ+KFJlbmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
VmlkZW86OnVwZGF0ZUZyb21FbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcAppbmRleCA3NDg2NjBmYzQ5MmIzNjEzM2VlZTM1ZjIzOTA5ODZk
OTdjNDc2MWQ5Li4zZjIxMTFmNTNkNGVlYjdhZDA1Y2IzNjA0NzU5YTY0OGM1OGIyNzIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC05Myw3
ICs5Myw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5u
b2RlKCk7CiAgICAgaWYgKG5vZGUgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KG5vZGUpKSB7Ci0gICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsU3RyaW5nID0gdG9IVE1MSW1hZ2VFbGVtZW50KG5v
ZGUpLT5pbWFnZVNvdXJjZVVSTCgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVybFN0
cmluZyA9IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCpub2RlKS5pbWFnZVNvdXJjZVVSTCgp
OwogICAgICAgICBVUkwgdXJsID0gbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJp
bmcpOwogICAgICAgICBpbWFnZUZvckNvbnRhaW5lci0+c2V0VVJMKHVybCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvc3ZndGFncy5pbgppbmRleCA2N2Y3MmQ4NDQ2MzVmYTIxMDdkM2UzNjE5ZmM3M2Q5ZGE3NTgw
ZWI4Li5iNzcwOGMxMTFjYmZiMDJhNzA4M2RkZmYwZGRmNTI5NjhkYWY3MGNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
c3ZndGFncy5pbgpAQCAtMyw3ICszLDcgQEAgbmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyIKIGZhbGxiYWNrSW50ZXJmYWNlTmFtZT0iU1ZHVW5rbm93bkVsZW1lbnQiCiBm
YWxsYmFja0pTSW50ZXJmYWNlTmFtZT0iU1ZHRWxlbWVudCIKIAotYQorYSBnZW5lcmF0ZVR5cGVI
ZWxwZXJzCiAjaWYgRU5BQkxFX1NWR19GT05UUwogYWx0R2x5cGggZ2VuZXJhdGVUeXBlSGVscGVy
cwogYWx0R2x5cGhEZWYgZ2VuZXJhdGVUeXBlSGVscGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCmluZGV4IDBhMDI2N2FjZDQ3NTQ3NWE3MDA4M2JiMWU4Yjg3NzVkOGU3ZWEyMWUu
LjA2NDg5NmRkNmY4ZWQ3MjVkMWM4YTAwNjNiZjc1OGE1YjRjZmMyNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEludGVybmFsczo6
c2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBpZCwgRXhj
ZXB0aW9uQwogU3RyaW5nIEludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCgqZWxlbWVudCkpIHsKLSAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQm
IHRleHRGb3JtQ29udHJvbEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCpl
bGVtZW50KTsKKyAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRG
b3JtQ29udHJvbEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4o
KmVsZW1lbnQpOwogICAgICAgICBpZiAoIXRleHRGb3JtQ29udHJvbEVsZW1lbnQuaXNQbGFjZWhv
bGRlclZpc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgaWYg
KEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlckVsZW1lbnQgPSB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LnBsYWNlaG9sZGVyRWxlbWVudCgpKQpAQCAtOTEyLDkgKzkxMiw4IEBAIGJvb2wgSW50ZXJuYWxz
Ojp3YXNMYXN0Q2hhbmdlVXNlckVkaXQoRWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxk
LT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hh
bmdlV2FzVXNlckVkaXQoKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgaGFz
VGFnTmFtZSBpbnN0ZWFkIGJ1dCBXaW5kb3dzIHBvcnQgZG9lc24ndCBsaW5rIFF1YWxpZmllZE5h
bWVzIHByb3Blcmx5LgotICAgIGlmICh0ZXh0RmllbGQtPnRhZ05hbWUoKSA9PSAiVEVYVEFSRUEi
KQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KHRleHRGaWVsZCktPmxhc3RD
aGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQodGV4dEZp
ZWxkKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0
RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCiAgICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkxOSw4ICsxOTE4LDggQEAgdm9pZCBJ
bnRlcm5hbHM6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RM
YXlvdXRUYXNrcyhOb2RlKgogICAgICAgICBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwog
ICAgIGVsc2UgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIGRvY3VtZW50ID0g
dG9Eb2N1bWVudChub2RlKTsKLSAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aWZyYW1lVGFnKSkKLSAgICAgICAgZG9jdW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG5v
ZGUpLT5jb250ZW50RG9jdW1lbnQoKTsKKyAgICBlbHNlIGlmIChpc0hUTUxJRnJhbWVFbGVtZW50
KG5vZGUpKQorICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pigq
bm9kZSkuY29udGVudERvY3VtZW50KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGVjID0gVHlwZUVy
cm9yOwogICAgICAgICByZXR1cm47CkBAIC0yMDg3LDkgKzIwODYsOSBAQCBib29sIEludGVybmFs
czo6aXNTZWxlY3RQb3B1cFZpc2libGUoTm9kZSogbm9kZSkKICAgICBpZiAoIWlzSFRNTFNlbGVj
dEVsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxTZWxlY3RF
bGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUpOworICAgIEhUTUxTZWxl
Y3RFbGVtZW50JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOwog
Ci0gICAgYXV0byByZW5kZXJlciA9IHNlbGVjdC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJlbmRl
cmVyID0gc2VsZWN0LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNNZW51TGlzdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCBkMmZlN2MwZDkzN2Q4
YTRjMjlhYmY2Y2I4OWMzY2M2NjRlYjM2YmNiLi45YTFmOGY1MGE4Mjc2NGJlY2E1NWIxYmRlZTM2
ZTdmNzBhNDljNThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC04NTAsMTYgKzg1MCwxNiBAQCB2b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5h
bWUsIGNvbnN0IHhtbENoYQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoVEVNUExBVEVf
RUxFTUVOVCkKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBs
YXRlVGFnKSkKLSAgICAgICAgcHVzaEN1cnJlbnROb2RlKHRvSFRNTFRlbXBsYXRlRWxlbWVudChu
ZXdFbGVtZW50LmdldCgpKS0+Y29udGVudCgpKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVt
ZW50KCpuZXdFbGVtZW50KSkKKyAgICAgICAgcHVzaEN1cnJlbnROb2RlKGRvd25jYXN0PEhUTUxU
ZW1wbGF0ZUVsZW1lbnQ+KCpuZXdFbGVtZW50KS5jb250ZW50KCkpOwogICAgIGVsc2UKICAgICAg
ICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwogI2Vsc2UKICAgICBwdXNoQ3Vy
cmVudE5vZGUobmV3RWxlbWVudC5nZXQoKSk7CiAjZW5kaWYKIAotICAgIGlmIChuZXdFbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpCi0gICAgICAgIHRvSFRNTEh0bWxFbGVt
ZW50KG5ld0VsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgaWYgKGlzSFRN
TEh0bWxFbGVtZW50KCpuZXdFbGVtZW50KSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVt
ZW50PigqbmV3RWxlbWVudCkuaW5zZXJ0ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKCFtX3BhcnNp
bmdGcmFnbWVudCAmJiBpc0ZpcnN0RWxlbWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3Vt
ZW50U3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50SU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50SU9TLm1tCmluZGV4IGY2NjRmOTViZTkxNjEyMDVlZjBmNzg0ZjVhNzZl
ZTE4M2E3ZmU5ODkuLjJiNjViYjBhYjY3NGZlNzU3ZjUyMDgyMTliMzBkMDcwYjdkYzk1YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnRJT1MubW0KQEAgLTMxNCwxMSArMzE0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50SU9T
Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRN
TElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAg
IGlmICghaW5wdXRFbGVtZW50LT5pc1RleHQoKSkKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7CisgICAgaWYg
KCFpbnB1dEVsZW1lbnQuaXNUZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhbGxGb3Jt
RGVsZWdhdGUod2ViVmlldygpLCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTop
LCBraXQoaW5wdXRFbGVtZW50KSwga2l0KGlucHV0RWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgp
KSk7CisgICAgQ2FsbEZvcm1EZWxlZ2F0ZSh3ZWJWaWV3KCksIEBzZWxlY3RvcihkaWRGb2N1c1Rl
eHRGaWVsZDppbkZyYW1lOiksIGtpdCgmaW5wdXRFbGVtZW50KSwga2l0KGlucHV0RWxlbWVudC5k
b2N1bWVudCgpLmZyYW1lKCkpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OnNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00v
V2ViRE9NT3BlcmF0aW9ucy5tbQppbmRleCA1MGE5ZDhmZGJjZTJkYmIyNGU0ODY1MTVlZmUwZWE3
Njc0OGJjZjkxLi5iMWMyMDM1NTEyM2MwNjk0MmY3NDYzZGZlMWRjNjUwYWUxZWFjZDBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtMjE0LDcgKzIxNCw3
IEBAIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MSW5wdXRFbGVtZW50IChXZWJET01IVE1MSW5wdXRF
bGVtZW50T3BlcmF0aW9uc1ByaXZhdGUpCiAKIC0gKHZvaWQpX3NldEF1dG9maWxsZWQ6KEJPT0wp
YXV0b2ZpbGxlZAogewotICAgIHRvSFRNTElucHV0RWxlbWVudChjb3JlKChET01FbGVtZW50ICop
c2VsZikpLT5zZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOworICAgIGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KGNvcmUoKERPTUVsZW1lbnQgKilzZWxmKSktPnNldEF1dG9maWxsZWQoYXV0b2Zp
bGxlZCk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCAyMjU0ZTJlZjc5NWMxMDk2MzM1Yzk2YzEzZjFj
YmIyNTY5NWUxYzdkLi4yNGRlNjdhNzIzNTgxM2JhNWUyMjJlM2M2ZGM4ZmFhMGMwZTc1YWNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCkBAIC0yMjMsMTEgKzIyMywxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNl
ZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVs
ZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWlu
cHV0RWxlbWVudC0+aXNUZXh0KCkpCisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpOworICAgIGlmICghaW5wdXRF
bGVtZW50LmlzVGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWxsRm9ybURlbGVnYXRl
KG1fd2ViVmlldywgQHNlbGVjdG9yKGRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6KSwga2l0KGlu
cHV0RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOworICAg
IENhbGxGb3JtRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6
aW5GcmFtZTopLCBraXQoJmlucHV0RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQuZG9jdW1lbnQo
KS5mcmFtZSgpKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFu
Z2VkKEZyYW1lKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbQppbmRleCA3YjYyOTZlNzgyY2Y1ZGEyMTM0NzYyMzFmZWQzMTZkODdi
M2M5MGU3Li5hNjk0OTJjOTYwODQ0ZThkMTJjYzZiMzM2MGRmNDVlYjIyYTVhNDQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJl
Z2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBET01IVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBraXQodG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKTsKKyAgICBET01I
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oZWxlbWVudCkpOwogICAgIEZvcm1EZWxlZ2F0ZUxvZyhpbnB1dEVsZW1lbnQpOwogICAg
IENhbGxGb3JtRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkRGlkQmVnaW5F
ZGl0aW5nOmluRnJhbWU6KSwgaW5wdXRFbGVtZW50LCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5m
cmFtZSgpKSk7CiB9CkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElu
cHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7
CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVt
ZW50KTsKICAgICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHRleHRGaWVs
ZERpZEVuZEVkaXRpbmc6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIGtpdChlbGVtZW50LT5kb2N1
bWVudCgpLmZyYW1lKCkpKTsKIH0KQEAgLTczMyw3ICs3MzMsNyBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAg
IHJldHVybjsKICNlbmRpZgogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1l
bnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAgICBDYWxsRm9ybURl
bGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHRleHREaWRDaGFuZ2VJblRleHRGaWVsZDppbkZy
YW1lOiksIGlucHV0RWxlbWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwog
fQpAQCAtNzY2LDcgKzc2Niw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENv
bW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVuCiAgICAgaWYgKCFp
c0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIERP
TUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQo
ZWxlbWVudCkpOworICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9n
KGlucHV0RWxlbWVudCk7CiAgICAgaWYgKFNFTCBjb21tYW5kU2VsZWN0b3IgPSBzZWxlY3RvckZv
cktleUV2ZW50KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIENhbGxGb3JtRGVsZWdhdGVSZXR1cm5p
bmdCb29sZWFuKE5PLCBtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RmllbGQ6ZG9Db21tYW5kQnlT
ZWxlY3RvcjppbkZyYW1lOiksIGlucHV0RWxlbWVudCwgY29tbWFuZFNlbGVjdG9yLCBraXQoZWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVu
dCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElu
cHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3Jt
RGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAgICAvLyBXZSdyZSB1c2luZyB0aGUgZGVsZXRl
QmFja3dhcmQgc2VsZWN0b3IgZm9yIGFsbCBkZWxldGlvbiBvcGVyYXRpb25zIHNpbmNlIHRoZSBh
dXRvZmlsbCBjb2RlIHRyZWF0cyBhbGwgZGVsZXRpb25zIHRoZSBzYW1lIHdheS4KICAgICBDYWxs
Rm9ybURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihOTywgbV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4
dEZpZWxkOmRvQ29tbWFuZEJ5U2VsZWN0b3I6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIEBzZWxl
Y3RvcihkZWxldGVCYWNrd2FyZDopLCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7
CkBAIC03ODksNyArNzg5LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJ
blRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxUZXh0QXJlYUVsZW1l
bnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHRleHRBcmVhRWxlbWVudCA9IGtpdCh0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkp
OworICAgIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhRWxlbWVudCA9IGtpdChkb3du
Y2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9n
KHRleHRBcmVhRWxlbWVudCk7CiAgICAgQ2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxl
Y3Rvcih0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYTppbkZyYW1lOiksIHRleHRBcmVhRWxlbWVudCwg
a2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAwOWRkYzFkODVj
MzNlZTkwOTBjYzU0NTgwYzQxNTYzNzI0NWI2ZDFhLi4wOTJlNThkN2I0M2ZjYzk0NjA2ZDM4OWMw
ZjY0N2JkNGU3ODQyOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKERPTUVsZW1lbnQg
KillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilm
b3JtCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQo
RE9NRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBFbGVtZW50KiBub2RlID0gY29yZShlbGVtZW50
KTsKLSAgICByZXR1cm4gbm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgPyB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSkgOiAwOworICAgIHJldHVybiBub2RlICYmIGlzSFRNTElucHV0RWxl
bWVudChub2RlKSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cjsK
IH0KIAogLSAoQk9PTCllbGVtZW50RG9lc0F1dG9Db21wbGV0ZTooRE9NRWxlbWVudCAqKWVsZW1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAppbmRleCBiMzhjNzdhNmU2ZjYzMzAz
NWE2ZDU5MzBkOWI3MTgyMDc2YTA5Nzk2Li41OWUwZmI1MzVlNzU3NmNkODRkOTk0ZWEzYzMwMDk2
MzA1OWU3YWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCkBAIC0yNTAsNyAr
MjUwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OlVSTCgK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpyZXN1
bHQgPSBCU3RyaW5nKHRvSFRNTERvY3VtZW50KG1fZG9jdW1lbnQpLT51cmwoKSkucmVsZWFzZSgp
OworICAgICpyZXN1bHQgPSBCU3RyaW5nKGRvd25jYXN0PEhUTUxEb2N1bWVudD4obV9kb2N1bWVu
dCktPnVybCgpKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0yNjEs
OSArMjYxLDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmJv
ZHkoCiAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jID0g
dG9IVE1MRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0g
ZG93bmNhc3Q8SFRNTERvY3VtZW50PigqbV9kb2N1bWVudCk7CiAgICAgQ09NUHRyPElET01FbGVt
ZW50PiBkb21FbGVtZW50OwotICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6
OmNyZWF0ZUluc3RhbmNlKGh0bWxEb2MtPmJvZHkoKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRS
ZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGh0bWxEb2MuYm9keSgpKSk7CiAgICAg
aWYgKGRvbUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBkb21FbGVtZW50LT5RdWVyeUludGVyZmFj
ZShJSURfSURPTUhUTUxFbGVtZW50LCAodm9pZCoqKSBib2R5RWxlbWVudCk7CiAgICAgcmV0dXJu
IEVfRkFJTDsKQEAgLTMwNCw4ICszMDQsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERP
TUhUTUxEb2N1bWVudDo6Zm9ybXMoCiAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50
LT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERv
Y3VtZW50KiBodG1sRG9jID0gdG9IVE1MRG9jdW1lbnQobV9kb2N1bWVudCk7Ci0gICAgUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBmb3JtcyA9IGh0bWxEb2MtPmZvcm1zKCk7CisgICAgSFRNTERvY3Vt
ZW50JiBodG1sRG9jID0gZG93bmNhc3Q8SFRNTERvY3VtZW50PigqbV9kb2N1bWVudCk7CisgICAg
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBmb3JtcyA9IGh0bWxEb2MuZm9ybXMoKTsKICAgICAqY29s
bGVjdGlvbiA9IERPTUhUTUxDb2xsZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShmb3Jtcy5nZXQoKSk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC01NjAsNyArNTYwLDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigKICAgICAgICAgLyogW3JldHZh
bF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hU
TUxGb3JtRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBXVEY6OlN0cmluZyBhY3Rpb25TdHJpbmcg
PSB0b0hUTUxGb3JtRWxlbWVudChtX2VsZW1lbnQpLT5hY3Rpb24oKTsKKyAgICBXVEY6OlN0cmlu
ZyBhY3Rpb25TdHJpbmcgPSBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KCptX2VsZW1lbnQpLmFj
dGlvbigpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKGFjdGlvblN0cmluZykucmVsZWFzZSgpOwog
ICAgIHJldHVybiBTX09LOwogfQpAQCAtNTkwLDcgKzU5MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NSFRNTEZvcm1FbGVtZW50OjptZXRob2QoCiAgICAgICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQlNUUiogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1M
Rm9ybUVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgV1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0g
dG9IVE1MRm9ybUVsZW1lbnQobV9lbGVtZW50KS0+bWV0aG9kKCk7CisgICAgV1RGOjpTdHJpbmcg
bWV0aG9kU3RyaW5nID0gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigqbV9lbGVtZW50KS5tZXRo
b2QoKTsKICAgICAqcmVzdWx0ID0gQlN0cmluZyhtZXRob2RTdHJpbmcpLnJlbGVhc2UoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KQEAgLTcwMiwxMyArNzAyLDEzIEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMoCiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CiAKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBIVE1MU2VsZWN0RWxlbWVu
dCogc2VsZWN0RWxlbWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVt
ZW50PigqbV9lbGVtZW50KTsKIAotICAgIGlmICghc2VsZWN0RWxlbWVudC0+b3B0aW9ucygpKQor
ICAgIGlmICghc2VsZWN0RWxlbWVudC5vcHRpb25zKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7
CiAKLSAgICAqcmVzdWx0ID0gMDsKLSAgICBSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBv
cHRpb25zID0gc2VsZWN0RWxlbWVudC0+b3B0aW9ucygpOworICAgICpyZXN1bHQgPSBudWxscHRy
OworICAgIFJlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IG9wdGlvbnMgPSBzZWxlY3RFbGVt
ZW50Lm9wdGlvbnMoKTsKICAgICAqcmVzdWx0ID0gRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpj
cmVhdGVJbnN0YW5jZShvcHRpb25zLmdldCgpKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTgw
NCwxMiArODA0LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFNlbGVjdEVs
ZW1lbnQ6OmFjdGl2YXRlSXRlbUF0SW5kZXgoCiAgICAgLyogW2luXSAqLyBpbnQgaW5kZXgpCiB7
CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVs
ZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG1fZWxlbWVudCk7CisgICAgSFRNTFNlbGVjdEVs
ZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fZWxl
bWVudCk7CiAKLSAgICBpZiAoaW5kZXggPj0gc2VsZWN0RWxlbWVudC0+bGVuZ3RoKCkpCisgICAg
aWYgKGluZGV4ID49IHNlbGVjdEVsZW1lbnQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX0ZB
SUw7CiAKLSAgICBzZWxlY3RFbGVtZW50LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KTsKKyAgICBz
ZWxlY3RFbGVtZW50LnNldFNlbGVjdGVkSW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBTX09LOwog
fQogCkBAIC04NjAsOSArODYwLDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
T3B0aW9uRWxlbWVudDo6dGV4dCgKIAogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VS
VChpc0hUTUxPcHRpb25FbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhU
TUxPcHRpb25FbGVtZW50JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCptX2VsZW1lbnQpOwogCi0gICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+
dGV4dCgpKS5yZWxlYXNlKCk7CisgICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC50
ZXh0KCkpLnJlbGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTg5Nyw5ICs4
OTcsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxPcHRpb25FbGVtZW50Ojps
YWJlbCgKIAogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxPcHRpb25F
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50
ID0gdG9IVE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25FbGVtZW50
JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQp
OwogCi0gICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+bGFiZWwoKSkucmVsZWFz
ZSgpOworICAgICpyZXN1bHQgPSBCU3RyaW5nKG9wdGlvbkVsZW1lbnQubGFiZWwoKSkucmVsZWFz
ZSgpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIApAQCAtOTkxLDExICs5OTEsMTEgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKAogewogICAg
IGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpyZXN1bHQgPSAw
OworICAgICpyZXN1bHQgPSBudWxscHRyOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1M
SW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1l
bnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQp
OwogICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKLSAgICBkb21FbGVtZW50LmFk
b3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZShpbnB1dEVsZW1lbnQtPmZvcm0o
KSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3Rh
bmNlKGlucHV0RWxlbWVudC5mb3JtKCkpKTsKICAgICBpZiAoZG9tRWxlbWVudCkKICAgICAgICAg
cmV0dXJuIGRvbUVsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NSFRNTEVsZW1lbnQsICh2
b2lkKiopIHJlc3VsdCk7CiAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTEwNzUsOCArMTA3NSw4IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6ZGlzYWJsZWQo
CiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQk9PTCogcmVzdWx0KQogewogICAgIEFTU0VS
VChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQp
OwotICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8g
VFJVRSA6IEZBTFNFOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVs
ZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAgICAgCkBAIC0xMTE5LDggKzExMTksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlYWRPbmx5KAogICAgICAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJPT0wqIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAqcmVzdWx0ID0gaW5w
dXRFbGVtZW50LT5pc1JlYWRPbmx5KCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxl
bWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVu
dCk7CisgICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5pc1JlYWRPbmx5KCkgPyBUUlVFIDogRkFM
U0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0xMTg0LDkgKzExODQsOSBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUoCiAgICAg
ICAgIC8qIFtpbl0gKi8gQlNUUiB0eXBlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNI
VE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVs
ZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1l
bnQpOwogICAgIFdURjo6U3RyaW5nIHR5cGVTdHJpbmcodHlwZSwgU3lzU3RyaW5nTGVuKHR5cGUp
KTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFR5cGUodHlwZVN0cmluZyk7CisgICAgaW5wdXRFbGVt
ZW50LnNldFR5cGUodHlwZVN0cmluZyk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0x
MjA4LDggKzEyMDgsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVs
ZW1lbnQ6OnZhbHVlKAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkK
IHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQp
KTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1l
bnQobV9lbGVtZW50KTsKLSAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlucHV0RWxlbWVu
dC0+dmFsdWUoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICBXVEY6OlN0cmluZyB2YWx1ZVN0
cmluZyA9IGlucHV0RWxlbWVudC52YWx1ZSgpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKHZhbHVl
U3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgaWYgKHZhbHVlU3RyaW5nLmxlbmd0aCgpICYmICEqcmVz
dWx0KQogICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKQEAgLTEyMjAsOCArMTIyMCw4IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUo
CiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50
ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1
dEVsZW1lbnQtPnNldFZhbHVlKFN0cmluZygoVUNoYXIqKSB2YWx1ZSwgU3lzU3RyaW5nTGVuKHZh
bHVlKSkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZShT
dHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKICAgICByZXR1cm4g
U19PSzsKIH0KIApAQCAtMTIzMCwxNiArMTIzMCwxNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcigKIHsKICAgICBBU1NFUlQo
bV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudCht
X2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0
aWNfY2FzdDxVQ2hhcio+KHZhbHVlKSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOworICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpt
X2VsZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZUZvclVzZXIoU3RyaW5nKHN0YXRp
Y19jYXN0PFVDaGFyKj4odmFsdWUpLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVu
dDo6c2VsZWN0KCB2b2lkKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRF
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2VsZWN0
KCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50LnNlbGVjdCgpOwogICAg
IHJldHVybiBTX09LOwogfQogICAgIApAQCAtMTI1Myw4ICsxMjUzLDggQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCgKICAg
ICAvKiBbaW5dICovIGxvbmcgc3RhcnQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hU
TUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgaW5wdXRFbGVtZW50
LT5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5w
dXRFbGVtZW50LnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKICAgICByZXR1cm4gU19PSzsKIH0K
IApAQCAtMTI2Miw4ICsxMjYyLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
SW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIGxv
bmcgKnN0YXJ0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50
KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpzdGFydCA9IGlucHV0RWxlbWVudC0+c2Vs
ZWN0aW9uU3RhcnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICAqc3RhcnQgPSBpbnB1dEVs
ZW1lbnQuc2VsZWN0aW9uU3RhcnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI3MSw4
ICsxMjcxLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRTZWxlY3Rpb25FbmQoCiAgICAgLyogW2luXSAqLyBsb25nIGVuZCkKIHsKICAgICBBU1NF
UlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50
KTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKICAgICByZXR1
cm4gU19PSzsKIH0KIApAQCAtMTI4MCw4ICsxMjgwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoCiAgICAgLyogW3JldHZhbF1b
b3V0XSAqLyBsb25nICplbmQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1
dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgKmVuZCA9IGlucHV0RWxlbWVu
dC0+c2VsZWN0aW9uRW5kKCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKmVuZCA9IGlucHV0
RWxlbWVudC5zZWxlY3Rpb25FbmQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI5Miw4
ICsxMjkyLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50
Ojppc1RleHRGaWVsZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNI
VE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQgPSBp
bnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxl
bWVudCk7CisgICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5pc1RleHRGaWVsZCgpID8gVFJVRSA6
IEZBTFNFOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMzI4LDEzICsxMzI4LDEzIEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6cmVwbGFjZUNoYXJh
Y3RlcnNJblJhbmdlKAogCiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50
KTsKIAotICAgIFN0cmluZyBuZXdWYWx1ZSA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAgICBT
dHJpbmcgbmV3VmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWUoKTsKICAgICBTdHJpbmcgd2ViQ29y
ZVJlcGxhY2VtZW50U3RyaW5nKHN0YXRpY19jYXN0PFVDaGFyKj4ocmVwbGFjZW1lbnRTdHJpbmcp
LCBTeXNTdHJpbmdMZW4ocmVwbGFjZW1lbnRTdHJpbmcpKTsKICAgICBuZXdWYWx1ZS5yZXBsYWNl
KHN0YXJ0VGFyZ2V0LCBlbmRUYXJnZXQgLSBzdGFydFRhcmdldCwgd2ViQ29yZVJlcGxhY2VtZW50
U3RyaW5nKTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlKG5ld1ZhbHVlKTsKLSAgICBpbnB1
dEVsZW1lbnQtPnNldFNlbGVjdGlvblJhbmdlKGluZGV4LCBuZXdWYWx1ZS5sZW5ndGgoKSk7Cisg
ICAgaW5wdXRFbGVtZW50LnNldFZhbHVlKG5ld1ZhbHVlKTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0
U2VsZWN0aW9uUmFuZ2UoaW5kZXgsIG5ld1ZhbHVlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBT
X09LOwogfQpAQCAtMTM0NSw5ICsxMzQ1LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZFJhbmdlKAogewogICAgIEFTU0VSVChtX2VsZW1l
bnQpOwogICAgIEFTU0VSVChpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVu
dCk7Ci0gICAgKnN0YXJ0ID0gaW5wdXRFbGVtZW50LT5zZWxlY3Rpb25TdGFydCgpOwotICAgICpl
bmQgPSBpbnB1dEVsZW1lbnQtPnNlbGVjdGlvbkVuZCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwor
ICAgICpzdGFydCA9IGlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCgpOworICAgICplbmQgPSBp
bnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEz
NTYsOCArMTM1Niw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxl
bWVudDo6c2V0QXV0b2ZpbGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NF
UlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0
RWxlbWVudC0+c2V0QXV0b2ZpbGxlZCghIWZpbGxlZCk7CisgICAgSFRNTElucHV0RWxlbWVudCYg
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7Cisg
ICAgaW5wdXRFbGVtZW50LnNldEF1dG9maWxsZWQoISFmaWxsZWQpOwogICAgIHJldHVybiBTX09L
OwogfQogCkBAIC0xMzY2LDggKzEzNjYsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERP
TUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2ZpbGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50
KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQp
OwotICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpID8gVFJVRSA6IEZB
TFNFOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNB
dXRvZmlsbGVkKCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEz
ODQsNyArMTM4NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxl
bWVudDo6aXNVc2VyRWRpdGVkKAogICAgIEJPT0wgdGV4dEZpZWxkID0gRkFMU0U7CiAgICAgaWYg
KEZBSUxFRChpc1RleHRGaWVsZCgmdGV4dEZpZWxkKSkgfHwgIXRleHRGaWVsZCkKICAgICAgICAg
cmV0dXJuIFNfT0s7Ci0gICAgaWYgKHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpLT5sYXN0
Q2hhbmdlV2FzVXNlckVkaXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km1fZWxlbWVudCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQgPSBU
UlVFOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTQyOCw5ICsxNDI4LDkgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpmb3JtKAogICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOwogICAgICpyZXN1bHQgPSAwOwogICAgIEFTU0VSVChtX2VsZW1lbnQg
JiYgaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHRleHRhcmVhRWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQp
OworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxlbWVudD4g
ZG9tRWxlbWVudDsKLSAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVh
dGVJbnN0YW5jZSh0ZXh0YXJlYUVsZW1lbnQtPmZvcm0oKSkpOworICAgIGRvbUVsZW1lbnQuYWRv
cHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKHRleHRhcmVhRWxlbWVudC5mb3Jt
KCkpKTsKICAgICBpZiAoZG9tRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnQtPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JRE9NSFRNTEVsZW1lbnQsICh2b2lkKiopIHJlc3VsdCk7CiAgICAg
cmV0dXJuIEVfRkFJTDsKQEAgLTE1NDUsOCArMTU0NSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6dmFsdWUoCiAgICAgICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQlNUUiogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1M
VGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRl
eHRhcmVhRWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOwotICAgIFdU
Rjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gdGV4dGFyZWFFbGVtZW50LT52YWx1ZSgpOworICAgIEhU
TUxUZXh0QXJlYUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIFdURjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gdGV4
dGFyZWFFbGVtZW50LnZhbHVlKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcodmFsdWVTdHJpbmcp
LnJlbGVhc2UoKTsKICAgICBpZiAodmFsdWVTdHJpbmcubGVuZ3RoKCkgJiYgISpyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwpAQCAtMTU1NywxNiArMTU1NywxNiBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKAog
ICAgICAgICAvKiBbaW5dICovIEJTVFIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAm
JiBpc0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTFRleHRBcmVhRWxl
bWVudCogdGV4dGFyZWFFbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCk7
Ci0gICAgdGV4dGFyZWFFbGVtZW50LT5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5
c1N0cmluZ0xlbih2YWx1ZSkpKTsKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICB0
ZXh0YXJlYUVsZW1lbnQuc2V0VmFsdWUoU3RyaW5nKChVQ2hhciopIHZhbHVlLCBTeXNTdHJpbmdM
ZW4odmFsdWUpKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCiBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdCggdm9pZCkKIHsKICAgICBB
U1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpKTsKLSAg
ICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0YXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVs
ZW1lbnQobV9lbGVtZW50KTsKLSAgICB0ZXh0YXJlYUVsZW1lbnQtPnNlbGVjdCgpOworICAgIEhU
TUxUZXh0QXJlYUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIHRleHRhcmVhRWxlbWVudC5zZWxlY3QoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTU4MCw3ICsxNTgwLDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojppc1VzZXJFZGl0ZWQoCiAKICAgICAq
cmVzdWx0ID0gRkFMU0U7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJlYUVs
ZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgaWYgKHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1l
bnQpLT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTFRleHRB
cmVhRWxlbWVudD4oKm1fZWxlbWVudCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAg
ICpyZXN1bHQgPSBUUlVFOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTYwNiwxMCArMTYwNiwx
MCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJRnJhbWVFbGVtZW50Ojpjb250
ZW50RnJhbWUoCiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
Ci0gICAgKnJlc3VsdCA9IDA7CisgICAgKnJlc3VsdCA9IG51bGxwdHI7CiAgICAgQVNTRVJUKG1f
ZWxlbWVudCk7Ci0gICAgSFRNTElGcmFtZUVsZW1lbnQqIGlGcmFtZUVsZW1lbnQgPSB0b0hUTUxJ
RnJhbWVFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgQ09NUHRyPElXZWJGcmFtZT4gd2ViRnJhbWUg
PSBraXQoaUZyYW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkpOworICAgIEhUTUxJRnJhbWVFbGVt
ZW50JiBpRnJhbWVFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KCptX2VsZW1l
bnQpOworICAgIENPTVB0cjxJV2ViRnJhbWU+IHdlYkZyYW1lID0ga2l0KGlGcmFtZUVsZW1lbnQu
Y29udGVudEZyYW1lKCkpOwogICAgIGlmICghd2ViRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZB
SUw7CiAgICAgcmV0dXJuIHdlYkZyYW1lLmNvcHlSZWZUbyhyZXN1bHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJh
bWUuY3BwCmluZGV4IDc4OGEyZTgwZjFjZmE5ZTgzZDIzNTM5Yzg3MDcyNWY4YmQyZjEyNDMuLjhj
NmM0NWMzMjljOTgyZTNhMzUzZDE1MGVlNjE4ZDVhMGNkOGM5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFt
ZS5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgRWxlbWVudCAqZWxlbWVudEZyb21ET01F
bGVtZW50KElET01FbGVtZW50ICplbGVtZW50KQogc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9y
bUVsZW1lbnRGcm9tRE9NRWxlbWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBpZiAo
IWVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIElET01FbGVtZW50UHJpdmF0ZSogZWxlUHJpdjsKICAgICBIUkVTVUxUIGhyID0gZWxlbWVu
dC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lET01FbGVtZW50UHJpdmF0ZSwgKHZvaWQqKikgJmVsZVBy
aXYpOwpAQCAtMjAzLDE1ICsyMDMsMTUgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVs
ZW1lbnRGcm9tRE9NRWxlbWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAgICAgaHIgPSBl
bGVQcml2LT5jb3JlRWxlbWVudCgodm9pZCoqKSZlbGUpOwogICAgICAgICBlbGVQcml2LT5SZWxl
YXNlKCk7CiAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGVsZSAmJiBpc0hUTUxGb3JtRWxl
bWVudChlbGUpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVtZW50KGVsZSk7Cisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGUpOwogICAgIH0K
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50
KQogewogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgSURPTUVsZW1lbnRQcml2YXRlKiBlbGVQcml2OwogICAgIEhSRVNV
TFQgaHIgPSBlbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnRQcml2YXRlLCAo
dm9pZCoqKSAmZWxlUHJpdik7CkBAIC0yMjAsOSArMjIwLDkgQEAgc3RhdGljIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQog
ICAgICAgICBociA9IGVsZVByaXYtPmNvcmVFbGVtZW50KCh2b2lkKiopJmVsZSk7CiAgICAgICAg
IGVsZVByaXYtPlJlbGVhc2UoKTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxlICYm
IGlzSFRNTElucHV0RWxlbWVudChlbGUpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0
RWxlbWVudChlbGUpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KGVsZSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiAvLyBXZWJGcmFtZVByaXZhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlLmNwcAppbmRleCAxZGMwYjRiNTAzMDc0YzJiMWE1NTNjZDg5MDBiZDUxYzUy
YWU2OGQ0Li5jNjEyYzJjMGJhM2IyZjAwM2JmYWRmOGQyNWVlNWRlNzYwNGYzMjRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTE5OSw1NSAr
MTk5LDU1IEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjp2aXNpYmxlUmFuZ2UoKSBjCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjpzZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKSkKKyAg
ICBpZiAoIWlzSFRNTElucHV0RWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgdG9IVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSktPnNldFZhbHVlRm9yVXNlcih2YWx1
ZSk7CisgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0VmFsdWVGb3JV
c2VyKHZhbHVlKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElu
cHV0RWxlbWVudEF1dG9maWxsZWQoKSBjb25zdAogewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVt
ZW50KG1fbm9kZS5nZXQoKSkpCisgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVt
ZW50KG1fbm9kZS5nZXQoKSktPmlzQXV0b2ZpbGxlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PigqbV9ub2RlKS5pc0F1dG9maWxsZWQoKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKGJvb2wg
ZmlsbGVkKQogewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkpCisg
ICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHRvSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT5zZXRBdXRvZmlsbGVkKGZpbGxl
ZCk7CisgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0QXV0b2ZpbGxl
ZChmaWxsZWQpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6aHRtbElucHV0
RWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpCiB7Ci0gICAgaWYgKCFpc0hUTUxJbnB1dEVs
ZW1lbnQobV9ub2RlLmdldCgpKSkKKyAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudCgqbV9ub2Rl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVu
dChtX25vZGUuZ2V0KCkpLT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7
CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFFbGVtZW50
TGFzdENoYW5nZVdhc1VzZXJFZGl0KCkKIHsKLSAgICBpZiAoIWlzSFRNTFRleHRBcmVhRWxlbWVu
dChtX25vZGUuZ2V0KCkpKQorICAgIGlmICghaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX25vZGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVt
ZW50KG1fbm9kZS5nZXQoKSktPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIHJldHVybiBk
b3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9ub2RlKS5sYXN0Q2hhbmdlV2FzVXNlckVk
aXQoKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzVGV4dEZpZWxkKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkgJiYg
dG9IVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSktPmlzVGV4dCgpOworICAgIHJldHVybiBp
c0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km1fbm9kZSkuaXNUZXh0KCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxUYWJsZUNlbGxFbGVtZW50Q2VsbEFi
b3ZlKCkKIHsKICAgICBpZiAoIW1fbm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBnZXRPckNyZWF0
ZShzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KG1fbm9kZS5nZXQoKSktPmNlbGxB
Ym92ZSgpKTsKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQmPigqbV9ub2RlKS5jZWxsQWJvdmUoKSk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViRnJh
bWU+IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6ZG9jdW1lbnRGcmFtZSgpCkBAIC0yNzYsMTAg
KzI3NiwxMCBAQCBQYXNzUmVmUHRyPFdlYkZyYW1lPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6
Omh0bWxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoKQogCiBQYXNzUmVmUHRyPFdlYkZyYW1lPiBJ
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCkK
IHsKLSAgICBpZiAoIW1fbm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQorICAgIGlmICghaXNI
VE1MSUZyYW1lRWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBGcmFtZSogZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG1fbm9kZS5nZXQoKSktPmNvbnRl
bnRGcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50
PigqbV9ub2RlKS5jb250ZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCmluZGV4IGYw
NWZkMjUzOWI1ZTA4NDZhYTRkODcwMzJiZjM5ZGZjYzkzZmZkY2EuLjBjNGE2Y2I5ODFjOTA0NWQx
ZWJiYjg3Y2UyMjc0NGU1ZDI1ZDA0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRp
b24ubW0KQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uOjp1
cGRhdGVHZW9tZXRyeSgpCiAKIHZvaWQgUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6Y29tbWl0
KCkKIHsKLSAgICBjaG9pY2VBbm5vdGF0aW9uKCkuc3RyaW5nVmFsdWUgPSB0b0hUTUxTZWxlY3RF
bGVtZW50KGVsZW1lbnQoKSktPnZhbHVlKCk7CisgICAgY2hvaWNlQW5ub3RhdGlvbigpLnN0cmlu
Z1ZhbHVlID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KGVsZW1lbnQoKSktPnZhbHVlKCk7
CiAKICAgICBQREZQbHVnaW5Bbm5vdGF0aW9uOjpjb21taXQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRp
b24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRl
eHRBbm5vdGF0aW9uLm1tCmluZGV4IGE1ZDJmNWU2YmI5MzUwMWViNzYwM2U2NTIzOTNjZTE0Yjkw
MDhkZWQuLmUyNDBmYzgwYTRmYzc4OGVhMWIwYzg0OTEwMzJmYTE3NjMyYjkxOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFu
bm90YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbQpAQCAtMTA1LDkgKzEwNSw5IEBAIFBhc3NSZWZQdHI8
RWxlbWVudD4gUERGUGx1Z2luVGV4dEFubm90YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50
KCkKICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
VGV4dEFsaWduLCBjc3NBbGlnbm1lbnRWYWx1ZUZvck5TVGV4dEFsaWdubWVudCh0ZXh0QW5ub3Rh
dGlvbi5hbGlnbm1lbnQpKTsKIAogICAgIGlmIChpc011bHRpbGluZSkKLSAgICAgICAgdG9IVE1M
VGV4dEFyZWFFbGVtZW50KHN0eWxlZEVsZW1lbnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5z
dHJpbmdWYWx1ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHN0eWxl
ZEVsZW1lbnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CiAgICAgZWxz
ZQotICAgICAgICB0b0hUTUxJbnB1dEVsZW1lbnQoc3R5bGVkRWxlbWVudCktPnNldFZhbHVlKHRl
eHRBbm5vdGF0aW9uLnN0cmluZ1ZhbHVlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oc3R5bGVkRWxlbWVudCktPnNldFZhbHVlKHRleHRBbm5vdGF0aW9uLnN0cmluZ1ZhbHVl
KTsKIAogICAgIHJldHVybiBlbGVtZW50OwogfQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUERG
UGx1Z2luVGV4dEFubm90YXRpb246OmNvbW1pdCgpCiAKIFN0cmluZyBQREZQbHVnaW5UZXh0QW5u
b3RhdGlvbjo6dmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KGVsZW1lbnQoKSktPnZhbHVlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KCkpLT52YWx1ZSgpOwogfQogCiBib29sIFBE
RlBsdWdpblRleHRBbm5vdGF0aW9uOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMTAz
Zjg1NzYyYzBiYjkxYjgyNjM4NzBmMjc2ZjNkYzQ1ZWJkMjU1OC4uNzYzODM2YmY0MTYzMTNiMWYx
ZDQ3YjQyNzViNGZhMTk1ODQ5OGY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6aW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgfQogCiAjaWYgRU5BQkxFKFBSSU1BUllfU05B
UFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBw
bHVnSW5JbWFnZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVt
ZW50LmdldCgpKTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQuZ2V0
KCkpOwogICAgIG1fZGlkUGx1Z0luU3RhcnRPZmZTY3JlZW4gPSAhbV93ZWJQYWdlLT5wbHVnSW5J
bnRlcnNlY3RzU2VhcmNoUmVjdCgqcGx1Z0luSW1hZ2VFbGVtZW50KTsKICNlbmRpZgogICAgIG1f
cGx1Z2luLT5pbml0aWFsaXplKHRoaXMsIG1fcGFyYW1ldGVycyk7CkBAIC0xNzEzLDcgKzE3MTMs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiAgICAgQVNT
RVJUKG1fcGx1Z2luKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9I
RVVSSVNUSUMpCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50
ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG1fcGx1Z2luRWxlbWVudC5nZXQoKSk7CisgICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TFBsdWdJbkltYWdlRWxlbWVudD4obV9wbHVnaW5FbGVtZW50LmdldCgpKTsKICAgICBib29sIGlz
UGx1Z0luT25TY3JlZW4gPSBtX3dlYlBhZ2UtPnBsdWdJbkludGVyc2VjdHNTZWFyY2hSZWN0KCpw
bHVnSW5JbWFnZUVsZW1lbnQpOwogICAgIGJvb2wgcGx1Z0luQ2FtZU9uU2NyZWVuID0gaXNQbHVn
SW5PblNjcmVlbiAmJiBtX2RpZFBsdWdJblN0YXJ0T2ZmU2NyZWVuOwogICAgIGJvb2wgc25hcHNo
b3RGb3VuZCA9IGZhbHNlOwpAQCAtMTc4MSw3ICsxNzgxLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
bHVnaW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKCkKIAogICAgIG1fZGlkUmVjZWl2ZVVzZXJJ
bnRlcmFjdGlvbiA9IHRydWU7CiAKLSAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
KiBwbHVnSW5JbWFnZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5F
bGVtZW50LmdldCgpKTsKKyAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVn
SW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdp
bkVsZW1lbnQuZ2V0KCkpOwogICAgIFN0cmluZyBwYWdlT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgp
Lmhvc3QoKTsKICAgICBTdHJpbmcgcGx1Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5s
b2FkZWRVcmwoKS5ob3N0KCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVt
ZW50LT5sb2FkZWRNaW1lVHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGYzYzli
ZGQ1ZWYwZjU0NDA4MzRmYWZmOWU3YzI0MDFjYjEzOGNiMjUuLmI1MTc2M2VhNTBkNzE0NDQ0Yzcz
NmU4ZjEwZTM0YTI2MzhlZmRkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTE4MSwx
MyArMTgxLDEzIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQo
RWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
dG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1Rl
eHQoKSkKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQuaXNUZXh0KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpm
cm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3
ZWJGcmFtZSk7Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS5kaWRGb2N1
c1RleHRGaWVsZChtX3BhZ2UsIGlucHV0RWxlbWVudCwgd2ViRnJhbWUpOworICAgIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuZGlkRm9jdXNUZXh0RmllbGQobV9wYWdlLCAmaW5w
dXRFbGVtZW50LCB3ZWJGcmFtZSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2Vk
RnJhbWVDaGFuZ2VkKEZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBi
ZmY3NmYyZTRhYjRkN2MyYjE4YTZmMjEwM2ZkMDUzYjY1YzA2Zjc0Li4xMjE0MTdlOWRhNjBhODVi
MzM3MDllZWM5MDRjNjFhY2FmNjBlZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0z
MDEsNyArMzAxLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRp
dGluZyhFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
Ojpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VS
VCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRl
eHRGaWVsZERpZEJlZ2luRWRpdGluZyhtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50
KSwgd2ViRnJhbWUpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkudGV4
dEZpZWxkRGlkQmVnaW5FZGl0aW5nKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
ZWxlbWVudCksIHdlYkZyYW1lKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVs
ZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50
KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVt
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmco
bV9wYWdlLCB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCksIHdlYkZyYW1lKTsKKyAgICBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9w
YWdlLCBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUpOwogfQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQq
IGVsZW1lbnQpCkBAIC0zMjUsNyArMzI1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJG
cmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1l
KCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
Rm9ybUNsaWVudCgpLnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0
RWxlbWVudChlbGVtZW50KSwgd2ViRnJhbWUsIGluaXRpYXRlZEJ5VXNlclR5cGluZyk7CisgICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0Rmll
bGQobV9wYWdlLCBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUs
IGluaXRpYXRlZEJ5VXNlclR5cGluZyk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0
RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQpAQCAtMzM2LDcgKzMzNiw3IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBl
bGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1l
KCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAK
LSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHREaWRDaGFuZ2VJblRl
eHRBcmVhKG1fcGFnZSwgdG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpLCB3ZWJGcmFtZSk7
CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYShtX3BhZ2UsIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLCB3
ZWJGcmFtZSk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDAzLDcgKzQwMyw3IEBAIGJv
b2wgV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCog
ZWxlbWVudCwgS2V5Ym9hcmRFdmVuCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6
OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CiAgICAgQVNTRVJU
KHdlYkZyYW1lKTsKIAotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVu
dCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxl
bWVudChlbGVtZW50KSwgdG9JbnB1dEZpZWxkQWN0aW9uKGFjdGlvblR5cGUpLCB3ZWJGcmFtZSk7
CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuc2hvdWxkUGVy
Zm9ybUFjdGlvbkluVGV4dEZpZWxkKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
ZWxlbWVudCksIHRvSW5wdXRGaWVsZEFjdGlvbihhY3Rpb25UeXBlKSwgd2ViRnJhbWUpOwogfQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVt
ZW50KiBlbGVtZW50KQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0
ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50
KCkuZnJhbWUoKSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKIAotICAgIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVGb3JtQ2xpZW50KCkuc2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxkKG1fcGFn
ZSwgdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJbnB1
dEZpZWxkQWN0aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZCht
X3BhZ2UsIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLCB0b0lucHV0RmllbGRB
Y3Rpb24oV0tJbnB1dEZpZWxkQWN0aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKIH0K
IAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2Vs
ZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUgdHlwZSkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlNjJhY2ZkOWM0NmE4
NTUxYzNlODQ0NjJlYTBhMTJlYmVjMTJiZjg2Li41YTdiMmMzMWQ1M2Y0Mzk0ZTljY2ZmYmU5NWIx
ZGJjYzg4YjdmNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC02MjQsNyArNjI0LDcgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6
OmNyZWF0ZVBsdWdpbihXZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHUKICAg
ICBTdHJpbmcgcGFnZVVSTFN0cmluZyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKIAogI2lmIEVOQUJMRShQUklN
QVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgSFRNTFBsdWdJbkltYWdlRWxl
bWVudCYgcGx1Z2luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCpwbHVn
aW5FbGVtZW50KTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5JbWFnZUVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqcGx1Z2luRWxlbWVudCk7CiAg
ICAgdW5zaWduZWQgcGx1Z2luQXJlYSA9IDA7CiAgICAgUGx1Z2luUHJvY2Vzc1R5cGUgcHJvY2Vz
c1R5cGUgPSBwbHVnaW5FbGVtZW50LT5kaXNwbGF5U3RhdGUoKSA9PSBIVE1MUGx1Z0luRWxlbWVu
dDo6V2FpdGluZ0ZvclNuYXBzaG90ICYmICEocGx1Z0luSXNQcmltYXJ5U2l6ZShwbHVnaW5JbWFn
ZUVsZW1lbnQsIHBsdWdpbkFyZWEpICYmICFwbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdChwbHVn
aW5JbWFnZUVsZW1lbnQpKSA/IFBsdWdpblByb2Nlc3NUeXBlU25hcHNob3QgOiBQbHVnaW5Qcm9j
ZXNzVHlwZU5vcm1hbDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMTViOWM5MGFlOTRkZGI2Yjc0MTMyYTI4
NzYxODJmOTliNDkyNTFhYy4uNjVlNmU5ZDI1ZDM3MTVkY2E4MDUyNTY4YWNmZmIzYzUyZjRhMmY1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQpAQCAtNjEyLDkgKzYxMiw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoIW1fYXNzaXN0ZWROb2Rl
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCAqZWxlbWVudCA9IHRvSFRN
TElucHV0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIGVsZW1lbnQtPnNl
dFZhbHVlKHZhbHVlLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hU
TUxJbnB1dEVsZW1lbnQoKm1fYXNzaXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2Rl
KTsKKyAgICAgICAgZWxlbWVudC5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5n
ZUV2ZW50KTsKICAgICB9CiAgICAgLy8gRklYTUU6IHNob3VsZCBhbHNvIGhhbmRsZSB0aGUgY2Fz
ZSBvZiBIVE1MU2VsZWN0RWxlbWVudC4KIH0KQEAgLTYyMywxOCArNjIzLDE4IEBAIHZvaWQgV2Vi
UGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiB7CiAgICAg
aWYgKCFtX2Fzc2lzdGVkTm9kZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc0hUTUxJbnB1
dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQgKmVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwot
ICAgICAgICBlbGVtZW50LT5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBU
SU9OLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQoKm1fYXNzaXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAg
ICAgZWxlbWVudC5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBE
aXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOwogICAgIH0KIH0KIAogdm9pZCBXZWJQYWdlOjpz
ZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVs
dGlwbGVTZWxlY3Rpb24pCiB7Ci0gICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNIVE1MU2Vs
ZWN0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpCisgICAgaWYgKCFtX2Fzc2lzdGVkTm9k
ZSB8fCAhaXNIVE1MU2VsZWN0RWxlbWVudCgqbV9hc3Npc3RlZE5vZGUpCiAgICAgICAgIHJldHVy
bjsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudCht
X2Fzc2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgc2VsZWN0LT5vcHRpb25TZWxlY3RlZEJ5VXNlcihp
bmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CisgICAgSFRNTFNlbGVjdEVsZW1l
bnQmIHNlbGVjdCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUp
OworICAgIHNlbGVjdC5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0
aXBsZVNlbGVjdGlvbik7CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTk5MywxMCAr
MTk5MywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBc3Npc3RhYmxlTm9kZShOb2RlKiBub2Rl
KQogICAgIGlmIChpc0hUTUxTZWxlY3RFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4g
IXRvSFRNTFRleHRBcmVhRWxlbWVudChub2RlKS0+aXNSZWFkT25seU5vZGUoKTsKKyAgICAgICAg
cmV0dXJuICFkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Pigqbm9kZSkuaXNSZWFkT25seU5v
ZGUoKTsKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAg
IHJldHVybiAhZWxlbWVudC0+aXNSZWFkT25seU5vZGUoKSAmJiAoZWxlbWVudC0+aXNUZXh0Rmll
bGQoKSB8fCBlbGVtZW50LT5pc0RhdGVGaWVsZCgpIHx8IGVsZW1lbnQtPmlzRGF0ZVRpbWVMb2Nh
bEZpZWxkKCkgfHwgZWxlbWVudC0+aXNNb250aEZpZWxkKCkgfHwgZWxlbWVudC0+aXNUaW1lRmll
bGQoKSk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5pc1JlYWRPbmx5
Tm9kZSgpICYmIChlbGVtZW50LmlzVGV4dEZpZWxkKCkgfHwgZWxlbWVudC5pc0RhdGVGaWVsZCgp
IHx8IGVsZW1lbnQuaXNEYXRlVGltZUxvY2FsRmllbGQoKSB8fCBlbGVtZW50LmlzTW9udGhGaWVs
ZCgpIHx8IGVsZW1lbnQuaXNUaW1lRmllbGQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCk7CkBAIC0yMDY2LDgxICsyMDY2LDgxIEBAIHZvaWQgV2ViUGFn
ZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGlu
Zm9ybWF0aW9uKQogICAgIGluZm9ybWF0aW9uLmhhc05leHROb2RlID0gaGFzRm9jdXNhYmxlRWxl
bWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSwgbV9wYWdlLmdldCgpLCB0cnVlKTsKICAgICBpbmZv
cm1hdGlvbi5oYXNQcmV2aW91c05vZGUgPSBoYXNGb2N1c2FibGVFbGVtZW50KG1fYXNzaXN0ZWRO
b2RlLmdldCgpLCBtX3BhZ2UuZ2V0KCksIGZhbHNlKTsKIAotICAgIGlmIChpc0hUTUxTZWxlY3RF
bGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MU2VsZWN0RWxlbWVu
dCogZWxlbWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwor
ICAgIGlmIChpc0hUTUxTZWxlY3RFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkgeworICAgICAgICBI
VE1MU2VsZWN0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigq
bV9hc3Npc3RlZE5vZGUpOwogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0
VHlwZTo6U2VsZWN0OwotICAgICAgICBzaXplX3QgY291bnQgPSBlbGVtZW50LT5saXN0SXRlbXMo
KS5zaXplKCk7CisgICAgICAgIHNpemVfdCBjb3VudCA9IGVsZW1lbnQubGlzdEl0ZW1zKCkuc2l6
ZSgpOwogICAgICAgICBpbnQgcGFyZW50R3JvdXBJRCA9IDA7CiAgICAgICAgIC8vIFRoZSBwYXJl
bnQgZ3JvdXAgSUQgaW5kaWNhdGVzIHRoZSBncm91cCB0aGUgb3B0aW9uIGJlbG9uZ3MgdG8gYW5k
IGlzIDAgZm9yIGdyb3VwIGVsZW1lbnRzLgogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9u
IGVsZW1lbnRzIGluIGJldHdlZW4gZ3JvdXBzLCB0aGV5IGFyZSBnaXZlbiBpdCdzIG93biBncm91
cCBpZGVudGlmaWVyLgogICAgICAgICAvLyBJZiBhIHNlbGVjdCBkb2VzIG5vdCBoYXZlIGdyb3Vw
cywgYWxsIHRoZSBvcHRpb24gZWxlbWVudHMgaGF2ZSBncm91cCBJRCAwLgogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50
KiBpdGVtID0gZWxlbWVudC0+bGlzdEl0ZW1zKClbaV07CisgICAgICAgICAgICBIVE1MRWxlbWVu
dCogaXRlbSA9IGVsZW1lbnQubGlzdEl0ZW1zKClbaV07CiAgICAgICAgICAgICBpZiAoaXNIVE1M
T3B0aW9uRWxlbWVudChpdGVtKSkgewotICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50
KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGl0ZW0pOwotICAgICAgICAgICAgICAgIGlu
Zm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0ZW0ob3B0aW9uLT50ZXh0KCks
IGZhbHNlLCBwYXJlbnRHcm91cElELCBvcHRpb24tPnNlbGVjdGVkKCksIG9wdGlvbi0+ZmFzdEhh
c0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cikpKTsKKyAgICAgICAg
ICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCppdGVtKTsKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25z
LmFwcGVuZChPcHRpb25JdGVtKG9wdGlvbi50ZXh0KCksIGZhbHNlLCBwYXJlbnRHcm91cElELCBv
cHRpb24uc2VsZWN0ZWQoKSwgb3B0aW9uLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpkaXNhYmxlZEF0dHIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSFRNTE9wdEdy
b3VwRWxlbWVudChpdGVtKSkgewotICAgICAgICAgICAgICAgIEhUTUxPcHRHcm91cEVsZW1lbnQq
IGdyb3VwID0gdG9IVE1MT3B0R3JvdXBFbGVtZW50KGl0ZW0pOworICAgICAgICAgICAgICAgIEhU
TUxPcHRHcm91cEVsZW1lbnQmIGdyb3VwID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4o
Kml0ZW0pOwogICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwSUQrKzsKLSAgICAgICAgICAgICAg
ICBpbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmFwcGVuZChPcHRpb25JdGVtKGdyb3VwLT5ncm91
cExhYmVsVGV4dCgpLCB0cnVlLCAwLCBmYWxzZSwgZ3JvdXAtPmZhc3RIYXNBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpKSk7CisgICAgICAgICAgICAgICAgaW5mb3Jt
YXRpb24uc2VsZWN0T3B0aW9ucy5hcHBlbmQoT3B0aW9uSXRlbShncm91cC5ncm91cExhYmVsVGV4
dCgpLCB0cnVlLCAwLCBmYWxzZSwgZ3JvdXAuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmRpc2FibGVkQXR0cikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBpbmZvcm1hdGlvbi5zZWxlY3RlZEluZGV4ID0gZWxlbWVudC0+c2VsZWN0ZWRJbmRleCgpOwot
ICAgICAgICBpbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0ID0gZWxlbWVudC0+bXVsdGlwbGUoKTsK
LSAgICB9IGVsc2UgaWYgKGlzSFRNTFRleHRBcmVhRWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQo
KSkpIHsKLSAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFRleHRB
cmVhRWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIGluZm9ybWF0aW9uLmF1
dG9jYXBpdGFsaXplVHlwZSA9IHN0YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXplVHlwZT4oZWxl
bWVudC0+YXV0b2NhcGl0YWxpemVUeXBlKCkpOwotICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9j
b3JyZWN0ID0gZWxlbWVudC0+YXV0b2NvcnJlY3QoKTsKKyAgICAgICAgaW5mb3JtYXRpb24uc2Vs
ZWN0ZWRJbmRleCA9IGVsZW1lbnQuc2VsZWN0ZWRJbmRleCgpOworICAgICAgICBpbmZvcm1hdGlv
bi5pc011bHRpU2VsZWN0ID0gZWxlbWVudC5tdWx0aXBsZSgpOworICAgIH0gZWxzZSBpZiAoaXNI
VE1MVGV4dEFyZWFFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRNTFRleHRB
cmVhRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2Fz
c2lzdGVkTm9kZSk7CisgICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0
YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXplVHlwZT4oZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5
cGUoKSk7CisgICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LmF1dG9j
b3JyZWN0KCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpU
ZXh0QXJlYTsKLSAgICAgICAgaW5mb3JtYXRpb24uaXNSZWFkT25seSA9IGVsZW1lbnQtPmlzUmVh
ZE9ubHkoKTsKLSAgICAgICAgaW5mb3JtYXRpb24udmFsdWUgPSBlbGVtZW50LT52YWx1ZSgpOwot
ICAgIH0gZWxzZSBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkg
ewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50
KG1fYXNzaXN0ZWROb2RlLmdldCgpKTsKLSAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0g
ZWxlbWVudC0+Zm9ybSgpOworICAgICAgICBpbmZvcm1hdGlvbi5pc1JlYWRPbmx5ID0gZWxlbWVu
dC5pc1JlYWRPbmx5KCk7CisgICAgICAgIGluZm9ybWF0aW9uLnZhbHVlID0gZWxlbWVudC52YWx1
ZSgpOworICAgIH0gZWxzZSBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkp
IHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSA9IGVsZW1lbnQuZm9ybSgpOwogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIGluZm9y
bWF0aW9uLmZvcm1BY3Rpb24gPSBmb3JtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjphY3Rpb25BdHRyKTsKLSAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBl
ID0gc3RhdGljX2Nhc3Q8V2ViQXV0b2NhcGl0YWxpemVUeXBlPihlbGVtZW50LT5hdXRvY2FwaXRh
bGl6ZVR5cGUoKSk7Ci0gICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50
LT5hdXRvY29ycmVjdCgpOwotICAgICAgICBpZiAoZWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkp
CisgICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0YXRpY19jYXN0PFdl
YkF1dG9jYXBpdGFsaXplVHlwZT4oZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7CisgICAg
ICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LmF1dG9jb3JyZWN0KCk7Cisg
ICAgICAgIGlmIChlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3Jt
YXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlBhc3N3b3JkOwotICAgICAgICBlbHNlIGlm
IChlbGVtZW50LT5pc1NlYXJjaEZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNT
ZWFyY2hGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1
dFR5cGU6OlNlYXJjaDsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNFbWFpbEZpZWxkKCkp
CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNFbWFpbEZpZWxkKCkpCiAgICAgICAgICAgICBp
bmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6RW1haWw7Ci0gICAgICAgIGVsc2Ug
aWYgKGVsZW1lbnQtPmlzVGVsZXBob25lRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVu
dC5pc1RlbGVwaG9uZUZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSA9IElucHV0VHlwZTo6UGhvbmU7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzTnVtYmVy
RmllbGQoKSkKLSAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlxcZCoiIHx8IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZSgicGF0dGVybiIpID09ICJbMC05XSoiID8gSW5wdXRUeXBlOjpOdW1iZXJQYWQgOiBJbnB1dFR5
cGU6Ok51bWJlcjsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNEYXRlVGltZUxvY2FsRmll
bGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc051bWJlckZpZWxkKCkpCisgICAgICAg
ICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0
ZXJuIikgPT0gIlxcZCoiIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlsw
LTldKiIgPyBJbnB1dFR5cGU6Ok51bWJlclBhZCA6IElucHV0VHlwZTo6TnVtYmVyOworICAgICAg
ICBlbHNlIGlmIChlbGVtZW50LmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkpCiAgICAgICAgICAgICBp
bmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6RGF0ZVRpbWVMb2NhbDsKLSAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC0+aXNEYXRlRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC5pc0RhdGVGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUg
PSBJbnB1dFR5cGU6OkRhdGU7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzRGF0ZVRpbWVG
aWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzRGF0ZVRpbWVGaWVsZCgpKQogICAg
ICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkRhdGVUaW1lOwot
ICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1RpbWVGaWVsZCgpKQorICAgICAgICBlbHNlIGlm
IChlbGVtZW50LmlzVGltZUZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50
VHlwZSA9IElucHV0VHlwZTo6VGltZTsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNXZWVr
RmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc1dlZWtGaWVsZCgpKQogICAgICAg
ICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OldlZWs7Ci0gICAgICAg
IGVsc2UgaWYgKGVsZW1lbnQtPmlzTW9udGhGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVt
ZW50LmlzTW9udGhGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUg
PSBJbnB1dFR5cGU6Ok1vbnRoOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1VSTEZpZWxk
KCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNVUkxGaWVsZCgpKQogICAgICAgICAgICAg
aW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlVSTDsKLSAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
cGF0dGVybiA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpwYXR0ZXJuQXR0
cik7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgcGF0dGVybiA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnBhdHRlcm5BdHRyKTsKICAgICAgICAgICAgIGlmIChwYXR0ZXJuID09ICJcXGQqIiB8
fCBwYXR0ZXJuID09ICJbMC05XSoiKQogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1l
bnRUeXBlID0gSW5wdXRUeXBlOjpOdW1iZXJQYWQ7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6VGV4dDsKICAg
ICAgICAgICAgICAgICBpZiAoIWluZm9ybWF0aW9uLmZvcm1BY3Rpb24uaXNFbXB0eSgpCi0gICAg
ICAgICAgICAgICAgICAgICYmIChlbGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCkuY29udGFpbnMo
InNlYXJjaCIpIHx8IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIp
IHx8IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLmNvbnRh
aW5zKCJzZWFyY2giKSkpCisgICAgICAgICAgICAgICAgICAgICYmIChlbGVtZW50LmdldE5hbWVB
dHRyaWJ1dGUoKS5jb250YWlucygic2VhcmNoIikgfHwgZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgp
LmNvbnRhaW5zKCJzZWFyY2giKSB8fCBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
Ojp0aXRsZUF0dHIpLmNvbnRhaW5zKCJzZWFyY2giKSkpCiAgICAgICAgICAgICAgICAgICAgIGlu
Zm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpTZWFyY2g7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBpbmZvcm1hdGlvbi5pc1JlYWRPbmx5ID0gZWxlbWVudC0+
aXNSZWFkT25seSgpOwotICAgICAgICBpbmZvcm1hdGlvbi52YWx1ZSA9IGVsZW1lbnQtPnZhbHVl
KCk7Ci0gICAgICAgIGluZm9ybWF0aW9uLnZhbHVlQXNOdW1iZXIgPSBlbGVtZW50LT52YWx1ZUFz
TnVtYmVyKCk7Ci0gICAgICAgIGluZm9ybWF0aW9uLnRpdGxlID0gZWxlbWVudC0+dGl0bGUoKTsK
KyAgICAgICAgaW5mb3JtYXRpb24uaXNSZWFkT25seSA9IGVsZW1lbnQuaXNSZWFkT25seSgpOwor
ICAgICAgICBpbmZvcm1hdGlvbi52YWx1ZSA9IGVsZW1lbnQudmFsdWUoKTsKKyAgICAgICAgaW5m
b3JtYXRpb24udmFsdWVBc051bWJlciA9IGVsZW1lbnQudmFsdWVBc051bWJlcigpOworICAgICAg
ICBpbmZvcm1hdGlvbi50aXRsZSA9IGVsZW1lbnQudGl0bGUoKTsKICAgICB9IGVsc2UgaWYgKG1f
YXNzaXN0ZWROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgaW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkNvbnRlbnRFZGl0YWJsZTsKICAgICAgICAgaW5mb3Jt
YXRpb24uaXNBdXRvY29ycmVjdCA9IHRydWU7ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBsb29rIGF0
IHRoZSBhdHRyaWJ1dGU/Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238541</attachid>
            <date>2014-09-23 08:54:32 -0700</date>
            <delta_ts>2014-09-23 08:56:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137007-20140923085430.patch</filename>
            <type>text/plain</type>
            <size>285685</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1MGU1ZWEwYmYyNzQw
OWUxOGNiMTZlOTUzMTBiNjlhMzAzNjNiMi4uZTE4N2VlYjlhNzA1ZjQ3ZTQ2MTg3ZDliZjYxNDY4
YmVmNTUxYmJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxNyBAQAorMjAxNC0wOS0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50
PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKSBhbmQgZHJvcAorICAgICAgICB0cmFuc2l0
aW9uIG1hY3JvcyBmb3IgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFs
c28gY2xlYW5zIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVs
ZW1lbnRGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hh
bmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZWRD
aGlsZHJlbkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb246OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc1NlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c2V0U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzdHJp
bmdWYWx1ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6
YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZUFjdGlvbkVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29udGFpbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVybmFsTGlua0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmFkaW9CdXR0b25Hcm91cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1p
bmVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGRUZXh0RmllbGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZUZvck1TQUEpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNMaW5rZWQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5U2xpZGVyOjppbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNsaWRlclRodW1iOjplbGVtZW50UmVjdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlOjp0aXRsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZHJlblNlbGVjdGlvbkNoYW5n
ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChvcHRpb25Gcm9tU2VsZWN0aW9uKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcDoKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENhcHRpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxkTGVuZ3RoKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
YW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c1JlYWNoYWJsZUZyb21ET00pOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICog
Y3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
Q2hlY2tlZCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6Z2V0
TmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZO
ZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6Om1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJ
c1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
aXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKiBkb20vQ3VycmVudFNjcmlwdEluY3JlbWVu
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50U2NyaXB0SW5jcmVtZW50ZXI6OkN1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlcik6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OnNldERyYWdJbWFnZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aWNvblVSTHMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc01hcE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNl
ZFVzZW1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAgICogZG9tL1Zp
c2l0ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0hhc2hGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50
VHlwZUhlbHBlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpp
bWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRmly
c3RNYXJrYWJsZSk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dp
dGhOYW1lc3BhY2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQ
ZXJmb3JtU21hcnRSZXBsYWNlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6bm9uQm91bmRhcnlTaGFk
b3dUcmVlUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6aXNJ
blBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6CisgICAgICAgICog
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRU
ZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6
CisgICAgICAgICogaHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMpOgorICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9y
eURvY3VtZW50UGFyc2VyOjpjcmVhdGVCYXNpY0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01hdGNoaW5nRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50OjpzZXRJbm5lckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OmRpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpmb3JtSW1hZ2VFbGVtZW50cyk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50Ojphc3NlcnRJdGVtQ2FuQmVJblBhc3ROYW1lc01hcCk6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hU
TUxLZXlnZW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
OjpzaGFkb3dTZWxlY3QpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OnZpcnR1YWxGb3JtKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVs
ZW1lbnRNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXMp
OgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6
Om93bmVyRGF0YUxpc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRk
KToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGh0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRQbHVn
SW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4pOgorICAgICAgICAqIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
Omhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6c2VsZWN0T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRpb25zRm9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleCk6CisgICAg
ICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN1bW1hcnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRUYWJsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Ojpyb3dBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6
bGFzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3Vz
dG9tRWxlbWVudEFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNsb25lTm9kZSk6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6
CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YWJlbHNOb2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMpOgorICAgICAgICAqIGh0bWwvTWVkaWFEb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVE
b2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNjZW5kZW50VmlkZW9FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKToK
KyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICog
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlw
ZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBl
Ojppc0tleWJvYXJkRm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6Y2hlY2tFbGVtZW50TWF0Y2hlc1Jh
ZGlvTm9kZUxpc3RGaWx0ZXIpOgorICAgICAgICAqIGh0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpvd25lckRvY3VtZW50Rm9yQ3VycmVudE5vZGUpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGV0YWlsc01hcmtlckNvbnRyb2w6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXRlclNoYWRvd0VsZW1lbnQ6Om1ldGVy
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzU2hhZG93RWxlbWVudDo6cHJvZ3Jlc3NFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAgICogbG9h
ZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6aGFuZGxlRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKiBs
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OmRp
c3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2Jq
ZWN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU3VibWl0SW1h
Z2UpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRF
bWJlZGRlZE9iamVjdFRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBk
YXRlRW1iZWRkZWRPYmplY3QpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q2FuZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZSk6CisgICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6Om1lZGlhQ29udHJvbHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OmlzTGl2ZUxpbmspOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGxhbkNvdW50ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OmZyYW1lRWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZyYW1lU2V0OjpmcmFtZVNldEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxD
YW52YXM6OmNhbnZhc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OlJlbmRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpw
YWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjppbWFnZU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0ZWRPcHRpb25Db3VudCk6
CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0
OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQp
OgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6
Om1ldGVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyOjplbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU25hcHNob3R0ZWRQbHVnSW46
OnBsdWdJbkltYWdlRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp0ZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OnRleHRBcmVhRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWRlbzo6dmlkZW9FbGVtZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVy
KToKKyAgICAgICAgKiBzdmcvc3ZndGFncy5pbjoKKyAgICAgICAgR2VuZXJhdGUgaGVscGVycyB0
byBTVkdBRWxlbWVudC4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6d2FzTGFzdENoYW5nZVVzZXJFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVu
UG9zdExheW91dFRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQ
b3B1cFZpc2libGUpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1l
bnROcyk6CisKIDIwMTQtMDktMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRW5zdXJlIHRoYXQgbGF5b3V0IGlzIHVwLXRvLWRhdGUgYmVmb3JlIGhp
dC10ZXN0aW5nIHZpYSBSZW5kZXJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKaW5kZXggNDcyNzJlMmZlM2Q3
ODFjYjg2MzdjNWM5NzY3YTQ3NWI4MjBlYmU5My4uYmIxMDlmNzA1YzRiMzkxNzZiY2I1YjExMTM1
MjA3Yjg0ZDJjMTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5
LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGRvd25j
YXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzAwNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50SU9TOjpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorCiAyMDE0LTA5LTE3ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTczNjk1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDNlNDBkMmE2MzZkNDM4N2ZjZDgxNGEwM2Rk
YzRjOTE5MTg5NWRjODUuLmRjYzJlODdjZTBiMmE2ZDBlZjQxYjEyZTQ1MjU1ZDRlM2U1ZTFhYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNC0wOS0yMiAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1MKkVsZW1l
bnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGlu
c3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRp
b25zLm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IF9zZXRBdXRvZmlsbGVkOl0p
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlk
Q2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVs
ZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJl
RGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEFyZWEpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tOgorICAgICAgICAoaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIx
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxl
bWVudCBjYXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA1MWY3YzIx
YTQzNzkwZDVhNDBlYzA3NDgwOWNmN2JhMDI3MmFmOWI2Li4zYWMwNzM1Y2RiOTNlZDAzMTAyMjUx
ZDE4MDg3OTljNmNjNDVkZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIw
MTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
ZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGRvd25jYXN0
PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkuCisKKyAgICAgICAg
KiBET01IVE1MQ2xhc3Nlcy5jcHA6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OlVSTCk6Cisg
ICAgICAgIChET01IVE1MRG9jdW1lbnQ6OmJvZHkpOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50
Ojpmb3Jtcyk6CisgICAgICAgIChET01IVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbik6CisgICAgICAg
IChET01IVE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxl
bWVudDo6b3B0aW9ucyk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxlbWVudDo6YWN0aXZhdGVJ
dGVtQXRJbmRleCk6CisgICAgICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCk6CisgICAg
ICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoRE9NSFRNTElucHV0
RWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpkaXNhYmxlZCk6
CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6
OnZhbHVlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0
aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAg
IChET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2Zp
bGxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJFZGl0ZWQpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MVGV4
dEFyZWFFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKERP
TUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUpOgorICAgICAgICAqIFdlYkZyYW1lLmNw
cDoKKyAgICAgICAgKGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQpOgorICAgICAgICAoaW5wdXRF
bGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIxICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxlbWVudCBjYXN0aW5nIGhlbHBlciBm
dW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkZTQ2Y2RlNDA5ZGQ2NTgyZDllNGI5N2IxYjM2YzI3MWU3
MmRlYzc1Li5hYjQ5YjE4ZmViODE3ZTRhYzcxNzA0NDdiM2RkNWJmMTlmNzljNThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQg
b2YgdG9IVE1MKkVsZW1lbnQoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRN
TCpFbGVtZW50KCkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9J
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVudEF1
dG9maWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjpodG1sSW5wdXRFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFF
bGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjppc1RleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29u
dGVudEZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNo
b2ljZUFubm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbkNob2ljZUFubm90
YXRpb246OmNvbW1pdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW5UZXh0QW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luVGV4dEFubm90
YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luVGV4dEFubm90YXRpb246OnZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmluaXRpYWxpemVQ
bHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNl
ckludGVyYWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Zm9jdXNl
ZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4
dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50
Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVB
c051bWJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVNlbGVj
dGVkSW5kZXgpOgorICAgICAgICAoV2ViS2l0Ojppc0Fzc2lzdGFibGVOb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBE
ZWxldGVkLgorCiAyMDE0LTA5LTIyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQ29jb2FdIEFkZCBVSSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHdpbmRvdy5j
bG9zZSgpIGlzIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKaW5kZXggZjE5NTNkNmM1YTc2OGI1MjU3YTJmNjZhZGFkNGQ0N2ZjMWU2OTVi
Ni4uZWFhMTYyM2UwNDU2YzRkMWEzNmU4MTExNTQzMmQyZTgxYzBjNGI2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xNzcsNyArMTc3
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVu
dEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKICAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50
ID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQo
KTsKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNl
ZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgaXNIVE1MQXJlYUVsZW1lbnQo
Zm9jdXNlZEVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZm9jdXNlZEltYWdlTWFwVUlFbGVtZW50
KHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KSk7CisgICAgICAgIHJldHVybiBmb2N1
c2VkSW1hZ2VNYXBVSUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxl
bWVudCkpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZm9jdXNlZERvY3VtZW50
LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWRFbGVtZW50ID8gc3RhdGljX2Nh
c3Q8Tm9kZSo+KGZvY3VzZWRFbGVtZW50KSA6IGZvY3VzZWREb2N1bWVudCk7CiAgICAgaWYgKCFv
YmopCkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KIHZvaWQgQVhP
YmplY3RDYWNoZTo6bGFiZWxDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGlzSFRNTExhYmVsRWxlbWVudChlbGVtZW50KSk7Ci0gICAgSFRNTEVsZW1lbnQqIGNvcnJlc3Bv
bmRpbmdDb250cm9sID0gdG9IVE1MTGFiZWxFbGVtZW50KGVsZW1lbnQpLT5jb250cm9sKCk7Cisg
ICAgSFRNTEVsZW1lbnQqIGNvcnJlc3BvbmRpbmdDb250cm9sID0gZG93bmNhc3Q8SFRNTExhYmVs
RWxlbWVudD4oZWxlbWVudCktPmNvbnRyb2woKTsKICAgICB0ZXh0Q2hhbmdlZChjb3JyZXNwb25k
aW5nQ29udHJvbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKaW5kZXggNjJiOTM0ZDdkM2I4NTU2M2JiZmY0NWNm
Nzg1ZTZlNzJkNzI3NjE3Yi4uMGY4ZTFkOWI1NmU3ODhmODE3NTNiMWYyMDBjZmIyNzUzYmIxYjBi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TGlzdEJveC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6Y2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0CiAgICAgaWYgKCFzZWxl
Y3ROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuICF0b0hUTUxT
ZWxlY3RFbGVtZW50KHNlbGVjdE5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKKyAgICBy
ZXR1cm4gIWRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0Tm9kZSkuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmFkZENoaWxk
cmVuKCkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hp
bGRyZW4oKQogICAgIAogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+
bGlzdEl0ZW1zKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogZG93bmNhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3ROb2RlKS5saXN0SXRlbXMoKSkgewogICAgICAgICAv
LyBUaGUgY2FzdCB0byBIVE1MRWxlbWVudCBiZWxvdyBpcyBzYWZlIGJlY2F1c2UgdGhlIG9ubHkg
b3RoZXIgcG9zc2libGUgbGlzdEl0ZW0gdHlwZQogICAgICAgICAvLyB3b3VsZCBiZSBhIFdNTEVs
ZW1lbnQsIGJ1dCBXTUwgYnVpbGRzIGRvbid0IHVzZSBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzIGF0
IGFsbC4KICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hP
cHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAK
aW5kZXggYTlmYWQ4ZDQ3MmE3M2EyYzA5Y2ZjODA1NDllYWYxMDQ2Y2U2ZDllNi4uZDg2NWM4OTVl
M2VlNjVjNjYxZGViYzFiNTBjNGFmMWYxODc5YjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxl
Y3RlZCgpIGNvbnN0CiAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVt
ZW50KG1fb3B0aW9uRWxlbWVudCktPnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5zZWxlY3RlZCgpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29u
c3QKQEAgLTE1NywxMCArMTU3LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bjo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIAog
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiB0b0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCktPnRleHQoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS50
ZXh0KCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVsZW1l
bnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxlbWVu
dCktPmdyb3VwTGFiZWxUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0R3Jv
dXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIAogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTIwMywxMCArMjAzLDEwIEBAIEhUTUxTZWxlY3RFbGVt
ZW50KiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6bGlzdEJveE9wdGlvblBhcmVudE5vZGUo
KSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hUTUxPcHRpb25F
bGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVt
ZW50KG1fb3B0aW9uRWxlbWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2Vs
ZWN0RWxlbWVudCgpOwogCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVs
ZW1lbnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxl
bWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdEdyb3VwRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkub3duZXJTZWxlY3RFbGVtZW50KCk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKaW5kZXggYTA3
MzViNGZlZmExYjNhN2QxMWZiMzM0ODZlMjEwZDdiOTcxYzljNS4uZGViMDkyMGY4Yjk4MzZjYzk4
NmEyMzgyOTY1ZGE2MDY2MmJhNmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKQEAgLTI3Nyw3
ICsyNzcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OnZhbHVlRGVzY3Jp
cHRpb24oKSBjb25zdAogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBmbG9hdCB0aW1lID0gdG9IVE1MSW5wdXRFbGVtZW50
KG5vZGUpLT52YWx1ZSgpLnRvRmxvYXQoKTsKKyAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwogICAgIHJldHVybiBsb2Nh
bGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24u
Y3BwCmluZGV4IDg4ZTJlNmVlMTU2MGRiOWMwMjgyMjJkNjMyNzIyYzE0YjcwMDZmZTYuLmVkMTdk
NGEzNzdmZTYxODVlYmRhZjAxMTdjOGVmNjg4MTdkODM0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
bi5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246
OmlzRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgLy8gaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgcmV0
dXJucyB0cnVlIGlmIHRoZSBwYXJlbnQgPHNlbGVjdD4gZWxlbWVudCBpcyBkaXNhYmxlZCwKICAg
ICAvLyB3aGljaCB3ZSBkb24ndCB3YW50LgotICAgIHJldHVybiAhdG9IVE1MT3B0aW9uRWxlbWVu
dChtX2VsZW1lbnQuZ2V0KCkpLT5vd25FbGVtZW50RGlzYWJsZWQoKTsKKyAgICByZXR1cm4gIWRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50KS5vd25FbGVtZW50RGlzYWJsZWQo
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzVmlzaWJsZSgpIGNv
bnN0CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpp
c09mZlNjcmVlbigpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpp
c1NlbGVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MT3B0aW9uRWxlbWVudChtX2Vs
ZW1lbnQuZ2V0KCkpLT5zZWxlY3RlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKm1fZWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5
TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKICAgICBp
ZiAoIWNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRv
SFRNTE9wdGlvbkVsZW1lbnQobV9lbGVtZW50LmdldCgpKS0+c2V0U2VsZWN0ZWQoYik7CisgICAg
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnNldFNlbGVjdGVkKGIpOwog
fQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9yTVNBQSgpIGNv
bnN0CkBAIC0xMTQsNyArMTE0LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb246OmVsZW1lbnRSZWN0KCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlNZW51TGlz
dE9wdGlvbjo6c3RyaW5nVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxPcHRpb25F
bGVtZW50KG1fZWxlbWVudC5nZXQoKSktPnRleHQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnRleHQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAppbmRleCAxZDUyMTlkNjMzYjA1ZDc1NmUxNDhk
NzVmNzQ3ZDg3MTMzODdhM2NlLi5mYzI1ODVkMWVmYzEzYjRkY2U0MmEzZGIwNjBlY2Q1YzYxZGI2
MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKCkKIAogICAgIG1faGF2ZUNoaWxk
cmVuID0gdHJ1ZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbGlzdEl0ZW0gOiB0b0hUTUxTZWxl
Y3RFbGVtZW50KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0
byYgbGlzdEl0ZW0gOiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdE5vZGUpLmxp
c3RJdGVtcygpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9u
ID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKICAgICAgICAg
aWYgKG9wdGlvbikgewogICAgICAgICAgICAgb3B0aW9uLT5zZXRQYXJlbnQodGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCmluZGV4IDZlY2FlMTgyNWQ4N2RiYjk3YmI4ODIzNTI4ZTkxMTBlMjM1MzExMzgu
LjY3ZjI4YjMwNzRlNmU5ZDY0ZTBhOTM2Zjc3Y2VmYWY3ZjRiZjFmNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCkBAIC0yOTEsMTggKzI5MSwxOCBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7
CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIGlm
IChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOworICAgICAgICBpZiAoaW5wdXQu
aXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKLSAgICAgICAg
aWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgIGlmIChpbnB1dC5pc1JhZGlvQnV0
dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOwotICAgICAgICBpZiAo
aW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICAgICAgaWYgKGlucHV0
LT5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICBpZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkK
ICAgICAgICAgICAgIHJldHVybiBTbGlkZXJSb2xlOwogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LT5nZXRBdHRy
aWJ1dGUodHlwZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1
dC5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dHlwZSwgImNvbG9yIikpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3JXZWxsUm9sZTsKICNlbmRp
ZgpAQCAtMzEwLDggKzMxMCw4IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0
RmllbGRSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
IHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBs
ZSgpID8gTGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIEhUTUxTZWxlY3RF
bGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2Rl
KCkpOworICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC5tdWx0aXBsZSgpID8gTGlzdEJveFJv
bGUgOiBQb3BVcEJ1dHRvblJvbGU7CiAgICAgfQogICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1l
bnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKQEAgLTQ2OSw4ICs0Njks
OCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50
KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRF
bGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzVGV4dCgpIHx8IGlucHV0LT5p
c051bWJlckZpZWxkKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICByZXR1cm4gaW5wdXQuaXNUZXh0
KCkgfHwgaW5wdXQuaXNOdW1iZXJGaWVsZCgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTUxOSw4ICs1MTksOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2
ZUltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5w
dXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9I
VE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0
b24oKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC5pc0ltYWdlQnV0dG9uKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1NCw4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAKICAgICBpZiAocm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZSAmJiBpc0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBpbnB1dC0+aXNJbWFnZUJ1
dHRvbigpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0LmlzSW1hZ2VCdXR0b24o
KTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjksNyArNzI5LDcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNU
YWdOYW1lKHNlbGVjdFRhZykgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5tdWx0aXBs
ZSgpOworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykg
JiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKCkpLm11bHRpcGxlKCk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdApAQCAtNzQy
LDkgKzc0Miw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBj
b25zdAogICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpLT5pc1Jl
YWRPbmx5KCk7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAg
ICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXQt
PmlzUmVhZE9ubHkoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmIChpbnB1dC5pc1RleHRGaWVs
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKQEAgLTgzOCw5ICs4MzgsOSBAQCBT
dHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewog
ICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlu
cHV0LT52YWx1ZUFzTnVtYmVyKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5p
c1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlQXNOdW1iZXIo
KTsKICAgICB9CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NTIsOSArODUyLDkg
QEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ewogICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsK
LSAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGlucHV0LT5tYXhpbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1Jh
bmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsKICAgICB9
CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NjYsOSArODY2LDkgQEAgZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAogZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAg
IGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0
LT5taW5pbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29u
dHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1pbmltdW0oKTsKICAgICB9CiAKICAg
ICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC05NzQsOCArOTc0LDggQEAgRWxlbWVudCogQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogc3RhdGljIGJvb2wg
aXNOb2RlQWN0aW9uRWxlbWVudChOb2RlKiBub2RlKQogewogICAgIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpICYmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LT5pc0NoZWNrYm94KCkg
fHwgaW5wdXQtPmlzVGV4dEJ1dHRvbigpIHx8IGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1
dC0+aXNJbWFnZUJ1dHRvbigpKSkKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmICghaW5wdXQuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgJiYgKGlucHV0LmlzUmFkaW9CdXR0b24oKSB8fCBpbnB1dC5p
c0NoZWNrYm94KCkgfHwgaW5wdXQuaXNUZXh0QnV0dG9uKCkgfHwgaW5wdXQuaXNGaWxlVXBsb2Fk
KCkgfHwgaW5wdXQuaXNJbWFnZUJ1dHRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzA3LDcgKzEzMDcs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlcm5hdGl2ZVRleHQoVmVjdG9y
PEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZAogICAgIAogICAgIC8vIFRoZSBmaWVsZHNldCBl
bGVtZW50IGRlcml2ZXMgaXRzIGFsdGVybmF0aXZlIHRleHQgZnJvbSB0aGUgZmlyc3QgYXNzb2Np
YXRlZCBsZWdlbmQgZWxlbWVudCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAgIGlmIChpc0hUTUxG
aWVsZFNldEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0b0hUTUxGaWVsZFNldEVsZW1lbnQo
bm9kZSktPmxlZ2VuZCgpKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb3duY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50
Pigqbm9kZSkubGVnZW5kKCkpOwogICAgICAgICBpZiAob2JqZWN0ICYmICFvYmplY3QtPmlzSGlk
ZGVuKCkpCiAgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGFj
Y2Vzc2libGVOYW1lRm9yTm9kZShvYmplY3QtPm5vZGUoKSksIEFsdGVybmF0aXZlVGV4dCkpOwog
ICAgIH0KQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OnZpc2libGVUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikKICAgICAK
ICAgICBib29sIGlzSW5wdXRUYWcgPSBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7CiAgICAgaWYg
KGlzSW5wdXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpIHsK
LSAgICAgICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoaW5wdXQtPnZh
bHVlV2l0aERlZmF1bHQoKSwgVmlzaWJsZVRleHQpKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlm
IChpbnB1dC5pc1RleHRCdXR0b24oKSkgeworICAgICAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VGV4dChpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCksIFZpc2libGVUZXh0KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjg1LDkgKzE2ODUs
OSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKIAogICAg
IGJvb2wgaXNJbnB1dFRhZyA9IGlzSFRNTElucHV0RWxlbWVudChub2RlKTsKICAgICBpZiAoaXNJ
bnB1dFRhZykgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0
RWxlbWVudChub2RlKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVmYXVsdCgpOworICAgICAgICBIVE1MSW5w
dXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAg
ICAgICAgaWYgKGlucHV0LmlzVGV4dEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0
LnZhbHVlV2l0aERlZmF1bHQoKTsKICAgICB9CiAKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0Nv
bnRyb2woKSkgewpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojp0ZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYg
KGlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpIHx8
IGlzSFRNTElucHV0RWxlbWVudChub2RlKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KG5vZGUpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogCiAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTE3Nzcs
MTYgKzE3NzcsMTYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1
ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7CiAKICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKTsKLSAgICAgICAgaW50
IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5s
aXN0SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOworICAgICAgICBpbnQgc2VsZWN0ZWRJ
bmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC5saXN0SXRlbXMoKTsK
ICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNl
bGVjdGVkSW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkgewogICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBvdmVycmlkZGVuRGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRl
eF0tPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogICAgICAgICAgICAgaWYgKCFv
dmVycmlkZGVuRGVzY3JpcHRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRkZW5EZXNjcmlwdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAoIXNlbGVjdEVsZW1l
bnQtPm11bHRpcGxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+dmFsdWUo
KTsKKyAgICAgICAgaWYgKCFzZWxlY3RFbGVtZW50Lm11bHRpcGxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZWN0RWxlbWVudC52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgfQogCkBAIC0xODEyLDEzICsxODEyLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKICAgICBpZiAoIW5v
ZGUoKSB8fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh0eXBl
QXR0cik7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pigqbm9kZSgpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1dC5n
ZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwg
ImNvbG9yIikpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OnZh
bHVlIGFsd2F5cyByZXR1cm5zIGEgc3RyaW5nIHBhcnNlYWJsZSBieSBDb2xvcigpLgotICAgIENv
bG9yIGNvbG9yKGlucHV0LT52YWx1ZSgpKTsKKyAgICBDb2xvciBjb2xvcihpbnB1dC52YWx1ZSgp
KTsKICAgICByID0gY29sb3IucmVkKCk7CiAgICAgZyA9IGNvbG9yLmdyZWVuKCk7CiAgICAgYiA9
IGNvbG9yLmJsdWUoKTsKQEAgLTE4NDIsNyArMTg0Miw3IEBAIHN0YXRpYyBTdHJpbmcgYWNjZXNz
aWJsZU5hbWVGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBhbHQ7CiAgICAgCiAg
ICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTElu
cHV0RWxlbWVudChub2RlKS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZSBub2RlIGNh
biBiZSB0dXJuZWQgaW50byBhbiBBWCBvYmplY3QsIHdlIGNhbiB1c2Ugc3RhbmRhcmQgbmFtZSBj
b21wdXRhdGlvbiBydWxlcy4KICAgICAvLyBJZiBob3dldmVyLCB0aGUgbm9kZSBjYW5ub3QgKGJl
Y2F1c2UgdGhlcmUncyBubyByZW5kZXJlciBlLmcuKSBmYWxsYmFjayB0byB1c2luZyB0aGUgYmFz
aWMgdGV4dCB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNWJlZTUzNTE1Yzk3
NzBjOTc0YTczYzVkNjNjN2EwODYwMTc0NjY4OC4uNDRjMzhjN2U4YzQ1NmU4Y2Q4ZGMyMGQyMjU4
OTExY2QzNGM3Yzc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC01MjQsOCArNTI0LDggQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0F0dGFjaG1lbnQoKSBjb25zdAogYm9v
bCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdAog
ewogICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbnB1
dEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgICAg
ICByZXR1cm4gaW5wdXQtPmlzRmlsZVVwbG9hZCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkp
OworICAgICAgICByZXR1cm4gaW5wdXQuaXNGaWxlVXBsb2FkKCk7CiAgICAgfQogICAgIAogICAg
IHJldHVybiBmYWxzZTsKQEAgLTc0MSw5ICs3NDEsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgIGlmIChjc3NCb3ggJiYgY3NzQm94
LT5pc01lbnVMaXN0KCkpIHsKICAgICAgICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBnbyBzdHJh
aWdodCB0byB0aGUgdGV4dCgpIG9mIGl0cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAvLyBUaGlz
IGhhcyB0byBiZSBvdmVycmlkZGVuIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3RlZCBpdGVt
IGhhcyBhbiBBUklBIGxhYmVsLgotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxl
bWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAg
aW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50
LT5saXN0SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CisgICAg
ICAgIGludCBzZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVt
ZW50Lmxpc3RJdGVtcygpOwogICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRp
Y19jYXN0PHNpemVfdD4oc2VsZWN0ZWRJbmRleCkgPCBsaXN0SXRlbXMuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJyaWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJ
dGVtc1tzZWxlY3RlZEluZGV4XS0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAg
ICAgICAgICAgICBpZiAoIW92ZXJyaWRkZW5EZXNjcmlwdGlvbi5pc051bGwoKSkKQEAgLTc4Myw3
ICs3ODMsNyBAQCBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
YWJlbEVsZW1lbnRDb250YWluZXIoKSBjb25zdAogICAgIC8vIGZpbmQgaWYgdGhpcyBoYXMgYSBw
YXJlbnQgdGhhdCBpcyBhIGxhYmVsCiAgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gbV9yZW5k
ZXJlci0+bm9kZSgpOyBwYXJlbnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpc0hUTUxMYWJlbEVsZW1lbnQocGFyZW50Tm9kZSkpCi0g
ICAgICAgICAgICByZXR1cm4gdG9IVE1MTGFiZWxFbGVtZW50KHBhcmVudE5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KHBhcmVudE5vZGUpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkxNiw5ICs5MTYsOSBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVt
ZW50KCkgY29uc3QKICAgICAvLyBSaWdodCBub3csIHdlIGRvIG5vdCBzdXBwb3J0IEFSSUEgbGlu
a3MgYXMgaW50ZXJuYWwgbGluayBlbGVtZW50cwogICAgIGlmICghaXNIVE1MQW5jaG9yRWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSFRNTEFuY2hvckVsZW1l
bnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVudCk7CisgICAgSFRNTEFuY2hv
ckVsZW1lbnQmIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCk7
CiAgICAgCi0gICAgVVJMIGxpbmtVUkwgPSBhbmNob3ItPmhyZWYoKTsKKyAgICBVUkwgbGlua1VS
TCA9IGFuY2hvci5ocmVmKCk7CiAgICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllciA9IGxpbmtV
UkwuZnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgaWYgKGZyYWdtZW50SWRlbnRpZmllci5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTUzLDExICs5NTMsMTEgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW4KICAgICBpZiAoIW5vZGUgfHwgIWlzSFRNTElucHV0RWxlbWVu
dChub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIGlmIHRoZXJl
J3MgYSBmb3JtLCB0aGVuIHRoaXMgaXMgZWFzeQotICAgIGlmIChpbnB1dC0+Zm9ybSgpKSB7Cisg
ICAgaWYgKGlucHV0LmZvcm0oKSkgewogICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3Jt
RWxlbWVudHM7Ci0gICAgICAgIGlucHV0LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQt
Pm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKKyAgICAgICAgaW5wdXQuZm9ybSgpLT5nZXROYW1lZEVs
ZW1lbnRzKGlucHV0Lm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoYXV0byYgYXNzb2NpYXRlRWxlbWVudCA6IGZvcm1FbGVtZW50cykgewogICAgICAgICAgICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUoJmFzc29jaWF0ZUVsZW1lbnQuZ2V0KCkpKQpAQCAtOTY4LDkgKzk2OCw5IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuCiAgICAgICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAg
ICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobGlzdC0+aXRlbShpKSkpIHsKLSAgICAgICAgICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBhc3NvY2lhdGVFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVFbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC0+bmFtZSgpID09IGlucHV0LT5u
YW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoYXNzb2NpYXRlRWxlbWVudCkpCisg
ICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXNzb2NpYXRlRWxlbWVudC5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC5u
YW1lKCkgPT0gaW5wdXQubmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3Nv
Y2lhdGVFbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFVJRWxlbWVudHMu
YXBwZW5kKG9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTUw
Nyw3ICsxNTA3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKIFVSTCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogewogICAgIGlmIChpc0FuY2hvcigpICYmIGlzSFRN
TEFuY2hvckVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBpZiAoSFRNTEFu
Y2hvckVsZW1lbnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yRWxlbWVudCgp
KSkKKyAgICAgICAgaWYgKEhUTUxBbmNob3JFbGVtZW50KiBhbmNob3IgPSBkb3duY2FzdDxIVE1M
QW5jaG9yRWxlbWVudD4oYW5jaG9yRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBhbmNo
b3ItPmhyZWYoKTsKICAgICB9CiAgICAgCkBAIC0xNTE1LDEwICsxNTE1LDEwIEBAIFVSTCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9yZW5k
ZXJlci0+ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKICAgICBpZiAoaXNJbWFnZSgpICYmIG1fcmVu
ZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkK
LSAgICAgICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5z
cmMoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCptX3JlbmRl
cmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChpc0lucHV0SW1hZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5u
b2RlKCkpLnNyYygpOwogICAgIAogICAgIHJldHVybiBVUkwoKTsKIH0KQEAgLTE2NzksNyArMTY3
OSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5ub2Rl
KCkgfHwgIW1fcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkp
OworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKm1fcmVuZGVyZXItPm5vZGUoKSk7
CiAKICAgICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTY4OCwxMCArMTY4OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIC8vIEZJWE1FOiBEbyB3ZSB3
YW50IHRvIGRvIGFueXRoaW5nIGhlcmUgZm9yIEFSSUEgdGV4dGJveGVzPwogICAgIGlmIChyZW5k
ZXJlci0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qgc2Fm
ZSEgIE90aGVyIGVsZW1lbnRzIGNvdWxkIGhhdmUgYSBUZXh0RmllbGQgcmVuZGVyZXIuCi0gICAg
ICAgIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KS0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICAg
ICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkuc2V0VmFsdWUoc3RyaW5nKTsK
ICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbm90IHNhZmUhICBPdGhlciBlbGVtZW50cyBjb3VsZCBoYXZlIGEgVGV4dEFy
ZWEgcmVuZGVyZXIuCi0gICAgICAgIHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KS0+c2V0
VmFsdWUoc3RyaW5nKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxl
bWVudCkuc2V0VmFsdWUoc3RyaW5nKTsKICAgICB9CiB9CiAKQEAgLTE3NjMsMTAgKzE3NjMsMTAg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXREb2N1bWVudExpbmtzKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmUKICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IGN1
cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgaXNIVE1MQXJlYUVs
ZW1lbnQoY3VycikgJiYgaXNIVE1MTWFwRWxlbWVudChwYXJlbnQpKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluayhheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1Jv
bGUpKTsKLSAgICAgICAgICAgICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gdG9IVE1MTWFwRWxl
bWVudChwYXJlbnQpOwotICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxl
bWVudCh0b0hUTUxBcmVhRWxlbWVudChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgYXJlYU9iamVj
dC0+c2V0SFRNTE1hcEVsZW1lbnQobWFwKTsKLSAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LT5z
ZXRQYXJlbnQoYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKG1hcCkpOworICAgICAgICAg
ICAgICAgIEhUTUxNYXBFbGVtZW50JiBtYXAgPSBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKnBh
cmVudCk7CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTEFyZWFFbGVtZW50KGRv
d25jYXN0PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOworICAgICAgICAgICAgICAgIGFyZWFPYmpl
Y3QtPnNldEhUTUxNYXBFbGVtZW50KCZtYXApOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3Qt
PnNldFBhcmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoJm1hcCkpOwogCiAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhcmVhT2JqZWN0KTsKICAgICAgICAgICAgIH0KQEAg
LTIxNjEsNyArMjE2MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNCiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKEVsZW1lbnQqIG1hcFBhcmVu
dCA9IGFyZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQYXJlbnQgPSBtYXBQYXJl
bnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoaXNIVE1MTWFwRWxlbWVudChtYXBQ
YXJlbnQpKSB7Ci0gICAgICAgICAgICBwYXJlbnQgPSBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1h
Z2VNYXAodG9IVE1MTWFwRWxlbWVudChtYXBQYXJlbnQpKTsKKyAgICAgICAgICAgIHBhcmVudCA9
IGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcChkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4o
bWFwUGFyZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIy
MTEsMTAgKzIyMTEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KICAgICBOb2RlKiBub2Rl
ID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9k
ZSgpOwogCiAgICAgaWYgKGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4g
YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCh0b0hUTUxBcmVhRWxlbWVudChub2RlKSwgcG9p
bnQpOworICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChkb3duY2Fz
dDxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpLCBwb2ludCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9w
dGlvbkVsZW1lbnQobm9kZSkpCi0gICAgICAgIG5vZGUgPSB0b0hUTUxPcHRpb25FbGVtZW50KG5v
ZGUpLT5vd25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50Pigqbm9kZSkub3duZXJTZWxlY3RFbGVtZW50KCk7CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0KiBvYmogPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqKQpAQCAtMjUw
NSwyMSArMjUwNSwyMSBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0QXJl
YVJvbGU7CiAKICAgICBpZiAobm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpIHsKLSAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7
Ci0gICAgICAgIGlmIChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAg
aWYgKGlucHV0LmlzQ2hlY2tib3goKSkKICAgICAgICAgICAgIHJldHVybiBDaGVja0JveFJvbGU7
Ci0gICAgICAgIGlmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQu
aXNSYWRpb0J1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIFJhZGlvQnV0dG9uUm9sZTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgaWYgKGlucHV0LmlzVGV4
dEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7CiAgICAgICAg
IC8vIE9uIGlPUywgdGhlIGRhdGUgZmllbGQgaXMgYSBwb3B1cCBidXR0b24uIE9uIG90aGVyIHBs
YXRmb3JtcyB0aGlzIGlzIGEgdGV4dCBmaWVsZC4KICNpZiBQTEFURk9STShJT1MpCi0gICAgICAg
IGlmIChpbnB1dC0+aXNEYXRlRmllbGQoKSkKKyAgICAgICAgaWYgKGlucHV0LmlzRGF0ZUZpZWxk
KCkpCiAgICAgICAgICAgICByZXR1cm4gUG9wVXBCdXR0b25Sb2xlOwogI2VuZGlmCiAgICAgICAg
IAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQuZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJjb2xvciIpKQogICAgICAgICAgICAgcmV0
dXJuIENvbG9yV2VsbFJvbGU7CiAjZW5kaWYKQEAgLTI4NDAsOCArMjg0MCw4IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRyZW4oKQogICAgIGlmICgh
bm9kZSB8fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7
Ci0gICAgSFRNTEVsZW1lbnQqIHNwaW5CdXR0b25FbGVtZW50ID0gaW5wdXQtPmlubmVyU3BpbkJ1
dHRvbkVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICBIVE1MRWxlbWVudCogc3BpbkJ1dHRvbkVsZW1l
bnQgPSBpbnB1dC5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKCFzcGluQnV0dG9u
RWxlbWVudCB8fCAhc3BpbkJ1dHRvbkVsZW1lbnQtPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zMjcxLDcgKzMyNzEsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKICAgICBpZiAoaXNMaW5r
YWJsZSgqdGhpcykpIHsKICAgICAgICAgRWxlbWVudCogYW5jaG9yID0gYW5jaG9yRWxlbWVudCgp
OwogICAgICAgICBpZiAoYW5jaG9yICYmIGlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKLSAg
ICAgICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvciktPmhyZWYoKTsKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFuY2hvcikuaHJl
ZigpOwogICAgIH0KIAogICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwpAQCAtMzI4Niw3ICszMjg2
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0CiAg
ICAgaWYgKCFhbmNob3IgfHwgIWlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuICF0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvcikt
PmhyZWYoKS5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVu
dD4oKmFuY2hvcikuaHJlZigpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpoYXNCb2xkRm9udCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAppbmRleCA5NTBmOTgyOTAyYTdh
ODYwZDhmZmY1MmNjZjJkNDE5YWJiMTBjZjAzLi5iNWUzNDZkNTZlNjdiNDQ1NGQwNGM5ZDYwYzk4
MTBhOTEyMWUxMmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNsaWRlci5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlTbGlkZXI6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIEhUTUxJbnB1dEVs
ZW1lbnQqIEFjY2Vzc2liaWxpdHlTbGlkZXI6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOworICAgIHJldHVy
biBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpOwogfQogCiAK
QEAgLTE1OSw3ICsxNTksNyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6
ZWxlbWVudFJlY3QoKSBjb25zdAogICAgIFJlbmRlck9iamVjdCogc2xpZGVyUmVuZGVyZXIgPSBt
X3BhcmVudC0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXNsaWRlclJlbmRlcmVyIHx8ICFzbGlkZXJS
ZW5kZXJlci0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICBy
ZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KHNsaWRlclJlbmRlcmVyLT5ub2RlKCkpLT5zbGlkZXJU
aHVtYkVsZW1lbnQoKS0+Ym91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oc2xpZGVyUmVuZGVyZXItPm5vZGUoKSktPnNsaWRlclRodW1iRWxlbWVudCgp
LT5ib3VuZGluZ0JveCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IGQ5ZDQzNWY4YmVh
N2MyYmIzM2Y3YzhkYzllMWI4YTExZGIwODE4NmEuLjUwZTU4ZDljZjJhYWZkMDUzYzFkZTMwZTQ1
NDQwN2JmODkwYTYxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTFRhYmxlRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdAogICAgIAogICAgIFJl
bmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CiAgICAgaWYgKHRh
YmxlLT5lbGVtZW50KCkgJiYgaXNIVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGUtPmVsZW1lbnQoKSk7
CiAgICAgCiAgICAgLy8gSWYgdGhlIHRhYmxlIGhhcyBhIGRpc3BsYXk6dGFibGUtcm93LWdyb3Vw
LCB0aGVuIHRoZSBSZW5kZXJUYWJsZSBkb2VzIG5vdCBoYXZlIGEgcG9pbnRlciB0byBpdCdzIEhU
TUxUYWJsZUVsZW1lbnQuCiAgICAgLy8gV2UgY2FuIGluc3RlYWQgZmluZCBpdCBieSBhc2tpbmcg
dGhlIGZpcnN0U2VjdGlvbiBmb3IgaXRzIHBhcmVudC4KQEAgLTEwOSw3ICsxMDksNyBAQCBIVE1M
VGFibGVFbGVtZW50KiBBY2Nlc3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCgpIGNvbnN0CiAg
ICAgaWYgKCFhY3R1YWxUYWJsZSB8fCAhaXNIVE1MVGFibGVFbGVtZW50KGFjdHVhbFRhYmxlKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxl
bWVudChhY3R1YWxUYWJsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+
KGFjdHVhbFRhYmxlKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFU
YWJsZSgpIGNvbnN0CkBAIC02MDgsNyArNjA4LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6dGl0bGUoKSBjb25zdAogICAgIC8vIHNlZSBpZiB0aGVyZSBpcyBhIGNhcHRpb24KICAgICBO
b2RlKiB0YWJsZUVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKHRhYmxlRWxl
bWVudCAmJiBpc0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50KSkgewotICAgICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVs
ZW1lbnQpLT5jYXB0aW9uKCk7CisgICAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0
aW9uID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxlRWxlbWVudCkuY2FwdGlvbigp
OwogICAgICAgICBpZiAoY2FwdGlvbikKICAgICAgICAgICAgIHRpdGxlID0gY2FwdGlvbi0+aW5u
ZXJUZXh0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCA5MzBlZjNiN2JjZmRmZGNjNDdkOWJmOWY1
NDllNjE0ZGUwYTQyNjk3Li5iODY1MTE4MDgyZDNhNzBkZDhhMzdjYjgzNjRmODNmNTkwODJlYjMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVj
dENhY2hlQXRrLmNwcApAQCAtMTQwLDEwICsxNDAsOCBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGls
ZHJlblNlbGVjdGlvbkNoYW5nZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiAgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG9iamVjdC0+d3JhcHBlcigpLCAic2VsZWN0aW9uLWNoYW5nZWQi
KTsKIAogICAgIC8vIEZpbmQgdGhlIGl0ZW0gd2hlcmUgdGhlIHNlbGVjdGlvbiBjaGFuZ2Ugd2Fz
IHRyaWdnZXJlZCBmcm9tLgotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxT
ZWxlY3RFbGVtZW50KG5vZGUpOwotICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm47Ci0g
ICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3QtPmFjdGl2ZVNlbGVjdGlvblN0YXJ0TGlz
dEluZGV4KCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Pigqbm9kZSk7CisgICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3Qu
YWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGxpc3RPYmplY3QgPSBnZXRMaXN0T2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKCFsaXN0T2Jq
ZWN0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCmluZGV4
IDZjNGNiZjkxNWZkNzBjYjFjNjRkZDgwZGQ0Y2YxNjdiODM3NDU2MjIuLjllODdmNGY1ZmJjNzdl
ZmY1Mjg1NzY1ZDY2ZmY3NDc1OTRkMDIyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VTZWxlY3Rpb24uY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9wdGlvbkZyb21TZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdp
bnQgaW4KICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9IVE1MU2VsZWN0
RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdE5vZGUgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7
CiAgICAgICAgIGlmICghc2VsZWN0Tm9kZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xOTUsOCArMTk1LDggQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlv
bkdldFNlbGVjdGlvbkNvdW50KEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQogICAgICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgaW50IHNlbGVjdGVk
SW5kZXggPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZElu
ZGV4KCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRl
eCA8IHN0YXRpY19jYXN0PGludD4odG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgp
KS0+bGlzdEl0ZW1zKCkuc2l6ZSgpKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBkb3du
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgo
KTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwg
c3RhdGljX2Nhc3Q8aW50Pihkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5v
ZGUoKSktPmxpc3RJdGVtcygpLnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAppbmRleCBmNmVkMTljMGFhNjlhYjgzMTVk
M2EzODE5MmYxODZlYTBhODQ2NTYzLi42NTliODhmOGM3OWFiYTFjNDAxMDFiNjk5MjkxNmQ0ZWI0
NjM3MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKQEAgLTIzOCwx
OSArMjM4LDE5IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJv
d0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKIHsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJ
ZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCBudWxscHRyKTsKKyAg
ICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUo
dGFibGUpLCBudWxscHRyKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0g
Y29yZSh0YWJsZSk7CiAgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUtPm5vZGUoKTsKICAgICAgICAg
aWYgKG5vZGUgJiYgaXNIVE1MVGFibGVFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudChub2RlKS0+
Y2FwdGlvbigpOworICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24g
PSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkuY2FwdGlvbigpOwogICAgICAgICAg
ICAgaWYgKGNhcHRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPmVs
ZW1lbnQoKSktPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRDb2x1bW5EZXNjcmlwdGlvbihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDM0ZDBjYjkxY2ZmOGExZDg2ODZm
NmY5NzA4ZjQ0Yzg2MzdlMWNlNmEuLjVjYjQ0MGE5MDIwODM0NmY5ZTlmNTE3MzMwOGY1YjYxMGUz
MjMwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTE3MSw3ICsxNzEsNyBA
QCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbihBdGtP
YmplY3QqIG9iamVjdCkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSwgMCk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIE5vZGUqIG5vZGUgPSAwOworICAgIE5v
ZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkKICAgICAgICAgbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBjb3JlT2JqZWN0LT5hcmlhUm9s
ZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlIHx8IGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKQEAg
LTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXRE
ZXNjcmlwdGlvbihBdGtPYmplY3QqIG9iamVjdCkKIAogICAgIC8vIGF0a190YWJsZV9nZXRfc3Vt
bWFyeSByZXR1cm5zIGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28g
ZXhwb3NlIHN1bW1hcnkgaGVyZS4KICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
VGFibGVSb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gdG9IVE1MVGFibGVFbGVtZW50
KG5vZGUpLT5zdW1tYXJ5KCk7CisgICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gZG93bmNhc3Q8SFRN
TFRhYmxlRWxlbWVudD4oKm5vZGUpLnN1bW1hcnkoKTsKICAgICAgICAgaWYgKCFzdW1tYXJ5Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KG9i
amVjdCwgQXRrQ2FjaGVkQWNjZXNzaWJsZURlc2NyaXB0aW9uLCBzdW1tYXJ5KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5
T2JqZWN0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJp
bGl0eU9iamVjdElPUy5tbQppbmRleCBlMWZkYzNiM2MyMTA0NWFiOGRjOWJjZjVmNDE0NzFlNWIz
ODQzMjdmLi4xYzliOTM5ZWZlMWFiMDdjMmUzZGExMmVmNzU2Nzk2ODNiYTk5MjA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxp
dHlPYmplY3RJT1MubW0KQEAgLTY3LDExICs2Nyw4IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpCiAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QgfHwgIXJlbmRlck9iamVjdC0+bm9kZSgpIHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKS0+aXNI
VE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KHJlbmRlck9iamVjdC0+
bm9kZSgpKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCkubGVuZ3RoKCk7CisgICAgSFRN
TElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KnJlbmRlck9iamVjdC0+bm9kZSgpKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LnZhbHVlKCku
bGVuZ3RoKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUln
bm9yZUF0dGFjaG1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IGIwZmRmNjViMjk2MmZhOWE4MWViYjk4OTViNzc4
MmNkM2U0ZTZhMTIuLjZmYmExOTk1NDFmYzkwYWE5ZjY0ZjhhOWJiNzIzOGE5OTdlMWIwNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
QEAgLTgzLDE2ICs4MywxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVtR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogICAgIEFTU0VSVChk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAKICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9t
aWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgIGlmICghYXRv
bWljUHJvcGVydHlOYW1lIHx8ICF0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05h
bWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkKKyAgICBpZiAoIWF0b21pY1Byb3BlcnR5TmFt
ZSB8fCAhZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRl
bSgqYXRvbWljUHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAotICAgIGlmIChVTkxJS0VMWSh0b0hUTUxEb2N1bWVudChkb2N1bWVu
dCktPndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVy
dHlOYW1lKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9j
dW1lbnQpLndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJv
cGVydHlOYW1lKSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9u
ID0gZG9jdW1lbnQtPndpbmRvd05hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKICAgICAg
ICAgQVNTRVJUKGNvbGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoY29sbGVjdGlvbikpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHRvSFRNTERvY3VtZW50KGRvY3VtZW50
KS0+d2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBkb3duY2Fz
dDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0
eU5hbWUpKSk7CiB9CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQpAQCAtMjQ2
LDcgKzI0Niw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7CiAgICAgaWYgKGRv
Y3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0
b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgICAgIGlm
IChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5k
b3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY1By
b3BlcnR5TmFtZSAmJiBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93
TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgbmFtZWRJ
dGVtR2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMjMs
NyArMzIzLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHUKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRv
bWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYg
KGF0b21pY1Byb3BlcnR5TmFtZSAmJiB0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRv
d05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJv
cGVydHlOYW1lICYmIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dO
YW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0
ZW1HZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRl
eCAxYWQzYzYyNjY1Y2Q2ZTExNWNhZjg4OWQ1YTI3N2JiMDM1MTVhZWY1Li43OTUzYzZjZDViZTM1
Y2I1YTg1NGJhMDAyZGYwZWM5ZTkxYzYxZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC03Myw4ICs3Myw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFCiAgICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
Y3VtZW50LmRvY3VtZW50TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpOwotICAgIGlmIChV
TkxJS0VMWShlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpKSB7Ci0gICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KGVsZW1lbnQpLT5jb250ZW50RnJhbWUo
KSkKKyAgICBpZiAoVU5MSUtFTFkoaXNIVE1MSUZyYW1lRWxlbWVudChlbGVtZW50KSkpIHsKKyAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqZWxl
bWVudCkuY29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlMoZXhlYywgZnJhbWUpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IGYy
NTFlYjJkZWJmMDIzY2QzNmVjZDRjOTI2MDFhMDBmY2U4Yjg0MTcuLjc3ZWFmZjU4MDE3ZmYxZjJi
NTZlZGYxODc3MDhmNmYyNDI0MDFlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdAogewogICAgIEhUTUxFbGVtZW50JiBlbGVt
ZW50ID0ganNDYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90QmFzZSktPmltcGwoKTsKICAgICBOb2Rl
KiBmcmFtZUVsZW1lbnQgPSBlbGVtZW50LmNoaWxkcmVuKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gdG9IVE1MRnJhbWVFbGVtZW50KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgp
KSB7CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxGcmFtZUVsZW1l
bnQ+KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChKU0RP
TVdpbmRvd1NoZWxsKiB3aW5kb3cgPSB0b0pTRE9NV2luZG93U2hlbGwoZG9jdW1lbnQtPmZyYW1l
KCksIGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHdpbmRvdyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHAKaW5kZXggNjNhMmRjNmFjOGIxMjAyZWM2ZThlNDllNzZhNGM2NTYxNmM2ZmRlYS4u
MmUxZDEyNjZlM2MyM2I4MTRkYTk5ZmVmOTgxNTg2ZWQ3OTUzZmYwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKEpTTm9kZSoganNOb2RlLCBOb2Rl
KiBub2RlLCBTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgaXMgZGVz
dHJveWVkLCBpdHMgbG9hZCBldmVudCB3aWxsIG5vdCBmaXJlLgogICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBET00gc2hvdWxkIG1hbmFnZSB0aGlzIGlzc3VlIHdpdGhvdXQgdGhlIGhlbHAgb2Yg
SmF2YVNjcmlwdCB3cmFwcGVycy4KICAgICAgICAgICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1l
bnQpLmhhc1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KS5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgICAgICAgICAgZWxzZSBpZiAoaXNIVE1MQXVkaW9FbGVtZW50KGVsZW1lbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0b0hUTUxBdWRpb0VsZW1lbnQoZWxlbWVudCkucGF1c2VkKCkp
CisgICAgICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxIVE1MQXVkaW9FbGVtZW50PihlbGVtZW50
KS5wYXVzZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZjgy
ZWQyNzgxYzUwNzI1Y2VkZDE1NDcwMWYwMmRlZGZlMDhjNGVlZi4uNjI2MzIxYzZiODcxY2NjYzdk
ODFmZWEyYjFkY2YwZmRiYjNjNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTY1NSw3ICs2NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUo
Y29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAg
ICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxl
ID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxl
bWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVy
VmlzaWJsZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1
bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlv
bnMuaAppbmRleCAxZGIxOWVjZDYxYTJmZDZjNDMyZTg5NDZlOGM1YjM2NGU3MjEwNjUwLi43ZmE0
ZGM1Yjg5OTBmZWZmZjRiMTcxOWQ0ODAxODA5NTU2ODhmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTg2LDcgKzg2LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIGlzQ2hlY2tlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7CiAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVh
ckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpCisgICAgaWYg
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjE1Yzc5
Y2YzNWI0NzI4ZjA2NzU4YzM0M2NiMDk5NWI5MWU2MmY1YS4uNDI5Yzg0YTE2Njk5ODZkZGNjNTY5
N2I2NmVhOGM5ZjNhYjcxOWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApA
QCAtMTMzOCw3ICsxMzM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICBpZiAoZSAm
JiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsK
ICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9u
cy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8v
IHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2Vy
ZSBleHBsaWNpdGx5IHNpemVkLgotICAgICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlKSB8
fCAhdG9IVE1MSW5wdXRFbGVtZW50KGUpLT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgIGlmICgh
aXNIVE1MSW5wdXRFbGVtZW50KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZSku
aXNJbWFnZUJ1dHRvbigpKQogICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCAxMDNlNjQx
YWM2ZTdjNWViNDBjMTc1MzJlYTAxNDQ1ZjYxMWMxNTJmLi4wNzIwMDM3ZTlhODdkMDM0MGRkMTA5
ODA0NWJkODJhMzIzZWRiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgU3R5bGVTaGVldCogU3R5bGVTaGVldExpc3Q6Oml0ZW0odW5zaWdu
ZWQgaW5kZXgpCiBIVE1MU3R5bGVFbGVtZW50KiBTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElFIGFsc28g
c3VwcG9ydHMgcmV0cmlldmluZyBhIHN0eWxlc2hlZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUv
aWQgb2YgdGhlIDxzdHlsZT4gdGFnCiAgICAgLy8gKHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGFs
bCB0aGUgb3RoZXIgY29sbGVjdGlvbnMpCkBAIC03Nyw4ICs3Nyw4IEBAIEhUTUxTdHlsZUVsZW1l
bnQqIFN0eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAogICAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2Ug
YW55d2F5IDspCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmdldEVsZW1lbnRC
eUlkKG5hbWUpOwogICAgIGlmIChlbGVtZW50ICYmIGlzSFRNTFN0eWxlRWxlbWVudChlbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggYzBmMTgwYzgyNjk4
YjY5ZGE1Y2VmOGNmMmIyYzQ5YjYyMDUwYTkzZi4uMjAzN2JiN2ZiODMzMGQyNjgwYmZlNWMxM2Ew
OTkwODU5NjFiOWRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVy
LmNwcApAQCAtMjc4NSw3ICsyNzg1LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVu
aXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KgogICAgIGlm
IChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICBpZiAo
Y2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPmVsZW1lbnRTdHls
ZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVy
VmlzaWJsZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNzk3LDE0ICsyNzk3
LDE0IEBAIHN0YXRpYyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRl
c3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCoKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHls
ZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXRVbmlxdWUoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQ
bGFjZWhvbGRlclZpc2libGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0
aWMgYm9vbCBpc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1
cm4gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgdG9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICBy
ZXR1cm4gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJs
ZSgpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFz
UGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1cnJlbnRTY3JpcHRJbmNyZW1lbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlci5oCmluZGV4IGY3ZTg0MWE3MGI3NDFjZTE0OWMwODVlMjJmNTY2
ZGI1NDZjOTU5YmMuLjdjNDg4YzA3MTg3MmUyN2RjODM3NWY0MGMwOGU0YTA0NzZlZGI5YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VycmVudFNjcmlwdEluY3JlbWVudGVyLmgKQEAgLTQy
LDcgKzQyLDcgQEAgcHVibGljOgogICAgICAgICAsIG1faXNIVE1MU2NyaXB0RWxlbWVudChpc0hU
TUxTY3JpcHRFbGVtZW50KGVsZW1lbnQpKQogICAgIHsKICAgICAgICAgaWYgKG1faXNIVE1MU2Ny
aXB0RWxlbWVudCkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KHRv
SFRNTFNjcmlwdEVsZW1lbnQoZWxlbWVudCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cHVz
aEN1cnJlbnRTY3JpcHQoZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICB9CiAKICAgICB+Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKaW5kZXggNGNiZmFmMTM1Mzc2ZTVjYzk5YmViOWJlMDJjNjQ5NzIwZWI0ODgw
ZC4uMTljZjljMjJmOGE0NTVhNzM4OGU4ZjNhMDc0MzZjMjg5Y2EwYjBjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFUcmFuc2Zlci5jcHAKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBpbnQgeSkKIAogICAgIENh
Y2hlZEltYWdlKiBpbWFnZTsKICAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgaW1hZ2UgPSB0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCktPmNhY2hlZEltYWdlKCk7CisgICAgICAgIGltYWdlID0g
ZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKmVsZW1lbnQpLmNhY2hlZEltYWdlKCk7CiAgICAg
ZWxzZQotICAgICAgICBpbWFnZSA9IDA7CisgICAgICAgIGltYWdlID0gbnVsbHB0cjsKIAogICAg
IG1fZHJhZ0xvY2F0aW9uID0gSW50UG9pbnQoeCwgeSk7CiAKQEAgLTI3MCw3ICsyNzAsNyBAQCB2
b2lkIERhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBp
bnQgeSkKICAgICAgICAgbV9kcmFnSW1hZ2VMb2FkZXItPnN0YXJ0TG9hZGluZyhtX2RyYWdJbWFn
ZSk7CiAgICAgfQogCi0gICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gaW1hZ2UgPyAwIDogZWxlbWVu
dDsKKyAgICBtX2RyYWdJbWFnZUVsZW1lbnQgPSBpbWFnZSA/IG51bGxwdHIgOiBlbGVtZW50Owog
CiAgICAgdXBkYXRlRHJhZ0ltYWdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0
MmQwZTBkYWUyMzhkZTBhN2Y2N2EzOTM1NDFiYjY1MzI3OGExOGZjLi5lMGE3MDYxNGQ1NzRjYTlj
YzY0YzJmMmU3M2M1ZGZiMTJiOGU5MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE1
NTEsOCArMTU1MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0
bGUpCiAgICAgLy8gVGhlIERPTSBBUEkgaGFzIG5vIG1ldGhvZCBvZiBzcGVjaWZ5aW5nIGRpcmVj
dGlvbiwgc28gYXNzdW1lIExUUi4KICAgICB1cGRhdGVUaXRsZShTdHJpbmdXaXRoRGlyZWN0aW9u
KHRpdGxlLCBMVFIpKTsKIAotICAgIGlmIChtX3RpdGxlRWxlbWVudCAmJiBpc0hUTUxUaXRsZUVs
ZW1lbnQobV90aXRsZUVsZW1lbnQuZ2V0KCkpKQotICAgICAgICB0b0hUTUxUaXRsZUVsZW1lbnQo
bV90aXRsZUVsZW1lbnQuZ2V0KCkpLT5zZXRUZXh0KHRpdGxlKTsKKyAgICBpZiAobV90aXRsZUVs
ZW1lbnQgJiYgaXNIVE1MVGl0bGVFbGVtZW50KCptX3RpdGxlRWxlbWVudCkpCisgICAgICAgIGRv
d25jYXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkuc2V0VGV4dCh0aXRsZSk7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlRWxlbWVudChjb25zdCBTdHJpbmdXaXRoRGly
ZWN0aW9uJiB0aXRsZSwgRWxlbWVudCogdGl0bGVFbGVtZW50KQpAQCAtMjg4MSw3ICsyODgxLDcg
QEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNldENvb2tpZSB3
b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4u
Lj4KICAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vIEV4Y2Vw
dGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9yZWQuCi0gICAgICAgICAgICB0b0hU
TUxEb2N1bWVudCh0aGlzKS0+c2V0Q29va2llKGNvbnRlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICAgICAgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqdGhpcykuc2V0Q29va2llKGNvbnRl
bnQsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC00
NjUyLDE0ICs0NjUyLDE0IEBAIGNvbnN0IFZlY3RvcjxJY29uVVJMPiYgRG9jdW1lbnQ6Omljb25V
UkxzKGludCBpY29uVHlwZXNNYXNrKQogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuLT5p
dGVtKGkpOwogICAgICAgICBpZiAoIWNoaWxkLT5oYXNUYWdOYW1lKGxpbmtUYWcpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSB0
b0hUTUxMaW5rRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGlmICghKGxpbmtFbGVtZW50LT5pY29u
VHlwZSgpICYgaWNvblR5cGVzTWFzaykpCisgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0Vs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KCpjaGlsZCk7CisgICAgICAgIGlmICgh
KGxpbmtFbGVtZW50Lmljb25UeXBlKCkgJiBpY29uVHlwZXNNYXNrKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAobGlua0VsZW1lbnQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAg
ICAgIGlmIChsaW5rRWxlbWVudC5ocmVmKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gUHV0IGl0IGF0IHRoZSBmcm9udCB0byBlbnN1cmUgdGhhdCBpY29u
cyBzZWVuIGxhdGVyIHRha2UgcHJlY2VkZW5jZSBhcyByZXF1aXJlZCBieSB0aGUgc3BlYy4KLSAg
ICAgICAgSWNvblVSTCBuZXdVUkwobGlua0VsZW1lbnQtPmhyZWYoKSwgbGlua0VsZW1lbnQtPmlj
b25TaXplcygpLCBsaW5rRWxlbWVudC0+dHlwZSgpLCBsaW5rRWxlbWVudC0+aWNvblR5cGUoKSk7
CisgICAgICAgIEljb25VUkwgbmV3VVJMKGxpbmtFbGVtZW50LmhyZWYoKSwgbGlua0VsZW1lbnQu
aWNvblNpemVzKCksIGxpbmtFbGVtZW50LnR5cGUoKSwgbGlua0VsZW1lbnQuaWNvblR5cGUoKSk7
CiAgICAgICAgIG1faWNvblVSTHMuYXBwZW5kKG5ld1VSTCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4YjZjMWU2ZmU1NmQ3NzFjMGMy
ZmFlMmJkNWI2NTk3MDIwN2E4MDUuLjc3ZWVjM2I3NWY0OWE4MDAyNGQ2YjA5MTE1YzIzYTE5ZmQy
OWIzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC01
MywxOCArNTMsMTggQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hlc05hbWUoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogCiBpbmxpbmUgYm9vbCBrZXlN
YXRjaGVzTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgdG9I
VE1MTWFwRWxlbWVudChlbGVtZW50KS5nZXROYW1lKCkuaW1wbCgpID09ICZrZXk7CisgICAgcmV0
dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+
KGVsZW1lbnQpLmdldE5hbWUoKS5pbXBsKCkgPT0gJmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5
TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVt
ZW50KSAmJiB0b0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwo
KSA9PSAma2V5OworICAgIHJldHVybiBpc0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpICYmIGRvd25j
YXN0PEhUTUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkubG93ZXIoKS5pbXBsKCkgPT0g
JmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8v
IEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxkIG1hdGNoIGJvdGggaW1h
Z2UgYW5kIG9iamVjdCBlbGVtZW50cy4KLSAgICByZXR1cm4gaXNIVE1MSW1hZ2VFbGVtZW50KGVs
ZW1lbnQpICYmIHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5tYXRjaGVzTG93ZXJjYXNlZFVz
ZW1hcChrZXkpOworICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkubWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAo
a2V5KTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE2OCwy
MiArMTY4LDIyIEBAIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TmFt
ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBE
b2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiB0
b0hUTUxNYXBFbGVtZW50KGdldDxrZXlNYXRjaGVzTWFwTmFtZT4oa2V5LCBzY29wZSkpOworICAg
IHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZ2V0PGtleU1hdGNoZXNNYXBOYW1lPihr
ZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwg
Y29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxl
bWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3BlKSk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRN
YXBOYW1lPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50T3Jk
ZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
SFRNTEltYWdlRWxlbWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXA+KGtleSwgc2Nv
cGUpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZ2V0PGtleU1hdGNo
ZXNMb3dlcmNhc2VkVXNlbWFwPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxMYWJlbEVsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewot
ICAgIHJldHVybiB0b0hUTUxMYWJlbEVsZW1lbnQoZ2V0PGtleU1hdGNoZXNMYWJlbEZvckF0dHJp
YnV0ZT4oa2V5LCBzY29wZSkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MTGFiZWxFbGVtZW50
PihnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKSk7CiB9CiAKIEVs
ZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
LmNwcAppbmRleCBkN2E5ZDY2NjczYTZhZTNlYjAxMzFmZjAzYTNmYjMwNDBlZTBkNmNmLi42MWQ5
OWE3MWM0YjljMTk2MDM4NjRjY2IyMDI5YWM4MDBjN2I0OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yODYsNyAr
Mjg2LDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZl
U3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKICAgICAgICAgICAgIGJvb2wgZW5hYmxl
ZFZpYVNjcmlwdCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzSFRNTExpbmtFbGVtZW50KGVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGxp
bmtFbGVtZW50LmlzRGlzYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgZW5hYmxlZFZpYVNjcmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZp
YVNjcmlwdCgpOwpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTCiAg
ICAgICAgICAgICBpZiAoaXNTVkdTdHlsZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgc2hlZXQgPSBkb3duY2FzdDxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICBzaGVldCA9IHRvSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpLnNoZWV0KCk7CisgICAg
ICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpLnNo
ZWV0KCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQgPSB0b0hUTUxT
dHlsZUVsZW1lbnQoZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRv
d25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKICAgICAg
ICAgICAgIC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0
aGFuCiAgICAgICAgICAgICAvLyBQRVJTSVNURU5UKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCAzZTA2ZWQ3MGMyNTE1YTI4NTRjNTc3YTBhNjI0N2YzM2Q3YjE1ZWE2Li45MWZlMmE4NWFjN2Ix
NTYwYTljNTAxNmVkZDA4ODcxMWExNTk4ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50
UmFyZURhdGEoKS0+Y2xlYXJDbGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRy
ZWVTY29wZSogbmV3U2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRN
TERvY3VtZW50KiBuZXdEb2N1bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAm
JiBuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1
bWVudCgmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1
bWVudCogbmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgbmV3
U2NvcGUtPmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVudCgpID8gZG93bmNhc3Q8SFRNTERv
Y3VtZW50PigmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgIGlmIChu
ZXdTY29wZSAhPSAmdHJlZVNjb3BlKCkpCiAgICAgICAgIG5ld1Njb3BlID0gbnVsbHB0cjsKIApA
QCAtMTM4MSw3ICsxMzgxLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJiBpbnNlcnRpb25Qb2ludCkKIAogICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0luVHJlZVNj
b3BlKCkpIHsKICAgICAgICAgVHJlZVNjb3BlKiBvbGRTY29wZSA9ICZpbnNlcnRpb25Qb2ludC50
cmVlU2NvcGUoKTsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVudCA9IGluRG9jdW1l
bnQoKSAmJiBvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hU
TUxEb2N1bWVudCgmb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgICAg
ICBIVE1MRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVudCgpICYmIG9sZFNjb3BlLT5k
b2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IGRvd25jYXN0PEhUTUxEb2N1bWVudD4o
Jm9sZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKG9sZFNj
b3BlICE9ICZ0cmVlU2NvcGUoKSB8fCAhaXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgb2xk
U2NvcGUgPSBudWxscHRyOwogCkBAIC0yNTkwLDcgKzI1OTAsNyBAQCBpbmxpbmUgdm9pZCBFbGVt
ZW50Ojp1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkb2N1bWVudCgpLmlzSFRNTERvY3Vt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQodG9IVE1M
RG9jdW1lbnQoZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOworICAgIHVwZGF0ZU5hbWVG
b3JEb2N1bWVudChkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KCkpLCBvbGROYW1lLCBu
ZXdOYW1lKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKFRyZWVT
Y29wZSYgc2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuZXdOYW1lKQpAQCAtMjYzOCw3ICsyNjM4LDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6
dXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXcKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgdXBkYXRlSWRGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVu
dChkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1N
YXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKKyAgICB1cGRhdGVJZEZvckRvY3Vt
ZW50KGRvd25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZElkLCBuZXdJZCwgVXBk
YXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJpYnV0
ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlSWRGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBz
Y29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJ
ZCkKQEAgLTI2ODUsOSArMjY4NSw5IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlTGFiZWwoVHJlZVNj
b3BlJiBzY29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQotICAg
ICAgICBzY29wZS5yZW1vdmVMYWJlbCgqb2xkRm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCAqdG9I
VE1MTGFiZWxFbGVtZW50KHRoaXMpKTsKKyAgICAgICAgc2NvcGUucmVtb3ZlTGFiZWwoKm9sZEZv
ckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKnRoaXMp
KTsKICAgICBpZiAoIW5ld0ZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgc2Nv
cGUuYWRkTGFiZWwoKm5ld0ZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRvSFRNTExhYmVsRWxl
bWVudCh0aGlzKSk7CisgICAgICAgIHNjb3BlLmFkZExhYmVsKCpuZXdGb3JBdHRyaWJ1dGVWYWx1
ZS5pbXBsKCksIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KCp0aGlzKSk7CiB9CiAKIHZvaWQg
RWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVl
KQpAQCAtMjc0MSwxMSArMjc0MSwxMCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBFbGVt
ZW50OjplbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eQogICAgIGlm
IChIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGNhY2hlZEhUTUxDb2xsZWN0aW9uKHR5cGUp
KQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbjsKIAotICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gY29sbGVjdGlvbjsKICAgICBpZiAodHlwZSA9PSBUYWJsZVJvd3MpIHsKLSAgICAgICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlv
bjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4odG9IVE1MVGFibGVFbGVtZW50KCp0aGlzKSwgdHlw
ZSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFk
ZENhY2hlZENvbGxlY3Rpb248SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+KGRvd25jYXN0PEhUTUxU
YWJsZUVsZW1lbnQ+KCp0aGlzKSwgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFNlbGVj
dE9wdGlvbnMpIHsKLSAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxp
c3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KHRvSFRNTFNl
bGVjdEVsZW1lbnQoKnRoaXMpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24+KGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqdGhpcyksIHR5cGUpOwogICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBGb3JtQ29udHJvbHMpIHsKICAgICAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoZm9ybVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogICAgICAgICByZXR1cm4g
ZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uPigqdGhpcywgdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGFhMWEwMGFjNjllMDk3YTgwMDY3OWNjMTJhZTM5ODM1
MWIwYTY1MDIuLjQwOTRmMzNjOTIyZGY1MDFkNDk1ZWYzNWRlMjkxYWFkNThkMDA3NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zNTcsMTcgKzM1NywxNyBAQCBi
b29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQ
dHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBjbGlja0hh
bmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlLmdldCgpKSkKLSAg
ICAgICAgdG9IVE1MSW5wdXRFbGVtZW50KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQs
IGNsaWNrSGFuZGxpbmdTdGF0ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAK
ICAgICBpZiAoIWV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgZGlzcGF0Y2hFdmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5k
b3dFdmVudENvbnRleHQpOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCgmZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgw
KTsKKyAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKICAgICBldmVudC0+c2V0
RXZlbnRQaGFzZSgwKTsKIAogICAgIGlmIChjbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0g
ICAgICAgIHRvSFRNTElucHV0RWxlbWVudCgqbm9kZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpl
dmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdT
dGF0ZSk7CiAKICAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBE
T00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCiAgICAgLy8gZGVmYXVsdCBoYW5k
bGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVy
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggNjA5NmM1ODQxZmZjOTg2
NWY5MGZmMjJmODNjYjE2NzcyNTA5NDMyYi4uZTMwNTZjMzYwMTI0OWVlMzllMzE4MjdjYWQyY2I4
OGVjYTI2YWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMzgzLDcg
KzM4Myw3IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKIFNj
cmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICBpZiAoaXNIVE1MU2NyaXB0RWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJu
IHRvSFRNTFNjcmlwdEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MU2NyaXB0RWxlbWVudD4oZWxlbWVudCk7CiAKICAgICBpZiAoaXNTVkdTY3JpcHRFbGVtZW50
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU2NyaXB0RWxlbWVudD4oZWxl
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggNzViOTY4
OWM4MGQzN2Y1NDdlYmVmZTU0N2ZmNDE1Mzk1ZGUxNTQ2Zi4uNGMyMmQwMDczNmRmZmUwMzI1ZTFi
YTExYzA4ODk2MDRkZTYyZWUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRl
LmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVT
dHlsZUZvckFsbExpbmtzKCkKIGlubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXNI
VE1MQW5jaG9yRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTEFuY2hvckVs
ZW1lbnQoZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CiAgICAgaWYg
KGNvbnN0IEF0b21pY1N0cmluZyogYXR0cmlidXRlID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudC5iYXNlVVJM
KCksICphdHRyaWJ1dGUpOwogICAgIHJldHVybiAwOwpAQCAtMTAxLDcgKzEwMSw3IEBAIEVJbnNp
ZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1l
bnQmIGVsZW1lbnQpCiAKICAgICBMaW5rSGFzaCBoYXNoOwogICAgIGlmIChpc0hUTUxBbmNob3JF
bGVtZW50KGVsZW1lbnQpKQotICAgICAgICBoYXNoID0gdG9IVE1MQW5jaG9yRWxlbWVudChlbGVt
ZW50KS52aXNpdGVkTGlua0hhc2goKTsKKyAgICAgICAgaGFzaCA9IGRvd25jYXN0PEhUTUxBbmNo
b3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBlbHNlCiAgICAgICAg
IGhhc2ggPSBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goZWxlbWVudC5kb2N1bWVudCgpLmJhc2VV
UkwoKSwgKmF0dHJpYnV0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtl
X25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNDViOGRi
NTE4ZDg4NGU3NDQ2ZmM2MzU4ZDlmM2JmMWM5ZmIyOGJlOS4uNGRkZWRjMTdjODkyOWY4ODhjMmVj
ZWJkNzI2Y2Q2YmVkODI1ODQzZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2Vf
bmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTY2Niwx
NCArNjY2LDYgQEAgc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFy
Z1R5cGU+IHsKIH07CiBFTkQKICAgICAgICAgOwotICAgICAgICBpZiAoJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfSBlcSAiSFRNTCIpIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKLS8vIEZJWE1F
OiBSZW1vdmUgdGhlc2UgbWFjcm9zIG9uY2UgdGhlIGNvZGUgaGFzIGJlZW4gcG9ydGVkIHRvIHVz
aW5nCi0vLyBkb3duY2FzdDwqRWxlbWVudD4oKS4KLSNkZWZpbmUgdG8kY2xhc3MoeCkgV2ViQ29y
ZTo6ZG93bmNhc3Q8V2ViQ29yZTo6JGNsYXNzPih4KQotRU5ECi0gICAgICAgICAgICA7Ci0gICAg
ICAgIH0KICAgICAgICAgcHJpbnQgRiAiXG4iOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCBiMmU1ZDNhODAwM2VlNGEwYTQ4OGFhNWE1NWEwZjFmMGJkY2Y1M2UwLi5l
OTBmZGZhMzNkYzI0ZmI1MzJjMTQ4YTlmNDMyYmI2MWMzNDkyOTQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6
OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogICAgIC8vIElmIHRoZSB0YXJnZXQg
aXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBv
ZiBpdHMgc2hhZG93IHRyZWUsCiAgICAgLy8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBm
b3IgdGhhdCB0ZXh0IGNvbnRyb2wuCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHRGb3JtQ29udHJvbE9mU2VsZWN0aW9uU3RhcnQgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
c2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
RnJvbUNvbnRyb2xPZlRhcmdldCA9IGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmV2ZW50
LT50YXJnZXQoKS0+dG9Ob2RlKCkpID8gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpKSA6IG51bGxwdHI7CisgICAgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQqIHRleHRGcm9tQ29udHJvbE9mVGFyZ2V0ID0gaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgqZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgPyBkb3duY2FzdDxIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudD4oZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgOiBudWxscHRyOwog
ICAgIGlmICh0ZXh0RnJvbUNvbnRyb2xPZlRhcmdldCAmJiAoc2VsZWN0aW9uLnN0YXJ0KCkuaXNO
dWxsKCkgfHwgdGV4dEZyb21Db250cm9sT2ZUYXJnZXQgIT0gdGV4dEZvcm1Db250cm9sT2ZTZWxl
Y3Rpb25TdGFydCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0ZXh0RnJv
bUNvbnRyb2xPZlRhcmdldC0+c2VsZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVNlbGVjdGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgc2VsZWN0aW9uLmlzRGlyZWN0aW9u
YWwoKSk7CkBAIC0zMjEsMTggKzMyMSwxOCBAQCBib29sIEVkaXRvcjo6Y2FuQ3V0KCkgY29uc3QK
IHN0YXRpYyBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudC5pc0ltYWdlRG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IEhUTUxFbGVtZW50KiBib2R5ID0gZG9jdW1lbnQuYm9keSgpOwogICAgIGlmICghYm9keSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUq
IG5vZGUgPSBib2R5LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFpc0hUTUxJbWFnZUVsZW1l
bnQobm9kZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0hUTUxJbWFnZUVsZW1l
bnQobm9kZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50Pihub2RlKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25z
dApAQCAtMzUzMywxOCArMzUzMywxOCBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIHsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoIW5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0T3JMaW5lQnJlYWsoKSkK
ICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCgqbm9kZSkpCi0gICAgICAgICAgICBub2RlID0gdG9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudChub2RlKS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkudmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSku
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBlbHNlIGlmIChub2Rl
LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAwZTNmM2ZlMDM5YzA3ZDVhMjFmMTkwNWQ5
ZmVkMDUyODQ2MDAzZjQyLi44ZGI3MmNmOWFjYWQyZDlkZjI0NGQyZjY0MWJlMTU0MTgyOGMwMGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTY3MCwx
NiArMTY3MCwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAKICAgICBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmIChmb2N1c2Vk
RWxlbWVudCAmJiBmb2N1c2VkRWxlbWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVu
dChkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChzZWxlY3RFbGVtZW50
LT5jYW5TZWxlY3RBbGwoKSkgewotICAgICAgICAgICAgc2VsZWN0RWxlbWVudC0+c2VsZWN0QWxs
KCk7CisgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGlzSFRNTFNlbGVjdEVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CisgICAgICAgIGlm
IChzZWxlY3RFbGVtZW50LmNhblNlbGVjdEFsbCgpKSB7CisgICAgICAgICAgICBzZWxlY3RFbGVt
ZW50LnNlbGVjdEFsbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwotICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFyZ2V0
ID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4gcm9vdDsKKyAgICBOb2RlKiBzZWxlY3RTdGFydFRhcmdl
dCA9IG51bGxwdHI7CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsK
ICAgICAgICAgcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7
CiAgICAgICAgIGlmIChOb2RlKiBzaGFkb3dSb290ID0gbV9zZWxlY3Rpb24ubm9uQm91bmRhcnlT
aGFkb3dUcmVlUm9vdE5vZGUoKSkKQEAgLTE2ODksNyArMTY4OSw3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEFsbCgpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fc2VsZWN0aW9u
LmlzTm9uZSgpICYmIGZvY3VzZWRFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAoZm9jdXNlZEVs
ZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICB0b0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KGZvY3VzZWRFbGVtZW50KS0+c2VsZWN0KCk7CisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVu
dCkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcm9vdCA9IGZvY3VzZWRFbGVtZW50LT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290
Tm9kZSgpOwpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2Nh
bkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiAgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMu
ZnJvbSgqc3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gKml0OwogICAgICAgICBpZiAoaXNIVE1M
Rm9ybUVsZW1lbnQoJmVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVt
ZW50KCZlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1l
bnQ+KCZlbGVtZW50KTsKICAgICAgICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVu
dCkuZm9ybSgpOwogICAgICAgICBpZiAoaXNIVE1MRnJhbWVFbGVtZW50QmFzZShlbGVtZW50KSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCAy
MTVhYTdhZWUyMDVlMmU1OGY3YTdjZTMxYzJmMjNjNTE5NjZmMmJiLi4xOGU1ODk0ZDJjYjFjNWY0
YWUxZjRlMjI5Mzk0OGU5NmIzMTczN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9k
ZSogbm9kCiAKICAgICBpZiAoISh0YXJnZXROb2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyh0YXJnZXROb2RlKSkpIHsKICNpZiBFTkFCTEUo
VEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFz
VGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQodGFyZ2V0Tm9kZSku
Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJnZXROb2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyBk
b3duY2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50Pih0YXJnZXROb2RlKS5jb250ZW50KCktPmZpcnN0
Q2hpbGQoKSA6IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2Vsc2UKICAgICAgICAgTm9kZSog
Y3VycmVudCA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDBiMDI0
NjI3MmQ5NTU3MmUyNDJlNjAwZWJlNDdkZmE3YTY3NTE0OWQuLmJkNTM2ZjA3OWYyMWZhY2U4M2Jk
ZTRiZjgzODM2MDcxYjEyZjcxOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMjczLDcgKzEyNzMsNyBAQCBib29sIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNs
b3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVt
ZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bh
c3N3b3JkRmllbGQoKSkKKyAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50
KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wp
LmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERpc2FibGUgc21h
cnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA0MDIyNWYwNmZh
YzZlY2VjMzg3ZmU1NGQxMmRhYmM0NTc2NmYyMjY0Li5iYTgzMjVmNTZjZWE0OWE4YzFjNTY4YWFi
MDBkYzRiOGRkNTU4MTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5jcHAKQEAgLTY1OCwxMyArNjU4LDEzIEBAIEVsZW1lbnQqIFZpc2libGVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogCiBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpu
b25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRh
cnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRl
ZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVl
Um9vdE5vZGUoKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdAogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0
ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAgICByZXR1
cm4gdGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hU
TUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1
cm4gdGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpOwog
fQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCmluZGV4IDhiYjc0OTZiOTVlMjQwMjIxZjRlN2E2YjNkMzg5YmY0MTdkMjgz
NzMuLjI0YmE1ZTFhMDIyNGU1MDk3MGQ4OTcwMzQ0ZmI3ODYxNjhhMTAyODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTIwMzUsNyArMjAz
NSw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSAiZGVjaW1h
bCI7CiAgICAgICAgIGxpc3QgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRMaXN0IGFsbG9jXSBp
bml0V2l0aE1hcmtlckZvcm1hdDpTdHJpbmcoInsiICsgbGlzdFN0eWxlVHlwZSArICJ9Iikgb3B0
aW9uczowXSk7CiAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSB0b0hUTUxPTGlzdEVsZW1l
bnQoZWxlbWVudCkuc3RhcnQoKTs7CisgICAgICAgICAgICBOU0ludGVnZXIgc3RhcnRpbmdJdGVt
TnVtYmVyID0gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oZWxlbWVudCkuc3RhcnQoKTsKICAg
ICAgICAgICAgIFtsaXN0IHNldFN0YXJ0aW5nSXRlbU51bWJlcjpzdGFydGluZ0l0ZW1OdW1iZXJd
OwogICAgICAgICB9CiAgICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsK
QEAgLTIwNDMsNyArMjA0Myw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgX2FkZFF1b3RlRm9y
RWxlbWVudChlbGVtZW50LCBZRVMsIF9xdW90ZUxldmVsKyspOwogICAgIH0gZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1l
bnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50
KTsKICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQudHlwZSgpID09ICJ0ZXh0IikgewogICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSgpOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3RoXSA+IDApCkBAIC0yMDUyLDcg
KzIwNTIsNyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCBOU0ludGVnZXIgZGVwdGgpCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKICAgICAgICAgaWYgKGlzSFRNTFRleHRBcmVh
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4
dEFyZWFFbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAg
ICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dEFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB0
ZXh0QXJlYUVsZW1lbnQudmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUg
bGVuZ3RoXSA+IDApCiAgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAwYWFjYWQ0NTdmMDUw
YjA0MmVmYzZjYWMwNDhkNTdiZmY4Y2QwODdjLi5lMGViMzY5YzI0M2IwMGYyZDg0MjhjMDAyZTA0
N2I2ODNlOWRkZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBA
IC0xODEsMTIgKzE4MSwxMiBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5n
ZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgICAgICByZXR1
cm47CiAKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGZvY3VzZWRFbGVt
ZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCAoZm9jdXNlZEVsZW1lbnQtPmhhc1RhZ05h
bWUoaW5wdXRUYWcpICYmCi0gICAgICAgICh0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNlZEVsZW1l
bnQpLT5pc1RleHRGaWVsZCgpIHx8Ci0gICAgICAgICB0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpLT5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKKyAgICBpZiAoZm9jdXNlZEVsZW1lbnQg
JiYgKGlzSFRNTFRleHRBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkgfHwgKGlzSFRNTElucHV0
RWxlbWVudChmb2N1c2VkRWxlbWVudCkKKyAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQorICAgICAgICAgICAgfHwgZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkp
KSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdG9IVE1MRWxlbWVudChmb2N1c2VkRWxlbWVu
dCktPnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKKyAgICAgICAgdG9IVE1MRWxl
bWVudCgqZm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsK
ICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmMyMmJm
ZTI4YTEwNGViYWYxNTQ2MDFkZmU4Yzk4ODliMmYyMWVkZC4uNDNlNjk1NzM0MGFkYmU0NTZiZmNi
ZmNiMzQ1ZmM3MGM4YmU0ODgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzQ2
LDcgKzc0Niw3IEBAIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSogbm9kZSkKICAgICBpZiAo
IWlzSFRNTERpdkVsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhU
TUxEaXZFbGVtZW50JiBlbGVtZW50ID0gdG9IVE1MRGl2RWxlbWVudCgqbm9kZSk7CisgICAgSFRN
TERpdkVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRGl2RWxlbWVudD4oKm5vZGUpOwog
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCmluZGV4IDJlMmQ5YmQzYjBhM2Ri
ZTRjODIyNmU2MDk1Yjc3YjBhMDgwZDAyOGQuLmVhOTEzMTE4YTA5N2MzZDAyYjNkY2YzNjgwMTE4
MzAwOGI4MWYxNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCkBAIC0y
MjgsNyArMjI4LDcgQEAgVmVjdG9yPENvbG9yPiBDb2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMo
KSBjb25zdAogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRh
dGFMaXN0KCk7CiAgICAgaWYgKGRhdGFMaXN0KSB7CiAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gb3B0aW9ucyA9IGRhdGFMaXN0LT5vcHRpb25zKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50
KG9wdGlvbnMtPml0ZW0oaSkpOyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
SFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pihv
cHRpb25zLT5pdGVtKGkpKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1Zh
bGlkVmFsdWUob3B0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIENvbG9yIGNvbG9yKG9wdGlvbi0+dmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDM1ZTMyZDM4MTRlMDdjMGExYWY2
MzExMDIwODFmNGU3MjhhOWM3M2YuLmQ2ZjE0ZDczNTM1MzIzNjkxZmM5NmY4YjBmOGZjZjNiMzg2
ODhmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
CkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6bG9h
ZERvY3VtZW50VGVtcGxhdGUoKQogICAgIGVsc2UgaWYgKCFpc0hUTUxUYWJsZUVsZW1lbnQodGFi
bGVFbGVtZW50LmdldCgpKSkKICAgICAgICAgTE9HX0VSUk9SKCJFbGVtZW50IG9mIGlkIFwiZnRw
RGlyZWN0b3J5VGFibGVcIiBpcyBub3QgYSB0YWJsZSBlbGVtZW50Iik7CiAgICAgZWxzZSAKLSAg
ICAgICAgbV90YWJsZUVsZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50Lmdl
dCgpKTsKKyAgICAgICAgbV90YWJsZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50
Pih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogCiAgICAgLy8gQmFpbCBpZiB3ZSBmb3VuZCB0aGUgdGFi
bGUgZWxlbWVudAogICAgIGlmIChtX3RhYmxlRWxlbWVudCkKQEAgLTMxMSw3ICszMTEsNyBAQCBi
b29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAK
ICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIG9uZSBtYW51YWxseQogICAgIHRhYmxlRWxlbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKLSAgICBtX3RhYmxl
RWxlbWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQuZ2V0KCkpOworICAgIG1f
dGFibGVFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50Lmdl
dCgpKTsKICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRy
LCAiZnRwRGlyZWN0b3J5VGFibGUiKTsKIAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSB0
YWJsZSBlbGVtZW50LCBsZXRzIHRyeSB0byBhcHBlbmQgb3VyIG93biB0byB0aGUgYm9keQpAQCAt
MzM2LDcgKzMzNiw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZUJh
c2ljRG9jdW1lbnQoKQogICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKGJvZHlFbGVtZW50LCBJ
R05PUkVfRVhDRVBUSU9OKTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBk
b2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhYmxlVGFnLCBmYWxzZSk7Ci0gICAgbV90YWJsZUVs
ZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50LmdldCgpKTsKKyAgICBtX3Rh
YmxlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlRWxlbWVudC5nZXQo
KSk7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwg
ImZ0cERpcmVjdG9yeVRhYmxlIik7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnN0eWxlQXR0ciwgIndpZHRoOjEwMCUiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDQ0ZWUwNTA3YWQ3NWU0NmY2NGY1
YThhZTJhMGYwNDdkODEwYjA2NzUuLjlkZjQwNTk4OTI0OThjZWRjZjIzNmRjNDZhY2VhM2RhMTAz
ZDExYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5j
cHAKQEAgLTk2LDEwICs5NiwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6ZmluZEFzc29jaWF0ZWRGb3JtKGNvbnN0IEhUTUxFbGVtZW50KiBlbAogICAgICAgICAv
LyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVx
dWFsIHRvCiAgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0
IHRoZSByZXN1bHQgb2YKICAgICAgICAgLy8gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoKSBv
dmVyIHRoZSBnaXZlbiBlbGVtZW50LgotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0g
PSAwOworICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSBudWxscHRyOwogICAgICAg
ICBFbGVtZW50KiBuZXdGb3JtQ2FuZGlkYXRlID0gZWxlbWVudC0+dHJlZVNjb3BlKCkuZ2V0RWxl
bWVudEJ5SWQoZm9ybUlkKTsKICAgICAgICAgaWYgKG5ld0Zvcm1DYW5kaWRhdGUgJiYgaXNIVE1M
Rm9ybUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSkpCi0gICAgICAgICAgICBuZXdGb3JtID0gdG9I
VE1MRm9ybUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBuZXdGb3JtID0g
ZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0
dXJuIG5ld0Zvcm07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCmluZGV4IGYxNjBhMmI4MWQxNDY0NjlkMWNlYWNmMmJmYTg5ZDljNTJiMTk4NDEuLjM0
YWZlYjlmODlmZDNmMjM4MTk4NDU0N2M3MDI0NzMwNWI4ZDM4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNjEsMTYgKzE2MSwxNiBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZl
bnQqIGV2ZW50KQogICAgIGlmICghaXNIVE1MSW1hZ2VFbGVtZW50KHRhcmdldCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHRvSFRNTElt
YWdlRWxlbWVudCh0YXJnZXQpOwotICAgIGlmICghaW1hZ2VFbGVtZW50IHx8ICFpbWFnZUVsZW1l
bnQtPmlzU2VydmVyTWFwKCkpCisgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2VFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKnRhcmdldCk7CisgICAgaWYgKCFpbWFnZUVsZW1l
bnQuaXNTZXJ2ZXJNYXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpbWFnZUVsZW1l
bnQtPnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFn
ZSgpKQorICAgIGlmICghaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC5y
ZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJJ
bWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7
CisgICAgUmVuZGVySW1hZ2UmIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZSgqaW1hZ2VFbGVtZW50
LnJlbmRlcmVyKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3Mg
dHJ1ZSBmb3IgdXNlVHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24g
PSByZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50
KS0+cGFnZVgoKSwgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVkoKSkpOworICAgIEZsb2F0UG9p
bnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50
KHRvTW91c2VFdmVudChldmVudCktPnBhZ2VYKCksIHRvTW91c2VFdmVudChldmVudCktPnBhZ2VZ
KCkpKTsKICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJz
b2x1dGVQb3NpdGlvbi55KCk7CiAgICAgdXJsLmFwcGVuZCgnPycpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXJlYUVsZW1lbnQuY3BwCmluZGV4IGIzNzk1NmMyMWJjNGE3NTZiMjc5OWE5YmRhMjE1
YTBhN2ZhYjUyYTMuLmRkODRiZGM2ODQwYzdhYjc2OTQxM2ZmZDFmMWEzNzNjMTY5NTc0MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKQEAgLTE4Myw5ICsxODMsOSBA
QCBIVE1MSW1hZ2VFbGVtZW50KiBIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCgpIGNvbnN0
CiB7CiAgICAgTm9kZSogbWFwRWxlbWVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1hcEVs
ZW1lbnQgfHwgIWlzSFRNTE1hcEVsZW1lbnQobWFwRWxlbWVudCkpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxl
bWVudChtYXBFbGVtZW50KS0+aW1hZ2VFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxNYXBFbGVtZW50PigqbWFwRWxlbWVudCkuaW1hZ2VFbGVtZW50KCk7CiB9CiAKIGJvb2wgSFRN
TEFyZWFFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCAzMzI3YWJiYjNhYjliZjI1
ZGNiYWZkYWZhN2U5MzVhOGFjZGVhY2Y3Li45MWJiMjgxZjMxMjRjODgyYTRmNzcwNTcyYTIyNzBk
MjVjOTg5MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMTkx
LDEwICsxOTEsMTAgQEAgaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENv
bGxlY3Rpb24mIGh0bWxDb2xsZWN0aW9uLCBFbGVtZW50JiBlbGUKICAgICBjYXNlIFNlbGVjdE9w
dGlvbnM6CiAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKTsKICAg
ICBjYXNlIFNlbGVjdGVkT3B0aW9uczoKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFt
ZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkuc2VsZWN0ZWQoKTsK
KyAgICAgICAgcmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLnNlbGVjdGVkKCk7CiAgICAgY2FzZSBEYXRhTGlz
dE9wdGlvbnM6Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewot
ICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCk7CisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7
CisgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFvcHRpb24uaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgJiYgIW9wdGlvbi52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIGlubGluZSBi
b29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBodG1sQ29sbGVjdGlv
biwgRWxlbWVudCYgZWxlCiAgICAgY2FzZSBNYXBBcmVhczoKICAgICAgICAgcmV0dXJuIGVsZW1l
bnQuaGFzVGFnTmFtZShhcmVhVGFnKTsKICAgICBjYXNlIERvY0FwcGxldHM6Ci0gICAgICAgIHJl
dHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1l
KG9iamVjdFRhZykgJiYgdG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5jb250YWluc0phdmFB
cHBsZXQoKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxl
bWVudD4oZWxlbWVudCkuY29udGFpbnNKYXZhQXBwbGV0KCkpOwogICAgIGNhc2UgRG9jRW1iZWRz
OgogICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFnKTsKICAgICBjYXNl
IERvY0xpbmtzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBmNDY5ZWM1MjM3
NDRiNzVmN2EyZDM0YmQwNDk1NzQxMjgyNzk1NjdjLi5jODcwYzMwNDBhYzlhYzJlM2NiODQ0YmZi
ZTE3YTcxNGNiNTA3MGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzc5
LDcgKzM3OSw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFz
cygpIGNvbnN0CiAKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVu
dCgpOwogICAgIGlmIChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0
IEhUTUxEb2N1bWVudCYgaHRtbERvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpOwor
ICAgICAgICBjb25zdCBIVE1MRG9jdW1lbnQmIGh0bWxEb2N1bWVudCA9IGRvd25jYXN0PEhUTUxE
b2N1bWVudD4oZG9jdW1lbnQpOwogICAgICAgICByZXR1cm4gaHRtbERvY3VtZW50LmluRGVzaWdu
TW9kZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjgsNyArNDI4LDcgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHRoaXM7CiAjaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIGlmIChoYXNUYWdOYW1lKHRlbXBsYXRl
VGFnKSkKLSAgICAgICAgICAgIGNvbnRhaW5lciA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0aGlz
KS0+Y29udGVudCgpOworICAgICAgICAgICAgY29udGFpbmVyID0gZG93bmNhc3Q8SFRNTFRlbXBs
YXRlRWxlbWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKICNlbmRpZgogICAgICAgICByZXBsYWNlQ2hp
bGRyZW5XaXRoRnJhZ21lbnQoKmNvbnRhaW5lciwgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAg
ICAgfQpAQCAtOTIwLDExICs5MjAsMTEgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb24KIFRleHRE
aXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rp
b25hbGl0eVRleHROb2RlKSBjb25zdAogewogICAgIGlmIChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KCp0aGlzKSkgewotICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4
dEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0X2Nhc3Q8SFRNTEVs
ZW1lbnQqPih0aGlzKSk7CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihjb25zdF9jYXN0
PEhUTUxFbGVtZW50Jj4oKnRoaXMpKTsKICAgICAgICAgYm9vbCBoYXNTdHJvbmdEaXJlY3Rpb25h
bGl0eTsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRleHRFbGVtZW50
LT52YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0
eSk7CisgICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVudC52
YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7
CiAgICAgICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQotICAgICAgICAgICAg
KnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/
IHRleHRFbGVtZW50IDogbnVsbHB0cjsKKyAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlID0gaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPyAmdGV4dEVsZW1lbnQgOiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/
IExUUiA6IFJUTDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwCmluZGV4IGNhMjU2NGEyMGQyYTJiNjExMzE4ODdiMjhjNGEyZmFlMTRlZGJlNTYuLjM2NDJi
ODVjYjZjYjU3Mjg1ZDZjZDA3ZTVhYjNlOWE1NDQxMWZhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMTg4LDEyICsxODgsMTIgQEAgYm9vbCBIVE1MRW1i
ZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAog
ICAgIC8vIElmIG15IHBhcmVudCBpcyBhbiA8b2JqZWN0PiBhbmQgaXMgbm90IHNldCB0byB1c2Ug
ZmFsbGJhY2sgY29udGVudCwgSQogICAgIC8vIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgZ2V0
IGEgcmVuZGVyZXIuCi0gICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKLSAgICBp
ZiAocCAmJiBwLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgaWYgKCFwLT5yZW5k
ZXJlcigpKQorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBp
ZiAocGFyZW50ICYmIGlzSFRNTE9iamVjdEVsZW1lbnQocGFyZW50KSkgeworICAgICAgICBpZiAo
IXBhcmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCF0b0hUTUxPYmplY3RFbGVtZW50KHApLT51c2VGYWxsYmFja0NvbnRlbnQoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFwLT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOworICAg
ICAgICBpZiAoIWRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PigqcGFyZW50KS51c2VGYWxsYmFj
a0NvbnRlbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFwYXJlbnQtPnJlbmRlcmVyKCktPmlz
RW1iZWRkZWRPYmplY3QoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRl
eCBkYjUwYjI3YWYzYzBmMzlmMmM4NDY2MjNlNDVhZjJhNDEyYTk3ZmIzLi4wNDYxOWI1ODc4YzM1
YzAxYThkYjQ4YmJhMTdmMjVhN2YyZGIzYjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEhUTUxGaWVsZFNl
dEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKCkgY29uc3QKIAogICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRNTEZp
ZWxkU2V0RWxlbWVudCY+KCp0aGlzKSkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShvYmplY3RUYWcpKQotICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0
b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKTsKKyAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLmFwcGVuZCgmZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAg
ICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
ZWxlbWVudCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCmluZGV4IGEzMWY5MjZlN2E3ZmNkZTVlZDA5OTZmMjJlYjViYTUzNTA4M2Q4
MTkuLjEyYWNmYjNhYzU4MmZlYmI1NDA2OWRhNGYyYjY3MzU0YmVjMDNkMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMTA0LDcgKzEw
NCw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZp
ZWxkc2V0QW5jZXN0b3IoKSBjb25zdAogICAgIEVsZW1lbnQqIHByZXZpb3VzQW5jZXN0b3IgPSBu
dWxscHRyOwogICAgIGZvciAoRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnRFbGVtZW50KCk7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAg
aWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChhbmNlc3RvcikgJiYgYW5jZXN0b3ItPmZhc3RIYXNB
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgewotICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVu
dCYgZmllbGRTZXRBbmNlc3RvciA9IHRvSFRNTEZpZWxkU2V0RWxlbWVudCgqYW5jZXN0b3IpOwor
ICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmllbGRTZXRBbmNlc3RvciA9IGRvd25j
YXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KCphbmNlc3Rvcik7CiAgICAgICAgICAgICBib29sIGlz
SW5GaXJzdExlZ2VuZCA9IHByZXZpb3VzQW5jZXN0b3IgJiYgaXNIVE1MTGVnZW5kRWxlbWVudChw
cmV2aW91c0FuY2VzdG9yKSAmJiBwcmV2aW91c0FuY2VzdG9yID09IGZpZWxkU2V0QW5jZXN0b3Iu
bGVnZW5kKCk7CiAgICAgICAgICAgICByZXR1cm4gIWlzSW5GaXJzdExlZ2VuZDsKICAgICAgICAg
fQpAQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9mb2N1cyhIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBzZXQg
b2YgaGFzVGFnTmFtZSBjaGVja3MgYmUgcmVwbGFjZWQgYnkgYQogICAgIC8vIHZpcnR1YWwgbWVt
YmVyIGZ1bmN0aW9uPwogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCi0gICAg
ICAgIHJldHVybiAhdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLT5pc0lucHV0VHlwZUhpZGRl
bigpOworICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50
KS5pc0lucHV0VHlwZUhpZGRlbigpOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KGtleWdlblRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwCmluZGV4IDc3YWQ3NDIzOGYyZDQzMTBhMmNlZDkyNDhjOGMyYWNjMDY1
YjAwZTcuLjY4YzFkZWVmMjQ3NzMyNzMxZjdlMDUzNmEwMzAwNzVkZGYzZjk3ZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCkBA
IC01NiwxNCArNTYsMTQgQEAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGUKIHsKICAgICBBU1NFUlQo
aXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpIHx8IG93bmVyTm9kZSgpLmhhc1RhZ05hbWUo
ZmllbGRzZXRUYWcpKTsKICAgICBpZiAoaXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpLmFzc29jaWF0ZWRF
bGVtZW50cygpOwotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQob3duZXJOb2RlKCkp
LmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1F
bGVtZW50Pihvd25lck5vZGUoKSkuYXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG93bmVyTm9kZSgpKS5hc3NvY2lhdGVkRWxlbWVu
dHMoKTsKIH0KIAogY29uc3QgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiYgSFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb246OmZvcm1JbWFnZUVsZW1lbnRzKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKTsKLSAgICByZXR1cm4gdG9IVE1MRm9ybUVs
ZW1lbnQob3duZXJOb2RlKCkpLmltYWdlRWxlbWVudHMoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTEZvcm1FbGVtZW50Pihvd25lck5vZGUoKSkuaW1hZ2VFbGVtZW50cygpOwogfQogCiBzdGF0
aWMgdW5zaWduZWQgZmluZEZvcm1Bc3NvY2lhdGVkRWxlbWVudChjb25zdCBWZWN0b3I8Rm9ybUFz
c29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGM4OGVhYzk1MWRlMDI5M2E1
NzE5NzdhYWNhYjIwZjcyN2Y5ZGMzMGEuLjQ1ODliNDc3NzU3ZjZkYjJhM2IwM2M4MmI1ZjYzNWE1
OWM0OWQ4YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTMx
OCw3ICszMTgsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0VGV4dEZpZWxkVmFsdWVzKFN0
cmluZ1BhaXJWZWN0b3ImIGZpZWxkTmFtZXNBbmRWYWx1ZXMpCiAgICAgICAgIEhUTUxFbGVtZW50
JiBlbGVtZW50ID0gY29udHJvbC5hc0hUTUxFbGVtZW50KCk7CiAgICAgICAgIGlmICghaXNIVE1M
SW5wdXRFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlucHV0LmlzVGV4dEZpZWxkKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgZmllbGROYW1lc0FuZFZhbHVlcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoaW5wdXQubmFtZSgpLnN0cmluZygpLCBpbnB1dC52YWx1ZSgpKSk7CkBAIC03NDUsNyAr
NzQ1LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVz
TWFwKEZvcm1OYW1lZEl0ZW0qIGl0ZW0pIGNvbnN0CiAgICAgfQogCiAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oZWxlbWVudC5oYXNUYWdOYW1lKGltZ1RhZykpOwotICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1faW1hZ2VFbGVtZW50cy5maW5kKCZ0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihtX2ltYWdlRWxlbWVudHMuZmluZCgmZG93bmNhc3Q8SFRNTElt
YWdlRWxlbWVudD4oZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKIH0KICNlbHNlCiBpbmxpbmUgdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVzTWFwKEZvcm1OYW1l
ZEl0ZW0qKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNzM4YTkxOThlNzkxZjc5MWUyNGYyN2VmNmIwZGRmZDA0MmM1OWEzZi4uMjhjZjMwMjdiMWM2
YTI4OWVjYTBhNjQ5ZGQ2MDA1YTBiNGRkMzE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCkBAIC0xODMsMTMgKzE4MywxMyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cgogICAgICAgICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICAgICAgYm9vbCB3
aWxsSGF2ZU5hbWUgPSAhdmFsdWUuaXNOdWxsKCk7CiAgICAgICAgICAgICBpZiAoaGFzTmFtZSgp
ICE9IHdpbGxIYXZlTmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHRvSFRN
TERvY3VtZW50KCZ0aGlzLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBIVE1MRG9jdW1l
bnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERvY3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0
cmlidXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5hZGREb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1w
bCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGREb2N1bWVu
dE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRl
bSgqaWQuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5y
ZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUxvYWRlci5jcHAKaW5kZXggMTg3OWRiYzI5NTA0ZWMyMzEzNDc5MmY3MzViNjUwMTgxMmE2YThk
Mi4uZmIzNGM4Y2NkOTIwNjZmNGUwZjAzMzZhODFlNzVkMzIxMmNkNWM1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxJ
bWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQogICAgIH0KIAogICAg
IGlmIChsb2FkRXJyb3IgJiYgaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAg
ICB0b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7
CisgICAgICAgIGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZh
bGxiYWNrQ29udGVudCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAppbmRleCBhOGViYWE5ZDM2ZDYyYTU2ZjA3OTJhMzhlZWFjNWRkM2I5MzgxOTU4Li5l
MmQ1NWUzMzUxNDViYTI5OWNiNzIxZjdkOGRhNzdkNmNiZGU2NTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTE1MTUsMTggKzE1MTUsMTYgQEAgSFRNTEVs
ZW1lbnQqIEhUTUxJbnB1dEVsZW1lbnQ6Omxpc3QoKSBjb25zdAogSFRNTERhdGFMaXN0RWxlbWVu
dCogSFRNTElucHV0RWxlbWVudDo6ZGF0YUxpc3QoKSBjb25zdAogewogICAgIGlmICghbV9oYXNO
b25FbXB0eUxpc3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmICghbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGxp
c3RBdHRyKSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
IWVsZW1lbnQtPmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcpKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIWVsZW1lbnQgfHwgIWlzSFRNTERhdGFMaXN0RWxlbWVudChlbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50KGVs
ZW1lbnQpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50
KTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZXNldExpc3RBdHRyaWJ1dGVUYXJnZXRP
YnNlcnZlcigpCkBAIC0xODU1LDcgKzE4NTMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dHVwRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyhEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzJgog
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGlmIChIVE1MRGF0YUxpc3RFbGVtZW50
KiBkYXRhTGlzdCA9IHRoaXMtPmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQob3B0aW9ucy0+aXRlbShpKSk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KG9wdGlvbnMtPml0ZW0oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghaXNWYWxpZFZhbHVl
KG9wdGlvbi0+dmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBwYXJhbWV0ZXJzLnN1Z2dlc3Rpb25WYWx1ZXMuYXBwZW5kKHNhbml0aXplVmFsdWUob3B0aW9u
LT52YWx1ZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCmlu
ZGV4IDcxNGJkYjJlMWJkOGNhYjNhOGY1YmUxYmNjNzFjZDE0MzI0N2JkODQuLjFmNWQ2N2ZjOTQw
YzU5M2UyZGI2ZTg2ODk5MWFkNDMzMjZiNmIyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEtleWdlbkVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxl
bWVudDo6c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIEhUTUxT
ZWxlY3RFbGVtZW50KiBIVE1MS2V5Z2VuRWxlbWVudDo6c2hhZG93U2VsZWN0KCkgY29uc3QKIHsK
ICAgICBTaGFkb3dSb290KiByb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHJldHVy
biByb290ID8gdG9IVE1MU2VsZWN0RWxlbWVudChyb290LT5maXJzdENoaWxkKCkpIDogMDsKKyAg
ICByZXR1cm4gcm9vdCA/IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihyb290LT5maXJzdENo
aWxkKCkpIDogbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKaW5kZXggNTk3M2JjMjA3MzlkYWFlMmRkNDQyMzRhMGNj
ZTE2MWI5YmUzMGZjYi4uMmZiNGQyNTBmMjUxYjBmZjk1MjlmODdhOGU4ODc4MzFhZDdlZTQyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKQEAgLTc5LDEwICs3
OSwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSgp
IGNvbnN0CiAgICAgLy8gaXRzIHBhcmVudCwgdGhlbiB0aGUgZm9ybSBhdHRyaWJ1dGUgbXVzdCBy
ZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlCiAgICAgLy8gZm9ybSBhdHRyaWJ1dGUgb24gdGhh
dCBmaWVsZHNldCBlbGVtZW50LiBPdGhlcndpc2UsIGl0IG11c3QgcmV0dXJuIG51bGwuCiAgICAg
Q29udGFpbmVyTm9kZSogZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFmaWVsZHNl
dCB8fCAhZmllbGRzZXQtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIWZpZWxkc2V0IHx8ICFpc0hUTUxGaWVsZFNldEVsZW1lbnQoZmllbGRzZXQp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVs
ZW1lbnQoZmllbGRzZXQpLT5mb3JtKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNl
dEVsZW1lbnQ+KCpmaWVsZHNldCkuZm9ybSgpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDNkMjFjNTJhZmE4M2Iz
MjY0NzhlMTZjNGQ5YTJiYzU3YWNkODI4NmEuLmQzNjhiYWRhNWRhMGJhNjJjNjUxYTQ4MTY3NDkz
ZWI3OTJmMjU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApA
QCAtMzg3Niw3ICszODc2LDcgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3Vy
Y2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyoga2UKICAgICB9CiAKICAg
ICBVUkwgbWVkaWFVUkw7Ci0gICAgSFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IDA7CisgICAg
SFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IG51bGxwdHI7CiAgICAgU3RyaW5nIHR5cGU7CiAg
ICAgU3RyaW5nIHN5c3RlbTsKICAgICBib29sIGxvb2tpbmdGb3JTdGFydE5vZGUgPSBtX25leHRD
aGlsZE5vZGVUb0NvbnNpZGVyOwpAQCAtMzg5Nyw3ICszODk3LDcgQEAgVVJMIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0
cmluZyoga2UKICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpICE9IHRoaXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBzb3VyY2UgPSB0b0hUTUxTb3VyY2VFbGVtZW50KCZu
b2RlKTsKKyAgICAgICAgc291cmNlID0gZG93bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+KCZub2Rl
KTsKIAogICAgICAgICAvLyBJZiBjYW5kaWRhdGUgZG9lcyBub3QgaGF2ZSBhIHNyYyBhdHRyaWJ1
dGUsIG9yIGlmIGl0cyBzcmMgYXR0cmlidXRlJ3MgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZyAu
Li4ganVtcCBkb3duIHRvIHRoZSBmYWlsZWQgc3RlcCBiZWxvdwogICAgICAgICBtZWRpYVVSTCA9
IHNvdXJjZS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0cik7CkBAIC00ODgzLDkgKzQ4
ODMsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgaWYg
KGhhc01lZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5lbnRlcmVkRnVs
bHNjcmVlbigpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpc0hUTUxWaWRlb0VsZW1l
bnQodGhpcykpIHsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogYXNWaWRlbyA9IHRvSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKTsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgYXNWaWRlbyA9IGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCku
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRl
b0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoYXNWaWRlbyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRl
b0VsZW1lbnQoJmFzVmlkZW8pOwogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVz
KCkud2Via2l0YmVnaW5mdWxsc2NyZWVuRXZlbnQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4IDY2MDE3NDYwYmNhZTI5
M2E1ZTQ2MmQ3YWI4NjdkMTA5M2FiNTU5ZDkuLmZlZjQxZmRkZTNlY2ZkZTlhNDhjNGFjMTRlZWJi
OTUyZTE5YzA2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAKQEAgLTY2LDE0ICs2NiwxNCBAQCBib29sIFdpbmRvd05hbWVDb2xsZWN0aW9uOjplbGVtZW50
TWF0Y2hlcyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdAogYm9vbCBEb2N1
bWVudE5hbWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hlc0lmSWRBdHRyaWJ1dGVNYXRjaChjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGZpeCBIVE1M
SW1hZ2VFbGVtZW50IHRvIHVwZGF0ZSB0aGUgaGFzaCBtYXAgZm9yIHVzIHdoZW4gbmFtZSBhdHRy
aWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGFw
cGxldFRhZykgfHwgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIHRvSFRNTE9iamVj
dEVsZW1lbnQoZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0oKSkKKyAgICByZXR1cm4gZWxlbWVudC5o
YXNUYWdOYW1lKGFwcGxldFRhZykgfHwgKGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkgJiYg
ZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCkpCiAg
ICAgICAgIHx8IChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5oYXNOYW1l
KCkpOwogfQogCiBib29sIERvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZO
YW1lQXR0cmlidXRlTWF0Y2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
aXNIVE1MRm9ybUVsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYg
dG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpKQorICAgICAgICB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoaXNIVE1MT2JqZWN0RWxlbWVudChl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuaXNEb2NOYW1l
ZEl0ZW0oKSkKICAgICAgICAgfHwgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwogfQogCkBA
IC04NSw4ICs4NSw4IEBAIGJvb2wgRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNo
ZXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljCiAgICAgICAgIHJldHVybiBl
bGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZTsKICAgICBpZiAoZWxlbWVu
dC5oYXNUYWdOYW1lKGFwcGxldFRhZykpCiAgICAgICAgIHJldHVybiBlbGVtZW50LmdldE5hbWVB
dHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSB8fCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkuaW1w
bCgpID09IG5hbWU7Ci0gICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAg
ICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8
IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSkgJiYgdG9IVE1MT2JqZWN0
RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpOworICAgIGlmIChpc0hUTUxPYmplY3RF
bGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0
ZSgpLmltcGwoKSA9PSBuYW1lIHx8IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0g
bmFtZSkgJiYgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJ
dGVtKCk7CiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8IChlbGVtZW50
LmdldElkQXR0cmlidXRlKCkuaW1wbCgpID09IG5hbWUgJiYgZWxlbWVudC5oYXNOYW1lKCkpOwog
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKaW5kZXggOTE3N2VhYTMwZGFmOWM5NThhYTcwNGZlN2JhY2ZhZmZmZDg2ZDVhMS4uYzA1YTQw
NWZmMDJhYjI4YWZlNDI0Y2NmMTFmZGZjNmI5ZmZiMWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTQzNiwyMiArNDM2LDIyIEBAIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCiAgICAgICAgIGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CiAgICAgfQogICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0
ZW0gJiYgaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewotICAg
ICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoJnRoaXMtPmRvY3Vt
ZW50KCkpOworICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERv
Y3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKIAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGlmIChpc05hbWVkSXRlbSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
RG9jdW1lbnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmFkZERvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0
ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZURv
Y3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSAmJiBpZCAhPSBuYW1lKSB7CiAgICAgICAgICAgICBpZiAoaXNO
YW1lZEl0ZW0pCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmFkZERvY3VtZW50TmFtZWRJdGVt
KCpuYW1lLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZERvY3Vt
ZW50TmFtZWRJdGVtKCpuYW1lLmltcGwoKSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBs
KCksICp0aGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVEb2N1bWVudE5hbWVk
SXRlbSgqbmFtZS5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2RvY05h
bWVkSXRlbSA9IGlzTmFtZWRJdGVtOwpAQCAtNDY2LDcgKzQ2Niw3IEBAIGJvb2wgSFRNTE9iamVj
dEVsZW1lbnQ6OmNvbnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0CiAgICAgICAgIGlmIChjaGlsZC5o
YXNUYWdOYW1lKHBhcmFtVGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC5nZXROYW1lQXR0
cmlidXRlKCksICJ0eXBlIikKICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKGNoaWxkLmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShv
YmplY3RUYWcpICYmIHRvSFRNTE9iamVjdEVsZW1lbnQoY2hpbGQpLmNvbnRhaW5zSmF2YUFwcGxl
dCgpKQorICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIGRvd25jYXN0
PEhUTUxPYmplY3RFbGVtZW50PihjaGlsZCkuY29udGFpbnNKYXZhQXBwbGV0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGNoaWxkLmhhc1RhZ05hbWUoYXBwbGV0VGFn
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dEdyb3VwRWxlbWVudC5jcHAKaW5kZXggYzBhYjcwZDhlZTY5OTQ3Y2U0YTk5MmM4MTMzYmFjZThl
MzEwMzBmYS4uOTVkNmFiYzFmZWU2M2JlOTA4NzJhMjUwYzBlMzc2NGUwOGMxZTIxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC04NiwxMCArODYs
MTAgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWMKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6
cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFy
ZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxl
Y3RUYWcpKQorICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0
KSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVj
dCkKLSAgICAgICAgdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRl
bXMoKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3QpLnNldFJl
Y2FsY0xpc3RJdGVtcygpOwogfQogCiBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBM
YWJlbFRleHQoKSBjb25zdApAQCAtMTA3LDEzICsxMDcsMTMgQEAgU3RyaW5nIEhUTUxPcHRHcm91
cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29uc3QKIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRh
aW5lck5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFz
ZWxlY3QtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFpc0hU
TUxTZWxlY3RFbGVtZW50KHNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50
Tm9kZSgpOwogICAgIAogICAgIGlmICghc2VsZWN0KQotICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChz
ZWxlY3QpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KTsK
IH0KIAogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggYTZiMTQ3MDU5NjRh
NTRmYjE4ODQwN2ZiNzczMDAwY2Q2N2M2NDg3Ny4uMWFiN2EwNDA4YmY0ZjhhYmNkZGFjZTdjMjFi
MWFlNzk5ZGQwMjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKQEAgLTI1NywyMyArMjU3LDIzIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogSFRNTERhdGFMaXN0RWxlbWVudCog
SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBm
b3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50IDsgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFt
ZShkYXRhbGlzdFRhZykpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50
KHBhcmVudCk7CisgICAgICAgIGlmIChpc0hUTUxEYXRhTGlzdEVsZW1lbnQocGFyZW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihwYXJlbnQpOwog
ICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KICNlbmRpZgogCiBI
VE1MU2VsZWN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgp
IGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAg
IHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgIHdo
aWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KSkKICAgICAgICAgc2Vs
ZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIXNlbGVjdCkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvSFRNTFNl
bGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQ+KHNlbGVjdCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCmluZGV4
IGYxZGY0YzQxZWYwZGJiNjEyMjBlNTQxOWVjZDAyODE4Yjg1MmYwYWYuLmYyOTIxMmQ1YjZmOWE0
NTkyMDBjMjFiNTllMzM0MDk3ZmYxMjNiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgdm9pZCBIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OmFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50LCBp
bnQgaW5kZXgKICAgICBlYyA9IDA7CiAKICAgICBpZiAoaW5kZXggPT0gLTEgfHwgdW5zaWduZWQo
aW5kZXgpID49IGxlbmd0aCgpKQotICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlv
biwgMCwgZWMpOworICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlvbiwgbnVsbHB0
ciwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgc2VsZWN0RWxlbWVudCgpLmFkZChuZXdPcHRpb24s
IHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbShpbmRleCkpLCBlYyk7CisgICAgICAgIHNlbGVjdEVs
ZW1lbnQoKS5hZGQobmV3T3B0aW9uLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbShp
bmRleCkpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCmluZGV4IDFjNWU2ODg5YmY4NTlhYzk1OTlmZTBmNzM4
MDEyMWRlYTQ1MThkNmMuLjljNzkyNTY1ZTE0YWE1MzJhODZjOTkzOTBlYzA0NTRlYjQ3OGE4ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApAQCAtMzcs
OCArMzcsOCBAQCBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgSFRN
TENvbGxlY3Rpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPEhUTUxPcHRpb25zQ29s
bGVjdGlvbj4gY3JlYXRlKEhUTUxTZWxlY3RFbGVtZW50JiwgQ29sbGVjdGlvblR5cGUpOwogCi0g
ICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQoKSB7IHJldHVybiB0b0hUTUxTZWxl
Y3RFbGVtZW50KG93bmVyTm9kZSgpKTsgfQotICAgIGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50JiBz
ZWxlY3RFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChvd25lck5v
ZGUoKSk7IH0KKyAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIHsgcmV0dXJu
IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KKyAgICBjb25zdCBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KIAogICAgIHZvaWQgYWRkKFBhc3NS
ZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNDk2ZWQ1YjAwYTBiYzRiODYxZjFlZjVmM2ZlYTM2YTlkMWIyNDgzMC4uOThmNWM4NWMyNmZh
YTIzMGM5MzNhZDg2OTM2M2ZkM2Q4NWJmMTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC00MTcsMTEgKzQxNywxMSBAQCBzdGF0aWMg
dm9pZCBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oSFRNTFBsdWdJ
bkltYWdlRWxlbWVudExpcwogICAgICAgICBpZiAobm9kZS0+aXNQbHVnaW5FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0gdG9IVE1MUGx1
Z0luRWxlbWVudChub2RlKTsKICAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJ
bkltYWdlRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5vZGUpOwot
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTCYgbG9hZGVkVVJMID0gcGx1Z0luSW1hZ2VFbGVtZW50
LT5sb2FkZWRVcmwoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3RoZXJNaW1lVHlwZSA9IHBs
dWdJbkltYWdlRWxlbWVudC0+bG9hZGVkTWltZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICAgICAgY29uc3QgVVJMJiBsb2Fk
ZWRVUkwgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIG90aGVyTWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkTWltZVR5cGUo
KTsKICAgICAgICAgICAgICAgICBpZiAocGx1Z0luT3JpZ2luID09IGxvYWRlZFVSTC5ob3N0KCkg
JiYgbWltZVR5cGUgPT0gb3RoZXJNaW1lVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcGx1Z0lu
TGlzdC5hcHBlbmQocGx1Z0luSW1hZ2VFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcGx1
Z0luTGlzdC5hcHBlbmQoJnBsdWdJbkltYWdlRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmlu
ZGV4IDQxNDI3NTk3ODBmMGRiYmI5MjI3OTc2NDUxMTQxMzUzNDMyNWEyNjAuLjQ4MmI4MmY4NWFj
NjIyMGUzOTliZTI4Y2IzNGQyNGMxYzFhMzJkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCkBAIC0xNDksOCArMTQ5LDggQEAgYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6aGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpIGNvbnN0CiAgICAgQVNTRVJUKGxpc3RJ
bmRleCA+PSAwKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGxp
c3RJdGVtcygpW2xpc3RJbmRleF0pOwotICAgIHJldHVybiAhbGlzdEluZGV4ICYmIG9wdGlvbi0+
dmFsdWUoKS5pc0VtcHR5KCk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zKClbbGlzdEluZGV4XSk7CisgICAgcmV0
dXJuICFsaXN0SW5kZXggJiYgb3B0aW9uLnZhbHVlKCkuaXNFbXB0eSgpOwogfQogCiBTdHJpbmcg
SFRNTFNlbGVjdEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKQEAgLTI1MSw3ICsy
NTEsNyBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKICAgICBm
b3IgKGF1dG8qIGl0ZW0gOiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoaXNIVE1MT3B0aW9u
RWxlbWVudCgqaXRlbSkpIHsKLSAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24g
PSB0b0hUTUxPcHRpb25FbGVtZW50KCppdGVtKTsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVt
ZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOwogICAgICAg
ICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRp
b24udmFsdWUoKTsKICAgICAgICAgfQpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAgdW5zaWduZWQgb3B0
aW9uSW5kZXggPSAwOwogICAgIGZvciAoYXV0byogaXRlbSA6IGxpc3RJdGVtcygpKSB7CiAgICAg
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KCppdGVtKSkgewotICAgICAgICAgICAgaWYgKHRv
SFRNTE9wdGlvbkVsZW1lbnQoKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUp
IHsKICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG9wdGlvbkluZGV4KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC02MDUsNyArNjA1LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQo
aXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpLT5zZWxlY3RlZCgpKTsKKyAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5k
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KGVsZW1lbnQpLT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTYyMCw3ICs2MjAsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fY2Fj
aGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSk7CisgICAg
ICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLT5z
ZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTY0NCwxNSArNjQ0LDE1IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVjdE90aGVyT3B0
aW9ucykKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFpc0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpIHx8IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlm
IChpID49IHN0YXJ0ICYmIGkgPD0gZW5kKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKKyAg
ICAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0
ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAoZGVzZWxl
Y3RPdGhlck9wdGlvbnMgfHwgaSA+PSBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLnNp
emUoKSkKLSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2Nh
Y2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShtX2NhY2hlZFN0YXRl
Rm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKICAgICB9CiAKICAgICBzY3JvbGxUb1NlbGVjdGlvbigp
OwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNo
YW5nZSgpCiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQo
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkg
JiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOwogICAg
ICAgICBpZiAoc2VsZWN0ZWQgIT0gbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb25baV0pCiAgICAgICAg
ICAgICBmaXJlT25DaGFuZ2UgPSB0cnVlOwogICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlv
bltpXSA9IHNlbGVjdGVkOwpAQCAtODAyLDE1ICs4MDIsMTUgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMpIGNvbnN0CiAg
ICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlm
ICh1cGRhdGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewotICAgICAgICAgICAgICAg
IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGN1cnJlbnQp
OworICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmICghZmlyc3RP
cHRpb24pCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gb3B0aW9uOwotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RPcHRpb24gPSAmb3B0aW9uOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0
ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTZWxlY3RlZCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwot
ICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gb3B0aW9uOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9zaXplIDw9IDEgJiYgIWZvdW5kU2VsZWN0ZWQgJiYgIW9wdGlvbi0+
aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxl
Y3RlZCA9IG9wdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZCA9ICZvcHRp
b247CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3NpemUgPD0gMSAmJiAhZm91bmRTZWxl
Y3RlZCAmJiAhb3B0aW9uLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kU2VsZWN0ZWQgPSAmb3B0aW9uOwogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZFNlbGVjdGVkLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTg0MSw3ICs4NDEsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNl
bGVjdGVkSW5kZXgoKSBjb25zdAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKICAg
ICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlm
ICh0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAg
aWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAg
ICB9CkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0T3B0
aW9uKGludCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJ
bmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKIAotICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gMDsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IG51bGxwdHI7CiAgICAg
aWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIGVsZW1lbnQgPSBpdGVtc1tsaXN0SW5kZXhd
OwogICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkgewpAQCAtODgxLDcg
Kzg4MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdE9wdGlvbihpbnQgb3B0aW9u
SW5kZXgsIFNlbGVjdE9wdGlvbkZsYWdzIGZsYWdzKQogICAgICAgICAgICAgICAgIHNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleCA8IDAgfHwgc2hvdWxkRGVzZWxlY3QpCiAgICAgICAgICAgICAg
ICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKLSAgICAgICAgICAgIHRv
SFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAg
ICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVk
U3RhdGUodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVs
ZW1lbnQqIGV4Y2x1ZGVFbGVtZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwog
ICAgICAgICBpZiAoZWxlbWVudCAhPSBleGNsdWRlRWxlbWVudCAmJiBpc0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgIH0KIH0KIApA
QCAtOTgxLDEwICs5ODEsMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBIVE1MU2VsZWN0RWxlbWVudDo6
c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNb
aV0pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKLSAgICAgICAgaWYgKCFvcHRp
b24tPnNlbGVjdGVkKCkpCisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKTsKKyAgICAgICAgaWYgKCFvcHRpb24u
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGF0ZS5hcHBlbmQo
b3B0aW9uLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKG9wdGlvbi52YWx1ZSgpKTsK
ICAgICAgICAgaWYgKCFtdWx0aXBsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
OTk4LDcgKzk5OCw3IEBAIHNpemVfdCBIVE1MU2VsZWN0RWxlbWVudDo6c2VhcmNoT3B0aW9uc0Zv
clZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIHNpemVfdCBsaXN0CiAgICAgZm9yIChzaXplX3Qg
aSA9IGxpc3RJbmRleFN0YXJ0OyBpIDwgbG9vcEVuZEluZGV4OyArK2kpIHsKICAgICAgICAgaWYg
KCFpc0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAodG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpCisgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKS52
YWx1ZSgpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIHJldHVy
biBub3RGb3VuZDsKQEAgLTEwMTYsMTMgKzEwMTYsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUp
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtc1NpemU7ICsraSkgewogICAgICAgICBp
ZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pLT5zZXRTZWxlY3RlZFN0YXRl
KGZhbHNlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSku
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKCFtdWx0aXBsZSgpKSB7
CiAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gc2VhcmNoT3B0aW9uc0ZvclZhbHVlKHN0YXRl
WzBdLCAwLCBpdGVtc1NpemUpOwogICAgICAgICBpZiAoZm91bmRJbmRleCAhPSBub3RGb3VuZCkK
LSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRT
ZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCppdGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICB9IGVs
c2UgewogICAgICAgICBzaXplX3Qgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RhdGUudmFsdWVTaXplKCk7ICsraSkgewpAQCAtMTAzMiw3ICsxMDMyLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3Qg
Rm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IHNl
YXJjaE9wdGlvbnNGb3JWYWx1ZSh2YWx1ZSwgMCwgc3RhcnRJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoZm91bmRJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRTZWxl
Y3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCppdGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBmb3VuZEluZGV4ICsgMTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNjEs
OCArMTA2MSw4IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYgbGlzdCwgYm9vbCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ld
OwotICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpICYmICF0b0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewotICAgICAgICAgICAgbGlzdC5hcHBl
bmREYXRhKG5hbWUsIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnZhbHVlKCkpOworICAg
ICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpLnZhbHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDc1LDggKzEwNzUsOCBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBl
bmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxpc3QsIGJvb2wpCiAKIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAw
OwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CisgICAgSFRNTE9w
dGlvbkVsZW1lbnQqIGZpcnN0T3B0aW9uID0gbnVsbHB0cjsKKyAgICBIVE1MT3B0aW9uRWxlbWVu
dCogc2VsZWN0ZWRPcHRpb24gPSBudWxscHRyOwogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgKytpKSB7CkBAIC0xMDg0LDE2ICsxMDg0LDE3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5m
YXN0SGFzQXR0cmlidXRlKHNlbGVjdGVkQXR0cikpIHsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCk7CisgICAg
ICAgIGlmIChvcHRpb24uZmFzdEhhc0F0dHJpYnV0ZShzZWxlY3RlZEF0dHIpKSB7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIW1fbXVsdGlwbGUpCiAgICAgICAgICAgICAgICAg
c2VsZWN0ZWRPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwotICAgICAgICAgICAgdG9I
VE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKLSAgICAg
ICAgICAgIHNlbGVjdGVkT3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAg
ICAgICAgICAgIG9wdGlvbi5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgc2Vs
ZWN0ZWRPcHRpb24gPSAmb3B0aW9uOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRvSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAg
ICAgICAgb3B0aW9uLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogCiAgICAgICAgIGlmICghZmly
c3RPcHRpb24pCi0gICAgICAgICAgICBmaXJzdE9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCk7CisgICAgICAgICAgICBmaXJzdE9wdGlvbiA9ICZvcHRpb247CiAgICAgfQogCiAg
ICAgaWYgKCFzZWxlY3RlZE9wdGlvbiAmJiBmaXJzdE9wdGlvbiAmJiAhbV9tdWx0aXBsZSAmJiBt
X3NpemUgPD0gMSkKQEAgLTEyOTksMTAgKzEzMDAsMTAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdEluZGV4LCBib29sIG11bHRpLCBib29sIHNo
aWYKICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCkpIHsKICAgICAg
ICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2UgZHVy
aW5nIGRyYWcKICAgICAgICAgLy8gc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVj
dC4KLSAgICAgICAgaWYgKHRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5zZWxl
Y3RlZCgpICYmIG11bHRpU2VsZWN0KQorICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2VsZWN0ZWQoKSAmJiBtdWx0aVNlbGVjdCkKICAgICAg
ICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSBmYWxzZTsKICAgICAgICAgaWYgKCFtX2Fj
dGl2ZVNlbGVjdGlvblN0YXRlKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlj
a2VkRWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShm
YWxzZSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGFueSBzcGVjaWFsIG11bHRp
cGxlIHNlbGVjdGlvbiBtb2RlLCB0aGVuIGRlc2VsZWN0IGFsbApAQCAtMTMxNyw4ICsxMzE4LDgg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdElu
ZGV4LCBib29sIG11bHRpLCBib29sIHNoaWYKICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5j
aG9ySW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKIAogICAgIC8vIFNldCB0aGUgc2VsZWN0aW9uIHN0
YXRlIG9mIHRoZSBjbGlja2VkIG9wdGlvbi4KLSAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChj
bGlja2VkRWxlbWVudCkgJiYgIXRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlj
a2VkRWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgaWYgKGlzSFRNTE9wdGlv
bkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpICYmICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmNsaWNrZWRFbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZSh0
cnVlKTsKIAogICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3RlZEluZGV4KCkgZm9yIHRoZSBw
cmV2aW91cyBpbml0aWFsaXphdGlvbiwgb3IgSWYKICAgICAvLyB3ZSdyZSBkb2luZyBhIHNpbmds
ZSBzZWxlY3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IKQEAgLTE1
MzgsNyArMTUzOSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdElu
ZGV4KCkgY29uc3QKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gaXRlbXMuc2l6ZSgpOyBpOykgewogICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zWy0taV07Ci0gICAgICAgIGlmIChpc0hUTUxP
cHRpb25FbGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNl
bGVjdGVkKCkpCisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIGRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBpOwogICAgIH0KICAgICByZXR1cm4gLTE7CkBAIC0xNTU5LDkgKzE1NjAsOSBA
QCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50IGluZGV4KSBjb25z
dAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIAogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaW5kZXhdOwotICAgIGlmICgh
aXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSB8fCB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVy
biB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogfQogCiB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtMTU5Niw4
ICsxNTk3LDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJ
bmRleChpbnQgaW5kZXgpCiAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYgKGlzSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmICh0b0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQotICAgICAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgaWYg
KGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNlbGVj
dE9wdGlvbihpbmRleCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggZjY1
Y2IwMDgxOTY2ZTNjOWI3NTY1OTg3NzFhYzE1ZmQ0ZWJjYzFjNy4uYjFlNGVlZWIyYzYwNTdmZjJm
MmNmMzQzYzcxYzM3NzkyYzZhMWU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1h
cnlFbGVtZW50LmNwcApAQCAtODcsOCArODcsOCBAQCBIVE1MRGV0YWlsc0VsZW1lbnQqIEhUTUxT
dW1tYXJ5RWxlbWVudDo6ZGV0YWlsc0VsZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG1heURl
dGFpbHMgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQodGhpcyk7CiAgICAgaWYgKCFt
YXlEZXRhaWxzIHx8ICFtYXlEZXRhaWxzLT5oYXNUYWdOYW1lKGRldGFpbHNUYWcpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9IVE1MRGV0YWlsc0VsZW1lbnQobWF5RGV0YWlscyk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGV0YWls
c0VsZW1lbnQ+KG1heURldGFpbHMpOwogfQogCiBib29sIEhUTUxTdW1tYXJ5RWxlbWVudDo6aXNN
YWluU3VtbWFyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cAppbmRleCA1OWZlZWJlNTM1ZTRlZGM4MjZhM2M0ZmRhNmMzNTA2ZjhmZmI1MWI5Li5hYjcwMWYz
MjRjZjI2ZWM0MmVlNjFlYmQ5MDllOTc3YmYyMTllYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHAKQEAgLTcwLDEwICs3MCwxMCBAQCBQYXNzUmVmUHRyPEhUTUxU
YWJsZUVsZW1lbnQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYQogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIEhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24oKSBjb25zdAogewogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aGFz
VGFnTmFtZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZUNhcHRp
b25FbGVtZW50KGNoaWxkKTsKKyAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQo
Y2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50PihjaGlsZCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnNldENhcHRpb24oUGFzc1JlZlB0cjxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudD4gbmV3Q2FwdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCmluZGV4IGZjN2U4NWE5Yzgy
ZjQyMDQwMzVjNzc2MjVmMzVmMDFjMGE4OWI2YTAuLmY1MTA4MjRlZGJhNWFhYTdkZTA0NDYzN2Vi
ZDNmNDU1MDA5Nzc0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
UGFydEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIEhUTUxUYWJsZUVsZW1lbnQqIEhUTUxUYWJsZVBh
cnRFbGVtZW50OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudCA9IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAocGFyZW50ICYmICFpc0hUTUxUYWJsZUVs
ZW1lbnQocGFyZW50KSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7Ci0g
ICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxlbWVudChwYXJlbnQpOworICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAppbmRleCA0YzRkOTc5MmNjMTBkMjVmZDg2ZWNjZDBi
MWUyZDJkMWUzZmI3MDgwLi40N2ZmMzNiZDc1M2RiNDkzZTY5NDU5M2NiNjUwN2IzNDIzNzhiNDU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKQEAgLTcw
LDcgKzcwLDcgQEAgaW50IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KCkgY29uc3QKIAog
ICAgIGludCBySW5kZXggPSAwOwogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBo
ZWFkID0gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlKS0+dEhlYWQoKSkgeworICAgIGlmIChIVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogaGVhZCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0
YWJsZSkudEhlYWQoKSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGhlYWQtPmZpcnN0Q2hp
bGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChy
b3cgPT0gdGhpcykKICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpAQCAtOTEsNyArOTEs
NyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25zdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBmb290ID0gdG9IVE1M
VGFibGVFbGVtZW50KHRhYmxlKS0+dEZvb3QoKSkgeworICAgIGlmIChIVE1MVGFibGVTZWN0aW9u
RWxlbWVudCogZm9vdCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSkudEZvb3Qo
KSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGZvb3QtPmZpcnN0Q2hpbGQoKTsgcm93OyBy
b3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChyb3cgPT0gdGhpcykK
ICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAppbmRleCA3ZTVmNjY0MDZmYTY0YTBjYWFkNTBl
ZGE2NTA5ZGRkMDE5MWE5ZmUxLi4wNGE5NjA0MzZlMTA1NzYxODQzOTdkODk2YTMxNjVkNTg5YzFj
MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmNwcApAQCAtOTgsNyArOTgsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dz
Q29sbGVjdGlvbjo6cm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCogdGFibGUsCiAgICAgICAgIGNo
aWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocHJldmlvdXMtPnBhcmVudE5vZGUo
KSk7CiAgICAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVtZW50KGNoaWxkKSkK
LSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hpbGQpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKGF1
dG8gcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKmNoaWxkKS5maXJz
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xMzEsNyArMTMxLDcgQEAgSFRN
TFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Omxhc3RSb3coSFRNTFRh
YmxlRWxlbWVudCogdGFibGUpCiAKICAgICBmb3IgKGF1dG8qIGNoaWxkID0gRWxlbWVudFRyYXZl
cnNhbDo6bGFzdENoaWxkKHRhYmxlKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVt
ZW50KGNoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hp
bGQpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNo
aWxkKTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAg
ICAgICAgaWYgKGF1dG8qIHJvdyA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+
KCpjaGlsZCkubGFzdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xNjEsNyAr
MTYxLDcgQEAgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTFRhYmxlUm93c0Nv
bGxlY3Rpb246OmNyZWF0ZShIVE1MVGFibGVFbGVtZW4KIAogRWxlbWVudCogSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QK
IHsKLSAgICByZXR1cm4gcm93QWZ0ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oJnRh
YmxlRWxlbWVudCgpKSwgdG9IVE1MVGFibGVSb3dFbGVtZW50KHByZXZpb3VzKSk7CisgICAgcmV0
dXJuIHJvd0FmdGVyKGNvbnN0X2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KCZ0YWJsZUVsZW1lbnQo
KSksIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KHByZXZpb3VzKSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaAppbmRleCA2MzIy
YzM1OWIyMjg4NjQ0N2M1YWNhZTI1YmY2YzdiMTQ0YmVhZjNjLi5mN2NhNjA0NDUxZTk3OGI2MjYw
OWFhNmZkY2ZkYWQyZWM2MDhhMGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5oCkBAIC00MCw4ICs0MCw4IEBAIGNsYXNzIEhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uIGZpbmFsIDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gY3JlYXRlKEhUTUxUYWJsZUVs
ZW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBIVE1MVGFibGVFbGVtZW50JiB0YWJsZUVs
ZW1lbnQoKSB7IHJldHVybiB0b0hUTUxUYWJsZUVsZW1lbnQob3duZXJOb2RlKCkpOyB9Ci0gICAg
Y29uc3QgSFRNTFRhYmxlRWxlbWVudCYgdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9I
VE1MVGFibGVFbGVtZW50KG93bmVyTm9kZSgpKTsgfQorICAgIEhUTUxUYWJsZUVsZW1lbnQmIHRh
YmxlRWxlbWVudCgpIHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9k
ZSgpKTsgfQorICAgIGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQmIHRhYmxlRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQogCiAg
ICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQq
LCBIVE1MVGFibGVSb3dFbGVtZW50Kik7CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQq
IGxhc3RSb3coSFRNTFRhYmxlRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
bXBsYXRlRWxlbWVudC5jcHAKaW5kZXggMTdlNGMwODA3NjIyOWNiNzJmMWIwMTI1MmJkM2FkZTQz
OTUwN2IzOC4uNmY0MjE4OWNiODc4ZTBkOWQ0MzRkYTVhMDZiY2JlMGViMzUzMjVlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC03NSw3ICs3NSw3
IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRlbXBsYXRlRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wg
ZGVlcCkKIAogICAgIFJlZlB0cjxOb2RlPiBjbG9uZSA9IGNsb25lRWxlbWVudFdpdGhDaGlsZHJl
bigpOwogICAgIGlmIChtX2NvbnRlbnQpCi0gICAgICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5v
ZGVzKHRvSFRNTFRlbXBsYXRlRWxlbWVudChjbG9uZS5nZXQoKSktPmNvbnRlbnQoKSk7CisgICAg
ICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5vZGVzKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1l
bnQ+KGNsb25lLmdldCgpKS0+Y29udGVudCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCmluZGV4IDhjYjE1MWJhMjlmY2M3ZTk5OWRiNGEzZDQ2MjAyYWQ1ZjVhZmZjMDEu
LjM1ZjhlYWQ1ZjNiYWNiOTU3NzlkNzY0OTNiNDU1OWY3MThkYmUzMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC03MTcs
NyArNzE3LDcgQEAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRGb3Jt
Q29udHJvbChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKCFjb250YWluZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEVsZW1lbnQqIGFuY2VzdG9yID0gY29udGFpbmVy
LT5zaGFkb3dIb3N0KCk7Ci0gICAgcmV0dXJuIGFuY2VzdG9yICYmIGlzSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKmFuY2VzdG9yKSA/IHRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoYW5j
ZXN0b3IpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gYW5jZXN0b3IgJiYgaXNIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgqYW5jZXN0b3IpID8gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ+KGFuY2VzdG9yKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBjb25zdCBFbGVtZW50KiBw
YXJlbnRIVE1MRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5jcHAKaW5kZXggOGQ2M2FmMzgxZDY4YTFlNzAxNmMzY2QwYzE3ODNiMWQ4
YjU3ZGUyMC4uNWJhYmIwNWI0MjI4ZjVlNzJhMDdjZDNjMjhkOWFiZDRkZGYyOWU3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lk
IEltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsKICAgICBSZWZQdHI8
RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChodG1sVGFnLCBm
YWxzZSk7CiAgICAgYXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQpOwotICAgIHRvSFRNTEh0bWxFbGVt
ZW50KHJvb3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIGRvd25jYXN0
PEhUTUxIdG1sRWxlbWVudD4oKnJvb3RFbGVtZW50KS5pbnNlcnRlZEJ5UGFyc2VyKCk7CiAKICAg
ICBmcmFtZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwogCiAg
ICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChib2R5VGFn
LCBmYWxzZSk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIm1hcmdpbjogMHB4
Iik7CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUoZG9jdW1lbnQoKS5s
b2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKSkKLSAgICAgICAgdG9IVE1MQm9keUVsZW1lbnQo
Ym9keS5nZXQoKSktPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IsICJ3aGl0ZSIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOworICAgICAgICBk
b3duY2FzdDxIVE1MQm9keUVsZW1lbnQ+KCpib2R5KS5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCAid2hpdGUiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKTsKICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSk7CiAgICAgCiAgICAg
UmVmUHRyPEltYWdlRG9jdW1lbnRFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBJbWFnZURvY3VtZW50
RWxlbWVudDo6Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TGFiZWxzTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5j
cHAKaW5kZXggMzFmNjc1ZTE5YjgwZThmMThjM2E1NTk4ZGQxMTcxMWM1YzZhNzkwYy4uOGMyOTYy
MDYwZjJiZDA4ZWRhNjc4YjBhMGIxNGNlYWE0YTQ1NDQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9M
YWJlbHNOb2RlTGlzdC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgTGFiZWxzTm9kZUxpc3Q6On5MYWJl
bHNOb2RlTGlzdCgpCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0OjplbGVtZW50TWF0Y2hlcyhF
bGVtZW50JiB0ZXN0Tm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50
KHRlc3ROb2RlKSAmJiB0b0hUTUxMYWJlbEVsZW1lbnQodGVzdE5vZGUpLmNvbnRyb2woKSA9PSAm
b3duZXJOb2RlKCk7CisgICAgcmV0dXJuIGlzSFRNTExhYmVsRWxlbWVudCh0ZXN0Tm9kZSkgJiYg
ZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4odGVzdE5vZGUpLmNvbnRyb2woKSA9PSAmb3duZXJO
b2RlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlh
RG9jdW1lbnQuY3BwCmluZGV4IGM5Yjc3M2I0YWRhN2JlZTdiOTJhOGZjMmU5NzkxNTUwYjY3NjFk
ZDcuLjZiZmQwNDA4YzVlODMzNmZjMmVjOGNiYWViNWFmZGIxMzU0YmQwMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIE1lZGlhRG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKICAgICBSZWZQdHI8RWxlbWVu
dD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNl
KTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgSUdOT1JFX0VYQ0VQ
VElPTik7CiAgICAgZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KHJvb3RFbGVtZW50LmdldCgpKTsK
LSAgICB0b0hUTUxIdG1sRWxlbWVudChyb290RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJz
ZXIoKTsKKyAgICBkb3duY2FzdDxIVE1MSHRtbEVsZW1lbnQ+KCpyb290RWxlbWVudCkuaW5zZXJ0
ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRTdGFy
dCk7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9j
dW1lbnRTdHJ1Y3R1cmUoKQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IGRv
Y3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodmlkZW9UYWcsIGZhbHNlKTsKIAotICAgIG1fbWVkaWFF
bGVtZW50ID0gdG9IVE1MVmlkZW9FbGVtZW50KG1lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgbV9t
ZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsZW1lbnQuZ2V0
KCkpOwogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCAiIik7
CiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdXRvcGxheUF0dHIsICIiKTsKIApA
QCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1l
bnRTdHJ1Y3R1cmUoKQogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCBlbGVtZW50U3R5bGUudG9TdHJpbmcoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gc291cmNl
RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc291cmNlVGFnLCBmYWxzZSk7Ci0g
ICAgSFRNTFNvdXJjZUVsZW1lbnQmIHNvdXJjZSA9IHRvSFRNTFNvdXJjZUVsZW1lbnQoKnNvdXJj
ZUVsZW1lbnQpOworICAgIEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UgPSBkb3duY2FzdDxIVE1M
U291cmNlRWxlbWVudD4oKnNvdXJjZUVsZW1lbnQpOwogICAgIHNvdXJjZS5zZXRTcmMoZG9jdW1l
bnQoKS0+dXJsKCkpOwogCiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVu
dCgpLT5sb2FkZXIoKSkKQEAgLTE2MSwyMiArMTYxLDIyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRQ
YXJzZXI+IE1lZGlhRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiBzdGF0aWMgaW5saW5lIEhUTUxW
aWRlb0VsZW1lbnQqIGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoQ29udGFpbmVyTm9kZSYgbm9kZSkK
IHsKICAgICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gdG9I
VE1MVmlkZW9FbGVtZW50KCZub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRl
b0VsZW1lbnQ+KCZub2RlKTsKIAogICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZUxpc3QgPSBub2Rl
LmdldEVsZW1lbnRzQnlUYWdOYW1lTlModmlkZW9UYWcubmFtZXNwYWNlVVJJKCksIHZpZGVvVGFn
LmxvY2FsTmFtZSgpKTsKICAgIAotICAgIGlmIChub2RlTGlzdC5nZXQoKS0+bGVuZ3RoKCkgPiAw
KQotICAgICAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGVMaXN0LmdldCgpLT5pdGVt
KDApKTsKKyAgICBpZiAobm9kZUxpc3QtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGVMaXN0LT5pdGVtKDApKTsKIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxWaWRlb0Vs
ZW1lbnQqIGFuY2VzdG9yVmlkZW9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgd2hpbGUgKG5v
ZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpKQorICAgIHdoaWxlIChub2RlICYmICFp
c0hUTUxWaWRlb0VsZW1lbnQobm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRPclNo
YWRvd0hvc3ROb2RlKCk7CiAKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGUpOwor
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pihub2RlKTsKIH0KIAogdm9pZCBN
ZWRpYURvY3VtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKQEAgLTI0Mywx
OSArMjQzLDE5IEBAIHZvaWQgTWVkaWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVy
RmlyZWQoVGltZXI8TWVkaWFEb2N1bWVudD4mKQogCiAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCA9IGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoKmh0bWxCb2R5KSkgewogICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGVt
YmVkVGFnLCBmYWxzZSk7Ci0gICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkRWxlbWVudCA9
IHRvSFRNTEVtYmVkRWxlbWVudChlbGVtZW50LmdldCgpKTsKKyAgICAgICAgSFRNTEVtYmVkRWxl
bWVudCYgZW1iZWRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVtYmVkRWxlbWVudD4oKmVsZW1lbnQp
OwogCi0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEwMCUi
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUi
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4i
KTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3Ry
aW5nKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEw
MCUiKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAw
JSIpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2lu
Iik7CisgICAgICAgIGVtYmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3Ry
aW5nKCkpOwogCiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGxvYWRl
cigpOwogICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwogICAgICAgICBpZiAoZG9jdW1l
bnRMb2FkZXIpCi0gICAgICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgZW1i
ZWRFbGVtZW50LnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigp
Lm1pbWVUeXBlKCkpOwogCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZXBs
YWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICB2aWRlb0VsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKCZlbWJlZEVs
ZW1lbnQsIHZpZGVvRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCmluZGV4IGY3MTZiMjc5OTQ3NWQxOTgwZTNm
Y2VjODdkODQ5OTU5ZWVkMjk4ZDUuLjhiMGY1MmVmNDQzOTNmMTQ0OTM3OWNmNzJmM2NlZDA0Mzc5
MDUwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgUGx1Z2luRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJl
KCkKIHsKICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChy
b290RWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgdG9IVE1MSHRtbEVsZW1lbnQocm9v
dEVsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgZG93bmNhc3Q8SFRNTEh0
bWxFbGVtZW50Pigqcm9vdEVsZW1lbnQpLmluc2VydGVkQnlQYXJzZXIoKTsKIAogICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5pbmplY3RV
c2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lk
IFBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAgICAgICAg
IAogICAgIFJlZlB0cjxFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KGVtYmVkVGFnLCBmYWxzZSk7CiAgICAgICAgIAotICAgIG1fZW1iZWRFbGVtZW50ID0g
dG9IVE1MRW1iZWRFbGVtZW50KGVtYmVkRWxlbWVudC5nZXQoKSk7CisgICAgbV9lbWJlZEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRW1iZWRFbGVtZW50PihlbWJlZEVsZW1lbnQuZ2V0KCkpOwogICAg
IG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOwogICAgIG1f
ZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggMjM5YTljZTYwYWNmZGM3MjYw
ZjlkNjA4OWZkNjEzNzU0NWRhY2VkMy4uNmVkYzBlOTVmNTgzODNlZGFhMTY2YzllNjZkOWU5MGRj
ZTZlZTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTg2LDcg
Kzg2LDcgQEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogICAgICAgICAvLyBMb29rIGZvciBtb3JlIHJhZGlvIGJ1dHRvbnMuCiAg
ICAgICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dEVsZW1lbnQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQobm9kZSk7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKICAgICAgICAg
aWYgKGlucHV0RWxlbWVudC0+Zm9ybSgpICE9IGVsZW1lbnQoKS5mb3JtKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmIGlu
cHV0RWxlbWVudC0+bmFtZSgpID09IGVsZW1lbnQoKS5uYW1lKCkgJiYgaW5wdXRFbGVtZW50LT5p
c0ZvY3VzYWJsZSgpKSB7CkBAIC0xMjMsOCArMTIzLDggQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6
aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKICAgICAvLyBz
a2lwIGFueSBvdGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCiAgICAgRWxlbWVudCogY3VycmVu
dEZvY3VzZWROb2RlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKICAg
ICBpZiAoY3VycmVudEZvY3VzZWROb2RlICYmIGlzSFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9j
dXNlZE5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGZvY3VzZWRJbnB1dCA9IHRv
SFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAgICBpZiAoZm9jdXNl
ZElucHV0LT5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LT5mb3JtKCkgPT0gZWxlbWVu
dCgpLmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpKQor
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBmb2N1c2VkSW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqY3VycmVudEZvY3VzZWROb2RlKTsKKyAgICAgICAgaWYgKGZvY3VzZWRJbnB1
dC5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LmZvcm0oKSA9PSBlbGVtZW50KCkuZm9y
bSgpICYmIGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9Ob2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3Qu
Y3BwCmluZGV4IGIyMDQ0ZjY3OGQ2NGI2YzcxZGNmY2E1MjBjMzFjYTc4ZmM3ZmFkMTMuLjcwMmYy
MWI1YzEyMTE3YmVkODU3ZGYxNDk5ZTdjNDRhYjk2MDIyNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb05vZGVMaXN0LmNwcApAQCAtODcsOSArODcsOSBAQCBib29sIFJhZGlvTm9kZUxpc3Q6OmNo
ZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVyKGNvbnN0IEVsZW1lbnQmIHRlc3RF
bAogewogICAgIEFTU0VSVCh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgdGVz
dEVsZW1lbnQuaXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiAgICAgaWYgKGlzSFRNTEZvcm1FbGVt
ZW50KG93bmVyTm9kZSgpKSkgewotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50
ID0gMDsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAg
ICBmb3JtRWxlbWVudCA9IHRvSFRNTE9iamVjdEVsZW1lbnQodGVzdEVsZW1lbnQpLmZvcm0oKTsK
KyAgICAgICAgICAgIGZvcm1FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KHRl
c3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1FbGVtZW50
ID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRlc3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAg
IGlmICghZm9ybUVsZW1lbnQgfHwgZm9ybUVsZW1lbnQgIT0gJm93bmVyTm9kZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAppbmRleCAwMDIzOTg0NWQzZWQ0NDNmMDUzYzI0
YzcwODFlNzdkMzNjMTI4ODczLi42OGYwMGY1YWU0YWM1MGFlOGJkNmRiNGEyMTU3YzcwMWI5ZTNm
MjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcApAQCAtMzcyLDggKzM3
Miw4IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKCkKICAgICBt
X3RpY2tNYXJrVmFsdWVzLnJlc2VydmVDYXBhY2l0eShvcHRpb25zLT5sZW5ndGgoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wdGlvbnMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgTm9kZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVt
ZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAg
U3RyaW5nIG9wdGlvblZhbHVlID0gb3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgSFRN
TE9wdGlvbkVsZW1lbnQmIG9wdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKm5vZGUpOworICAgICAgICBTdHJpbmcgb3B0aW9uVmFsdWUgPSBvcHRpb25FbGVtZW50LnZh
bHVlKCk7CiAgICAgICAgIGlmICghZWxlbWVudCgpLmlzVmFsaWRWYWx1ZShvcHRpb25WYWx1ZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV90aWNrTWFya1ZhbHVlcy5hcHBlbmQo
cGFyc2VUb051bWJlcihvcHRpb25WYWx1ZSwgRGVjaW1hbDo6bmFuKCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBm
ZTIwNGVjM2Q4MDBhZmJiMDE4NjQwYmIwODFjNmExZDgwOTU3ZTdlLi45MzkwNTU3MDg2MjViZDZj
ZDc5YWE3ZjQwMzZiZjAyM2UwZTE2ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC04NSw4ICs4NSw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0FsbFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiBzdGF0
aWMgaW5saW5lIHZvaWQgaW5zZXJ0KEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykKIHsK
ICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAodGFzay5wYXJlbnQtPmhhc1Rh
Z05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICB0YXNrLnBhcmVudCA9IHRvSFRNTFRlbXBsYXRl
RWxlbWVudCh0YXNrLnBhcmVudC5nZXQoKSktPmNvbnRlbnQoKTsKKyAgICBpZiAoaXNIVE1MVGVt
cGxhdGVFbGVtZW50KCp0YXNrLnBhcmVudCkpCisgICAgICAgIHRhc2sucGFyZW50ID0gZG93bmNh
c3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKnRhc2sucGFyZW50KS5jb250ZW50KCk7CiAjZW5kaWYK
IAogICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSB0YXNrLmNoaWxkLT5wYXJlbnROb2Rl
KCkpCkBAIC01MzEsOCArNTMxLDggQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW8KICAgICAgICAg
ZmluZEZvc3RlclNpdGUodGFzayk7CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAg
ICBpZiAodGFzay5wYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICB0YXNr
LnBhcmVudCA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXNrLnBhcmVudC5nZXQoKSktPmNvbnRl
bnQoKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCp0YXNrLnBhcmVudCkpCisgICAg
ICAgIHRhc2sucGFyZW50ID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKnRhc2sucGFy
ZW50KS5jb250ZW50KCk7CiAjZW5kaWYKIAogICAgIC8vIFN0cmluZ3MgY29tcG9zZWQgZW50aXJl
bHkgb2Ygd2hpdGVzcGFjZSBhcmUgbGlrZWx5IHRvIGJlIHJlcGVhdGVkLgpAQCAtNjE4LDggKzYx
OCw4IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwKIGlubGluZSBEb2N1bWVudCYgSFRNTENvbnN0
cnVjdGlvblNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgpCiB7CiAjaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKGN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUodGVt
cGxhdGVUYWcpKQotICAgICAgICByZXR1cm4gdG9IVE1MVGVtcGxhdGVFbGVtZW50KGN1cnJlbnRF
bGVtZW50KCkpLT5jb250ZW50KCktPmRvY3VtZW50KCk7CisgICAgaWYgKGlzSFRNTFRlbXBsYXRl
RWxlbWVudChjdXJyZW50Tm9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZW1w
bGF0ZUVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCgpKS5jb250ZW50KCktPmRvY3VtZW50KCk7CiAj
ZW5kaWYKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDMxZjU0OTIz
NDgzZDk0YzY3NmY0OTY4MmIwNmJmY2MzYWE4YjJhNjUuLmI5MzY4ZGY4MDM3NjM2ZGIyZGQ2NTdk
OGE5YTM4MDU3NDc3ZmIyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRN
TFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50
JiBmCiAjZW5kaWYKIAogICAgICAgICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7
Ci0gICAgICAgIG1fdHJlZS5zZXRGb3JtKCFjb250ZXh0RWxlbWVudCB8fCBpc0hUTUxGb3JtRWxl
bWVudChjb250ZXh0RWxlbWVudCkgPyB0b0hUTUxGb3JtRWxlbWVudChjb250ZXh0RWxlbWVudCkg
OiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVu
dCkpOworICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQgfHwgaXNIVE1MRm9y
bUVsZW1lbnQoY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50Pihjb250
ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpj
b250ZXh0RWxlbWVudCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwCmluZGV4IGEyNmZmNGRiYWYwMWFmOTUw
ZWU1OTNiOTRhZmQ3NTNkMTdjMWYxOTAuLjVlM2FiZDIwMTNkMTQ5N2FkM2U5NDIyNjJlYjMyMTBj
ZmJjOTA2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RldGFpbHNN
YXJrZXJDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EZXRhaWxz
TWFya2VyQ29udHJvbC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IERldGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUGFzc1JlZjxS
ZW4KIAogYm9vbCBEZXRhaWxzTWFya2VyQ29udHJvbDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIHRvSFRNTFN1bW1hcnlFbGVtZW50KHNo
YWRvd0hvc3QoKSktPmlzTWFpblN1bW1hcnkoKSAmJiBIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdW1tYXJ5RWxlbWVudD4o
c2hhZG93SG9zdCgpKS0+aXNNYWluU3VtbWFyeSgpICYmIEhUTUxEaXZFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IGE5MmI4NzIyMGQ4ZTA5YjllZDVj
Mjg5YzRiNzQ2MWExMTlkNzMzODYuLmQ0MmQ1YTQ3OTU4YzdhZmJiNGU5ZmUyYzBjNDY1OWYwNGZh
MzAzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIDIuIExldCB2aWRlbyBiZSB0aGUgbWVkaWEgZWxlbWVudCBvciBvdGhlciBwbGF5
YmFjayBtZWNoYW5pc20uCi0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8gPSB0b0hUTUxWaWRl
b0VsZW1lbnQobWVkaWFFbGVtZW50KTsKKyAgICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRv
d25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCptZWRpYUVsZW1lbnQpOwogCiAgICAgLy8gMy4gTGV0
IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9mIGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxv
Y2sgYm94ZXMuCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1MRGl2RWxlbWVudD4+IG91dHB1dDsKQEAg
LTExMzUsNyArMTEzNSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgLy8gNy4gTGV0IGN1ZXMgYmUgYW4gZW1wdHkgbGlz
dCBvZiB0ZXh0IHRyYWNrIGN1ZXMuCiAgICAgLy8gOC4gRm9yIGVhY2ggdHJhY2sgdHJhY2sgaW4g
dHJhY2tzLCBhcHBlbmQgdG8gY3VlcyBhbGwgdGhlIGN1ZXMgZnJvbQogICAgIC8vIHRyYWNrJ3Mg
bGlzdCBvZiBjdWVzIHRoYXQgaGF2ZSB0aGVpciB0ZXh0IHRyYWNrIGN1ZSBhY3RpdmUgZmxhZyBz
ZXQuCi0gICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gdmlkZW8tPmN1cnJlbnRseUFjdGl2ZUN1ZXMo
KTsKKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJyZW50bHlBY3RpdmVDdWVzKCk7
CiAKICAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwgZm9yIGVhY2ggdGV4dCB0cmFj
ayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCiAgICAgLy8gdGV4dCB0cmFjayBjdWUgZGlzcGxh
eSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFkZCB0aG9zZSBib3hlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5jcHAKaW5k
ZXggYTU3NjMzNGRlODM5MWFmNDE2M2UwMWM2NTZhZmE0ZTg1ZWZiNTIxMi4uNmVjNGU1NTEyZjky
MTlmMjMwMmU3MjcyZWRjNjFlOWVhMDY0ODY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIE1ldGVy
U2hhZG93RWxlbWVudDo6TWV0ZXJTaGFkb3dFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAog
SFRNTE1ldGVyRWxlbWVudCogTWV0ZXJTaGFkb3dFbGVtZW50OjptZXRlckVsZW1lbnQoKSBjb25z
dAogewotICAgIHJldHVybiB0b0hUTUxNZXRlckVsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTE1ldGVyRWxlbWVudD4oc2hhZG93SG9zdCgpKTsKIH0KIAogYm9v
bCBNZXRlclNoYWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NT
aGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Byb2dyZXNzU2hh
ZG93RWxlbWVudC5jcHAKaW5kZXggZGNkMjI4YmI2ZmRjZGYzZGEzZTFkNTYyZjViNmMyYWQ4NTVh
ZDNiYi4uOTA0MTdmMTFhYjVkZjIxYjNhMDk5OGE5YTdlNTI2NGZkNmJiYzFkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3Bw
CkBAIC00Niw3ICs0Niw3IEBAIFByb2dyZXNzU2hhZG93RWxlbWVudDo6UHJvZ3Jlc3NTaGFkb3dF
bGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAogSFRNTFByb2dyZXNzRWxlbWVudCogUHJvZ3Jl
c3NTaGFkb3dFbGVtZW50Ojpwcm9ncmVzc0VsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0
b0hUTUxQcm9ncmVzc0VsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFByb2dyZXNzRWxlbWVudD4oc2hhZG93SG9zdCgpKTsKIH0KIAogYm9vbCBQcm9ncmVzc1No
YWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAKaW5kZXggMjA2MjhjNzIzMDI4ZTNmYjYyY2ZkZmI3MGJiMmM1MDM2ZDBjOTQ2
MC4uMTkyZjhlMDA2M2ZhNWEwOGU4ZjQ4MjFmZGVkZTAzZmZlMjBhZDAxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
Y3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgUGFzc1JlZlB0cjxTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25FbGVtZW50PiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpjcmUKIHZvaWQgU2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiB7CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRl
ZAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KHNoYWRv
d0hvc3QoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PihzaGFkb3dIb3N0KCkpOwogICAgIGlmIChpbnB1dCAmJiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkg
JiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAg
ICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsRGV0YWNoUmVu
ZGVyZXJzKCkKIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyB2aXNp
YmxlLCBvbiBtb3VzZXVwLCBjbGVhciB0aGUgdmFsdWUsIGFuZCBzZXQgc2VsZWN0aW9uCi0gICAg
UmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHRvSFRNTElucHV0RWxlbWVudChzaGFkb3dI
b3N0KCkpKTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKSk7CiAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dC0+
aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFu
ZGxlZCgpKQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICNpZiAhUExBVEZPUk0o
SU9TKQogYm9vbCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OndpbGxSZXNwb25kVG9N
b3VzZUNsaWNrRXZlbnRzKCkKIHsKLSAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHRvSFRNTElucHV0RWxlbWVudChzaGFkb3dIb3N0KCkpOworICAgIGNvbnN0IEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKTsK
ICAgICBpZiAoaW5wdXQgJiYgIWlucHV0LT5pc0Rpc2FibGVkT3JSZWFkT25seSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKaW5kZXggZmJlODhkNWUxNTlkZTU5OGE5NTkyZWIzZWZlNDRhNzFlNTljZGMw
Yi4uMmM3M2RiOWZkNGJlY2RhNDQ0ZGU5ZjNiODAzNzg3NmFhMjhhNzM3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC05NzUsNyArOTc1
LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OnZpYUluc3BlY3Rv
clN0eWxlU2hlZXQoRG9jdW1lbnQqIGRvY3VtZW4KIAogICAgIENTU1N0eWxlU2hlZXQqIGNzc1N0
eWxlU2hlZXQgPSBudWxscHRyOwogICAgIGlmIChzdHlsZUVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKLSAgICAgICAgY3NzU3R5bGVTaGVldCA9IHRvSFRNTFN0eWxlRWxlbWVudChzdHlsZUVsZW1l
bnQuZ2V0KCkpLT5zaGVldCgpOworICAgICAgICBjc3NTdHlsZVNoZWV0ID0gZG93bmNhc3Q8SFRN
TFN0eWxlRWxlbWVudD4oKnN0eWxlRWxlbWVudCkuc2hlZXQoKTsKICAgICBlbHNlIGlmIChzdHls
ZUVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICBjc3NTdHlsZVNoZWV0ID0gZG93bmNh
c3Q8U1ZHU3R5bGVFbGVtZW50Pigqc3R5bGVFbGVtZW50KS5zaGVldCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBkMmRmNGE4N2E0
ZTBlN2Q2Y2QxOTc4ZDRmY2M4NTUxZjlkNDljMmNiLi5iYmEzOWY2NmYxNTFiNTkyNmE0ZjBmM2E2
NTAwZWRhYWY4ZTVmZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTEyOTcsOCArMTI5Nyw4IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JO
b2RlCiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRlVGFnKSkKLSAgICAgICAg
ICAgIHZhbHVlLT5zZXRUZW1wbGF0ZUNvbnRlbnQoYnVpbGRPYmplY3RGb3JOb2RlKHRvSFRNTFRl
bXBsYXRlRWxlbWVudChlbGVtZW50KS0+Y29udGVudCgpLCAwLCBub2Rlc01hcCkpOworICAgICAg
ICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICAgICAgdmFsdWUt
PnNldFRlbXBsYXRlQ29udGVudChidWlsZE9iamVjdEZvck5vZGUoZG93bmNhc3Q8SFRNTFRlbXBs
YXRlRWxlbWVudD4oKmVsZW1lbnQpLmNvbnRlbnQoKSwgMCwgbm9kZXNNYXApKTsKICNlbmRpZgog
CiAgICAgfSBlbHNlIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCA1Mjc4ZjRhYzUwNmM4OTYzMTQyZTk3OGEz
NjgyMWYxNTAxMTU1MWVhLi5lMDZiNTZkNzA3MTE2NzE2NzRmNGZhYTNmOGJkODAyM2QwOWVlNGY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE5MCw3ICsx
OTAsNyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRl
KEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgICAgICBpZiAoIWVsZW1lbnQuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICBjb250cm9sLmFwcGVuZEZvcm1EYXRh
KCpkb21Gb3JtRGF0YSwgaXNNdWx0aVBhcnRGb3JtKTsKICAgICAgICAgaWYgKGlzSFRNTElucHV0
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQg
PSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKGlucHV0LmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgICAgICAgICBmb3JtVmFs
dWVzLmFwcGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0Lm5hbWUoKS5zdHJpbmco
KSwgaW5wdXQudmFsdWUoKSkpOwogICAgICAgICAgICAgICAgIGlucHV0LmFkZFNlYXJjaFJlc3Vs
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggY2Q3MTZkOTU3ZTIw
ZWZkYjE3ODRiOTVkZDUxZjBkMDUzMTVhOThlYi4uY2M0MDM3YTdlOTE3ZjRjYTlkZjVkMmY1ZWE4
Mzk2YWQzODk0ZWU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0x
MDMzLDkgKzEwMzMsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRPcGVuZXIoRnJhbWUqIG9wZW5l
cikKIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNrQ29udGVudCgpCiB7CiAgICAgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUub3duZXJFbGVtZW50KCk7Ci0gICAg
aWYgKCFvd25lciB8fCAhb3duZXItPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICBpZiAoIW93
bmVyIHx8ICFpc0hUTUxPYmplY3RFbGVtZW50KG93bmVyKSkKICAgICAgICAgcmV0dXJuOwotICAg
IHRvSFRNTE9iamVjdEVsZW1lbnQob3duZXIpLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKKyAg
ICBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oKm93bmVyKS5yZW5kZXJGYWxsYmFja0NvbnRl
bnQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAppbmRleCA5YmFkOWI0N2U0YzZmZjVlYjk2
ZjhhYmFlZjkyYTcyZjU2ZjQyNTQxLi45NzU0OTdhZGM1YTFiZDJhY2U0MmRhODAxMmQxNWUyNGM0
ZTEwOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKQEAgLTQwNiwxNCAr
NDA2LDE0IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVu
dCgpCiAgICAgfQogICAgIGlmIChtX2ltYWdlKSB7CiAgICAgICAgIG1faW1hZ2UtPnJlbW92ZUNs
aWVudCh0aGlzKTsKLSAgICAgICAgbV9pbWFnZSA9IDA7CisgICAgICAgIG1faW1hZ2UgPSBudWxs
cHRyOwogICAgIH0KIAogICAgIGxvYWRFdmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KCp0aGlzKTsK
ICAgICBtX2hhc1BlbmRpbmdMb2FkRXZlbnQgPSBmYWxzZTsKICAgICAKICAgICBpZiAoaXNIVE1M
T2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAgICB0b0hUTUxPYmplY3RFbGVtZW50KGVs
ZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CisgICAgICAgIGRvd25jYXN0PEhUTUxP
YmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZhbGxiYWNrQ29udGVudCgpOwogCiAgICAg
Ly8gT25seSBjb25zaWRlciB1cGRhdGluZyB0aGUgcHJvdGVjdGlvbiByZWYtY291bnQgb2YgdGhl
IEVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHJldHVybmluZwogICAgIC8vIGZyb20gdGhpcyBm
dW5jdGlvbiBhcyBkb2luZyBzbyBtaWdodCByZXN1bHQgaW4gdGhlIGRlc3RydWN0aW9uIG9mIHRo
aXMgSW1hZ2VMb2FkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcApp
bmRleCBmOWFkZjZjZTdiN2IyZTEzNWEyMTJlNDg4N2M2YTU4NmQ1OGRjM2U4Li45N2JkYWMxNzRj
NmZiMTZkY2RlYjVlNTAxYTk4ZTNlMzBlN2YxZTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9T
dWJmcmFtZUxvYWRlci5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCBib29sIFN1YmZyYW1lTG9hZGVy
OjpyZXF1ZXN0T2JqZWN0KEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIG93bmVyRWxlbWVudCwgY29u
c3QgUwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgY29tcGxldGVkVVJMID0gY29t
cGxldGVVUkwodXJsKTsKIAotICAgIGJvb2wgaGFzRmFsbGJhY2tDb250ZW50ID0gaXNIVE1MT2Jq
ZWN0RWxlbWVudChvd25lckVsZW1lbnQpICYmIHRvSFRNTE9iamVjdEVsZW1lbnQob3duZXJFbGVt
ZW50KS5oYXNGYWxsYmFja0NvbnRlbnQoKTsKKyAgICBib29sIGhhc0ZhbGxiYWNrQ29udGVudCA9
IGlzSFRNTE9iamVjdEVsZW1lbnQob3duZXJFbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0
RWxlbWVudD4ob3duZXJFbGVtZW50KS5oYXNGYWxsYmFja0NvbnRlbnQoKTsKIAogICAgIGJvb2wg
dXNlRmFsbGJhY2s7CiAgICAgaWYgKHNob3VsZFVzZVBsdWdpbihjb21wbGV0ZWRVUkwsIG1pbWVU
eXBlLCBvd25lckVsZW1lbnQuc2hvdWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcygpLCBoYXNGYWxs
YmFja0NvbnRlbnQsIHVzZUZhbGxiYWNrKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGVh
NDA3OWM2NzRmZTVlM2ZkMmY2ODBhYzY1MzM0ZDg1NDUwNWY3NWEuLmQzMmQzNjlkYmM5MTk0NDVh
YTAzZDRkNmM1MDU5ZjVmM2YyNzcyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQwOSw5
ICs0MDksOSBAQCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQpCiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVzdWx0LmlubmVyTm9uU2hh
cmVkRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBHZXQgdG9vbHRpcCByZXByZXNlbnRpbmcg
Zm9ybSBhY3Rpb24sIGlmIHJlbGV2YW50CiAgICAgICAgICAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0
LT5pc1N1Ym1pdEJ1dHRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0gPSBpbnB1dC0+Zm9ybSgpKSB7CisgICAgICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlucHV0LmlzU3VibWl0QnV0dG9uKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGlucHV0LmZvcm0oKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcCA9IGZvcm0tPmFjdGlvbigpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGZvcm0tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IGZvcm0tPnJlbmRlcmVyKCktPnN0eWxlKCkuZGly
ZWN0aW9uKCk7CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29u
c3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSkgewog
ICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkgewot
ICAgICAgICAgICAgICAgIHRvb2xUaXAgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCktPmRl
ZmF1bHRUb29sVGlwKCk7CisgICAgICAgICAgICAgICAgdG9vbFRpcCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCplbGVtZW50KS5kZWZhdWx0VG9vbFRpcCgpOwogCiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBvYnRhaW4gdGV4dCBkaXJlY3Rpb24gb2YgdG9vbHRpcCBm
cm9tCiAgICAgICAgICAgICAgICAgLy8gQ2hyb21lQ2xpZW50IG9yIHBsYXRmb3JtLiBBcyBvZiBP
Y3RvYmVyIDIwMTEsIGFsbCBjbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKaW5kZXggNTE1OTYyNDZlN2Y4ZGRlYWM2YTYyZGI5NTFjMWVlMDFlMjE5ODQxMy4uNWFkMzNi
YzE2OGUxOGNkZmI0MmE5NGZmMzIyZDNlNjQwOWY5MjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKQEAgLTYyMyw3ICs2MjMsNyBAQCBFbGVtZW50KiBEcmFnQ29udHJv
bGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQq
IHN0YQogewogICAgIHN0YXRlLnR5cGUgPSAoc291cmNlRnJhbWUtPnNlbGVjdGlvbigpLmNvbnRh
aW5zKGRyYWdPcmlnaW4pKSA/IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24gOiBEcmFnU291cmNl
QWN0aW9uTm9uZTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvIHJlbmRlcmVyID0gc3RhcnRF
bGVtZW50LT5yZW5kZXJlcigpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50
KCkpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLT5ub25Qc2V1ZG9FbGVt
ZW50KCk7CkBAIC02NDYsNyArNjQ2LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdn
YWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmICgobV9kcmFnU291cmNlQWN0aW9uICYgRHJhZ1NvdXJj
ZUFjdGlvbkxpbmspCiAgICAgICAgICAgICAgICAgJiYgaXNIVE1MQW5jaG9yRWxlbWVudChlbGVt
ZW50KQotICAgICAgICAgICAgICAgICYmIHRvSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVudCktPmlz
TGl2ZUxpbmsoKSkgeworICAgICAgICAgICAgICAgICYmIGRvd25jYXN0PEhUTUxBbmNob3JFbGVt
ZW50PigqZWxlbWVudCkuaXNMaXZlTGluaygpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUudHlw
ZSA9IHN0YXRpY19jYXN0PERyYWdTb3VyY2VBY3Rpb24+KHN0YXRlLnR5cGUgfCBEcmFnU291cmNl
QWN0aW9uTGluayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAg
ICB9CkBAIC02NTQsNyArNjU0LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJs
ZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICB9CiAK
ICAgICAvLyBXZSBlaXRoZXIgaGF2ZSBub3RoaW5nIHRvIGRyYWcgb3Igd2UgaGF2ZSBhIHNlbGVj
dGlvbiBhbmQgd2UncmUgbm90IG92ZXIgYSBkcmFnZ2FibGUgZWxlbWVudC4KLSAgICByZXR1cm4g
KHN0YXRlLnR5cGUgJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSA/IHN0YXJ0RWxlbWVudCA6
IDA7CisgICAgcmV0dXJuIChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikg
PyBzdGFydEVsZW1lbnQgOiBudWxscHRyOwogfQogCiBzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENh
Y2hlZEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggZDliNjcwZDIxMWFjYjFmMzRmZmE0YTE2NmRlOTMyMjU1OTIzOWU1My4uYzEzMTVi
NjFjNjk4ZTBmZDdiYzgyZmY1MWU2YjJjNDYxZjU5NzMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgRnJhbWUqIEV2ZW50SGFuZGxlcjo6
c3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAjaWYgRU5BQkxFKENVUlNPUl9TVVBQ
T1JUKQogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShOb2RlKiBub2RlKQogewotICAgIHJldHVy
biBub2RlICYmIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQo
bm9kZSktPmlzSW1hZ2VCdXR0b24oKTsKKyAgICByZXR1cm4gbm9kZSAmJiBpc0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmlzSW1hZ2VC
dXR0b24oKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBub2RlJ3MgZWRpdGFibGUgYmxv
Y2sgaXMgbm90IGN1cnJlbnQgZm9jdXNlZCBmb3IgZWRpdGluZwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDc1ZDhjNWRmMjE1YWEzNGRiZjJiYTU2OWJkODE5NDU1
Njg3YzQxYWQuLmEwM2FhMGQ2ZmVkZDg0ZGI3MTk2ODljZjc4YjFmYjgxNTRiZDE4ZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTg4NSw5ICs4ODUsOSBAQCBi
b29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVj
dGlvbiBkaXJlY3Rpb24sIEtleWJvYQogICAgICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJs
ZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBm
b2N1c2VkRWxlbWVudCk7CiAgICAgICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJz
b2x1dGVDb29yZGluYXRlcyhmb2N1c2VkRWxlbWVudCwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICov
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkp
IHsKLSAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IHRvSFRNTEFyZWFFbGVtZW50
KGZvY3VzZWRFbGVtZW50KTsKLSAgICAgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVFbmNs
b3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlvbiwgYXJlYS0+
aW1hZ2VFbGVtZW50KCkpOwotICAgICAgICAgICAgc3RhcnRpbmdSZWN0ID0gdmlydHVhbFJlY3RG
b3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbihhcmVhLCBkaXJlY3Rpb24pOworICAgICAgICAgICAg
SFRNTEFyZWFFbGVtZW50JiBhcmVhID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpOworICAgICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0Jv
eE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBhcmVhLmltYWdlRWxl
bWVudCgpKTsKKyAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IHZpcnR1YWxSZWN0Rm9yQXJlYUVs
ZW1lbnRBbmREaXJlY3Rpb24oJmFyZWEsIGRpcmVjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA5MmNiNzkxNWNmYjA2MTNmM2MxMDhmNmZm
NmE1MDExZTFmZWZjODk3Li45YWFmMjVkMzdiMzA4Yjg2OTIxMTZhZTMyYmEyMmJhMjEzODVkNDkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNDE2LDcgKzE0MTYsNyBAQCB2b2lk
IEZyYW1lVmlldzo6YWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShSZW5kZXJFbWJlZGRlZE9iamVj
dCYgZW1iZWRkZWRPYmplY3QpCiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50ID0g
ZW1iZWRkZWRPYmplY3QuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBpZiAoaXNIVE1MT2JqZWN0
RWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxFbWJlZEVsZW1lbnQoZWxlbWVudCkpIHsKICAgICAg
ICAgLy8gVGVsbCB0aGUgRE9NIGVsZW1lbnQgdGhhdCBpdCBuZWVkcyBhIHdpZGdldCB1cGRhdGUu
Ci0gICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFwbHVnaW5FbGVtZW50Lm5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdl
KCkpCiAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LnNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUp
OwogICAgIH0KQEAgLTI3ODksNyArMjc4OSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFbWJl
ZGRlZE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiAKICAgICBp
ZiAoZW1iZWRkZWRPYmplY3QuaXNTbmFwc2hvdHRlZFBsdWdJbigpKSB7CiAgICAgICAgIGlmIChp
c0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVkRWxlbWVudChlbGVtZW50
KSkgewotICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z2luRWxlbWVudCA9
IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50PihlbGVtZW50KTsKICAgICAgICAgICAgIHBsdWdpbkVsZW1lbnQuY2hlY2tTbmFwc2hv
dFN0YXR1cygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTI4MDAsNyArMjgwMCw3
IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdChSZW5kZXJFbWJlZGRlZE9i
amVjdCYgZW1iZWRkZWRPYmplY3QpCiAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdHVybiBpbnRv
IGEgcmVhbCB2aXJ0dWFsIGRpc3BhdGNoIGlmIHdlIGRlZmluZWQKICAgICAvLyB1cGRhdGVXaWRn
ZXQoUGx1Z2luQ3JlYXRpb25PcHRpb24pIG9uIEhUTUxFbGVtZW50LgogICAgIGlmIChpc0hUTUxP
YmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVkRWxlbWVudChlbGVtZW50KSB8fCBp
c0hUTUxBcHBsZXRFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7
CisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgaWYgKHBsdWdpbkVs
ZW1lbnQubmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkgewogICAgICAgICAgICAgcGx1Z2luRWxl
bWVudC5jaGVja1NuYXBzaG90U3RhdHVzKCk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDZlYTBjZGFhMDljZWU2ZTY1MDJiMmM5
OGMzMTBjMTY4NmRkY2VjYTEuLjg5MDkzOGMzNzRlZmExMjNhNzFiZjg3NDNjN2U4ZjhkYzRjMGYx
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0yMzEsMTkgKzIz
MSwxOSBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUp
CiAgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXModG9TdHlsZWRFbGVt
ZW50KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CiAKICAgICAgICAgaWYgKGlz
SFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2VFbGVtZW50ID0gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAg
ICAgVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7Ci0gICAgICAgICAgICBDYWNoZWRJbWFnZSog
Y2FjaGVkSW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7Ci0gICAgICAgICAgICBh
ZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCks
IHVybCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmxpbmtUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmtFbGVtZW50ID0g
dG9IVE1MTGlua0VsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoQ1NTU3R5bGVTaGVl
dCogc2hlZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKSkgewotICAgICAgICAgICAgICAgIFVSTCB1
cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50JiBpbWFnZUVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCk7CisgICAgICAgICAg
ICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC5mYXN0R2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNh
Y2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LmNhY2hlZEltYWdlKCk7CisgICAgICAgICAgICBhZGRJ
bWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1lbnQucmVuZGVyZXIoKSwgdXJs
KTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChlbGVtZW50KSkgeworICAg
ICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5r
RWxlbWVudD4oKmVsZW1lbnQpOworICAgICAgICAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHNoZWV0
ID0gbGlua0VsZW1lbnQuc2hlZXQoKSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBkb2N1
bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJl
ZkF0dHIpKTsKICAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KHNoZWV0LCB1
cmwpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxTdHlsZUVsZW1lbnQo
ZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IHRvSFRN
TFN0eWxlRWxlbWVudChlbGVtZW50KS0+c2hlZXQoKSkKKyAgICAgICAgICAgIGlmIChDU1NTdHls
ZVNoZWV0KiBzaGVldCA9IGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KCplbGVtZW50KS5zaGVl
dCgpKQogICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoc2hlZXQsIFVSTCgp
KTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlv
bi5jcHAKaW5kZXggYjhjODg1MTk2NWE5MTQ0NmM2ZmVmNDk1OGJmMzFiM2JlYWZjZDgzZC4uOWQ2
MjNhMTZkMjljOGU5ZDg0MDRjMGZjODlkN2VhNWYzMjNhMDI0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTY3LDEzICs2NywxMyBAQCBGb2N1c0NhbmRp
ZGF0ZTo6Rm9jdXNDYW5kaWRhdGUoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
KQogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwogCiAgICAgaWYgKGlzSFRNTEFy
ZWFFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IHRvSFRN
TEFyZWFFbGVtZW50KG5vZGUpOwotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGFy
ZWEtPmltYWdlRWxlbWVudCgpOworICAgICAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWEgPSBkb3du
Y2FzdDxIVE1MQXJlYUVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UgPSBhcmVhLmltYWdlRWxlbWVudCgpOwogICAgICAgICBpZiAoIWltYWdlIHx8ICFpbWFn
ZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2aXNpYmxlTm9k
ZSA9IGltYWdlOwotICAgICAgICByZWN0ID0gdmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERp
cmVjdGlvbihhcmVhLCBkaXJlY3Rpb24pOworICAgICAgICByZWN0ID0gdmlydHVhbFJlY3RGb3JB
cmVhRWxlbWVudEFuZERpcmVjdGlvbigmYXJlYSwgZGlyZWN0aW9uKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDUxNDgwN2I5MDA2NmVlODgwMzQ1MTEyMjFj
YzQxMDRkNTdiZDUwYzYuLmI4MmY5ZWIyNGI4NzM2YmFmZTU1MzVkZTExZTNiNjY5MjA0MjlhNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC0zNTEsOCArMzUxLDggQEAgc3Rh
dGljIE5vZGUqIGFuY2VzdG9yUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMoY29uc3QgSGl0VGVzdFJl
c3VsdCYgaGl0VGVzdFJlc3VsdCwKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbnRlcmVzdGVk
IGFib3V0IHRoZSBmcmFtZSwgdXNlIGl0LgogICAgICAgICAgICAgaWYgKG5vZGVCb3VuZHMpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhpcyBu
b2RlIGlzIGFuIGFyZWEgZWxlbWVudC4gIFRoZSBvbmx5IHdheSB0aGlzIGNhbiBoYXBwZW4gaXMg
aWYgdGhpcyBpcyB0aGUgZmlyc3QgY2hlY2suCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0g
aGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRlc3RSZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWFUYWcpKQot
ICAgICAgICAgICAgICAgICAgICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJbnRSZWN0KHRvSFRNTEFy
ZWFFbGVtZW50KG5vZGUpLT5jb21wdXRlUmVjdChoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVk
Tm9kZSgpLT5yZW5kZXJlcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkgJiYgaXNIVE1MQXJlYUVsZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
ICpub2RlQm91bmRzID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pigq
bm9kZSkuY29tcHV0ZVJlY3QoaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+cmVu
ZGVyZXIoKSkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUgJiYgbm9kZS0+cmVuZGVy
ZXIoKSkKICAgICAgICAgICAgICAgICAgICAgKm5vZGVCb3VuZHMgPSBub2RlLT5yZW5kZXJlcigp
LT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA5NTkzYjc2MDQxOTk1MmQw
YmMyMGExNGJmN2UyNjQxODA1NGQwODlmLi5hYTRiYTlmZDljOWRiYTI1MzNmYWNkZWM0ZTA2Mzc3
M2JhY2IxNTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
CkBAIC00NCwxMCArNDQsMTEgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTVkdBRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2lu
Y2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgog
CkBAIC0yNzIsMTQgKzI3MywxNCBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6YWx0RGlzcGxheVN0
cmluZygpIGNvbnN0CiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIAotICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQobV9pbm5lck5v
blNoYXJlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlID0g
dG9IVE1MSW1hZ2VFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIGRpc3BsYXlTdHJpbmcoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0ciksIG1f
aW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKKyAgICBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50KCpt
X2lubmVyTm9uU2hhcmVkTm9kZSkpIHsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2Ug
PSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5vZGUpOworICAg
ICAgICByZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIp
LCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChpc0hU
TUxJbnB1dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1faW5uZXJOb25TaGFy
ZWROb2RlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW5wdXQtPmFsdCgp
LCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgaWYgKGlzSFRNTElucHV0RWxlbWVu
dCgqbV9pbm5lck5vblNoYXJlZE5vZGUpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1faW5uZXJOb25TaGFyZWROb2RlKTsK
KyAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW5wdXQuYWx0KCksIG1faW5uZXJOb25TaGFy
ZWROb2RlLmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0zMzUsMTUg
KzMzNiwxNSBAQCBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwoKSBjb25zdAogICAg
IGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUpCiAgICAgICAgIHJldHVybiBVUkwoKTsKIAotICAg
IGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpICYmICFtX2lu
bmVyTm9uU2hhcmVkTm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgIGlmICghaXNIVE1M
RW1iZWRFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkgJiYgIWlzSFRNTE9iamVjdEVsZW1l
bnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKICAgICAgICAgcmV0dXJuIFVSTCgpOwogCi0gICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7Ci0gICAgVVJMIHVybCA9IG1faW5uZXJOb25T
aGFyZWROb2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhlbGVtZW50LT51cmwoKSkpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQm
IGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNo
YXJlZE5vZGUpOworICAgIFVSTCB1cmwgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoZWxlbWVudC51
cmwoKSkpOwogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIFVSTCgpOwog
Ci0gICAgaWYgKGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwg
KGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkuaXNFbXB0eSgpICYmIHVybC5wYXRoKCkubG93ZXIoKS5l
bmRzV2l0aCgiLnBkZiIpKSkKKyAgICBpZiAoZWxlbWVudC5zZXJ2aWNlVHlwZSgpID09ICJhcHBs
aWNhdGlvbi9wZGYiIHx8IChlbGVtZW50LnNlcnZpY2VUeXBlKCkuaXNFbXB0eSgpICYmIHVybC5w
YXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKICAgICAgICAgcmV0dXJuIHVybDsKICAg
ICByZXR1cm4gVVJMKCk7CiB9CkBAIC00MjQsMTIgKzQyNSwxMiBAQCB2b2lkIEhpdFRlc3RSZXN1
bHQ6OnRvZ2dsZU1lZGlhRnVsbHNjcmVlblN0YXRlKCkgY29uc3QKIHZvaWQgSGl0VGVzdFJlc3Vs
dDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAogewogI2lmIEVOQUJMRShWSURFTykK
LSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdChtZWRpYUVsZW1lbnQoKSk7Ci0gICAgaWYg
KG1lZGlhRWx0ICYmIGlzSFRNTFZpZGVvRWxlbWVudChtZWRpYUVsdCkpIHsKLSAgICAgICAgSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbHQgPSB0b0hUTUxWaWRlb0VsZW1lbnQobWVkaWFFbHQpOwot
ICAgICAgICBpZiAoIXZpZGVvRWx0LT5pc0Z1bGxzY3JlZW4oKSAmJiBtZWRpYUVsdC0+c3VwcG9y
dHNGdWxsc2NyZWVuKCkpIHsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQodGhp
cy0+bWVkaWFFbGVtZW50KCkpOworICAgIGlmIChtZWRpYUVsZW1lbnQgJiYgaXNIVE1MVmlkZW9F
bGVtZW50KG1lZGlhRWxlbWVudCkpIHsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlhRWxlbWVudCk7CisgICAg
ICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1lZGlhRWxlbWVudC0+c3Vw
cG9ydHNGdWxsc2NyZWVuKCkpIHsKICAgICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICAgICAgICAgIHZp
ZGVvRWx0LT5lbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIHZpZGVvRWxlbWVudC5lbnRl
ckZ1bGxzY3JlZW4oKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtNDM4LDggKzQzOSw4
IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAog
Ym9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYUNvbnRyb2xzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKFZJREVPKQotICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdCA9IG1lZGlh
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gbWVkaWFFbHQtPmNvbnRyb2xzKCk7CisgICAgaWYg
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRoaXMtPm1lZGlhRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5jb250cm9scygpOwogI2VuZGlmCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtNTE3LDEwICs1MTgsMTAgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojpp
c0xpdmVMaW5rKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJVUkxFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVudChtX2lubmVyVVJMRWxl
bWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KG1faW5uZXJV
UkxFbGVtZW50LmdldCgpKS0+aXNMaXZlTGluaygpOworICAgIGlmIChpc0hUTUxBbmNob3JFbGVt
ZW50KCptX2lubmVyVVJMRWxlbWVudCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5j
aG9yRWxlbWVudD4oKm1faW5uZXJVUkxFbGVtZW50KS5pc0xpdmVMaW5rKCk7CiAKLSAgICBpZiAo
bV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFUYWcpKQorICAgIGlmIChp
c1NWR0FFbGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBtX2lubmVy
VVJMRWxlbWVudC0+aXNMaW5rKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTUsMTEgKzU1
NiwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKICAg
ICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKSkK
KyAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2lubmVy
Tm9uU2hhcmVkTm9kZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1lbnQo
bV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgpOworICAgIGlmIChpc0hU
TUxJbnB1dEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVkTm9kZSkuaXNUZXh0Rmll
bGQoKTsKIAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCBm
NGRhY2ZhZTNjMGYzYTEzZjQ5OWFhMTA5MGM4OTE0MDQyMzE0ZjY5Li4xMzljYjk3MmY1N2EwMDAw
OGYxMTEwYjkyOTRhNDBmZjgyOTFkMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8gSWYgd2UncmUgYW4gaW5wdXQgZWxlbWVudCwgd2Ug
bWF5IG5lZWQgdG8gY2hhbmdlIG91ciBidXR0b24gdGV4dC4KICAgICBpZiAoaXNIVE1MSW5wdXRF
bGVtZW50KGZvcm1Db250cm9sRWxlbWVudCgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChmb3JtQ29udHJvbEVsZW1lbnQoKSk7CisgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Zm9ybUNvbnRyb2xFbGVtZW50KCkpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC52YWx1
ZVdpdGhEZWZhdWx0KCk7CiAgICAgICAgIHNldFRleHQodmFsdWUpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBiZWRkMWM3NDZkM2RiZDU4
MDZhYmJhZDdiMTU4Mzg0NjJlNDViOWJjLi40OTcwYzA0ZWI4NTcwYzA5ODllOTU5NGRhY2QwNTFm
NGY4M2UyY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291
bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
CkBAIC0xNDIsOCArMTQyLDggQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
cmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShvbFRhZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSFRNTE9MaXN0RWxlbWVudChl
bGVtZW50KS0+c3RhcnQoKTsKKyAgICAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxl
bWVudCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1l
bnQ+KCplbGVtZW50KS5zdGFydCgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggY2I5MjBh
ZjYyNjdhYzI5OTZlOWNhNzdkZjFhZWQxYjdmYmM4MDE5OS4uMzE4ZDczZGExOTcxYjNlYTE5OWZi
Njc5ZDA1NjhiZDMxYmQ2OWM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQuaXNQbHVnSW5JbWFnZUVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIHNuYXBzaG90ID0gdG9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KHBsdWdJbkVsZW1lbnQpLnNuYXBzaG90SW1hZ2UoKTsKKyAgICBJbWFnZSog
c25hcHNob3QgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihwbHVnSW5FbGVtZW50
KS5zbmFwc2hvdEltYWdlKCk7CiAgICAgaWYgKHNuYXBzaG90KQogICAgICAgICBwYWludFNuYXBz
aG90SW1hZ2UocGFpbnRJbmZvLCBwYWludE9mZnNldCwgc25hcHNob3QpOwogfQpAQCAtNDk1LDcg
KzQ5NSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAgaWYgKCF3
YXNNaXNzaW5nV2lkZ2V0ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRTaXplLndpZHRoKCkgJiYg
bmV3U2l6ZS5oZWlnaHQoKSA+PSBvbGRTaXplLmhlaWdodCgpKSB7CiAgICAgICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCYgZWxlbWVudCA9IGZyYW1lT3duZXJFbGVtZW50KCk7CiAgICAgICAgIGlm
IChlbGVtZW50LmlzUGx1Z2luRWxlbWVudCgpICYmIHRvSFRNTFBsdWdJbkVsZW1lbnQoZWxlbWVu
dCkuaXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGVs
ZW1lbnQpOworICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCk7CiAgICAg
ICAgICAgICBpZiAocGx1Z0luSW1hZ2VFbGVtZW50LmRpc3BsYXlTdGF0ZSgpID4gSFRNTFBsdWdJ
bkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCAmJiBwbHVnSW5JbWFnZUVsZW1lbnQuc25hcHNo
b3REZWNpc2lvbigpID09IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6Ok1heVNuYXBzaG90V2hlblJl
c2l6ZWQpIHsKICAgICAgICAgICAgICAgICBwbHVnSW5JbWFnZUVsZW1lbnQuc2V0TmVlZHNDaGVj
a0ZvclNpemVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkuYWRk
RW1iZWRkZWRPYmplY3RUb1VwZGF0ZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWVsZHNldC5oCmluZGV4IGE0MDVhYTRkNmQ4NjZlNWVhMzEyNjQwMTM3Yzk0YmY1MGM3
ZWU1MWQuLjlmNjcyZDdhNjE4ZDBjYTBlOGFkNjIwNmQwNGEzZTkxNTkxMGMyMmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKICAgICBlbnVtIEZpbmRMZWdlbmRPcHRpb24geyBJZ25vcmVGbG9hdGluZ09yT3V0T2ZG
bG93LCBJbmNsdWRlRmxvYXRpbmdPck91dE9mRmxvdyB9OwogICAgIFJlbmRlckJveCogZmluZExl
Z2VuZChGaW5kTGVnZW5kT3B0aW9uID0gSWdub3JlRmxvYXRpbmdPck91dE9mRmxvdykgY29uc3Q7
CiAKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50JiBmaWVsZFNldEVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsgfQorICAg
IEhUTUxGaWVsZFNldEVsZW1lbnQmIGZpZWxkU2V0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRv
d25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAog
cHJpdmF0ZToKICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4
IDUwMWM1MWVhNGMzOGM0NTJjZTU3MWY5MGU0YWZjYzdiODc0NzQ0MWEuLjI5NTFjZmE5ZGI2ZTA4
YTRmMmQ2ZTJiMzg0ZjliODc2MDM0YzJlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAtNzAsNyArNzAsNyBAQCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZpbGVVcGxvYWRDb250cm9sKCkKIAogSFRN
TElucHV0RWxlbWVudCYgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVudCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChub2RlRm9yTm9uQW5vbnltb3Vz
KCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlRm9yTm9uQW5v
bnltb3VzKCkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9t
RWxlbWVudCgpCkBAIC0yNTUsNyArMjU1LDcgQEAgSFRNTElucHV0RWxlbWVudCogUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlucHV0
RWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlucHV0RWxl
bWVudCgpLnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBidXR0b25Ob2Rl
ICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQoYnV0
dG9uTm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgOiAwOworICAgIHJldHVy
biBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJbnB1
dEVsZW1lbnQoYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihidXR0b25O
b2RlKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0
dG9uVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKaW5kZXgg
ZDhiYTMxYTBmZjVlN2Y3M2RkYjA3ZGVjMjEzZTllMzljYTM0NjA2Mi4uNDM5MzhjZjQwYTMyOTJi
YzJmZWNjZjU0NjEyNTZjMDIyZWEzNDQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWUuY3BwCkBAIC0zNSw3ICszNSw3IEBAIFJlbmRlckZyYW1lOjpSZW5kZXJGcmFtZShI
VE1MRnJhbWVFbGVtZW50JiBmcmFtZSwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAKIEhU
TUxGcmFtZUVsZW1lbnQmIFJlbmRlckZyYW1lOjpmcmFtZUVsZW1lbnQoKSBjb25zdAogewotICAg
IHJldHVybiB0b0hUTUxGcmFtZUVsZW1lbnQoUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxl
bWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudD4oUmVuZGVyRnJh
bWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogRnJhbWVFZGdlSW5mbyBSZW5kZXJG
cmFtZTo6ZWRnZUluZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHAKaW5kZXggNDQ4NTEzN2NkMGMzYWQ4YTZlNWE0ZDFhMTAyZTZjNzFmOWQzMWE5
Ny4uMTc3MTdkODBlYmRhM2RkY2E0NzA5MzU2ODJjYjNiZTdmYjFkZmNjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIFJl
bmRlckZyYW1lU2V0Ojp+UmVuZGVyRnJhbWVTZXQoKQogCiBIVE1MRnJhbWVTZXRFbGVtZW50JiBS
ZW5kZXJGcmFtZVNldDo6ZnJhbWVTZXRFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9I
VE1MRnJhbWVTZXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAK
IFJlbmRlckZyYW1lU2V0OjpHcmlkQXhpczo6R3JpZEF4aXMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCmluZGV4IGU0MmZlOGQyMjhlMmExNDRmZTQ1
ZTQwYmQ2ZjFiZDA1MDgyOGI0N2YuLjYyMWNmMjhjMGYwOTRlNzc2MzJmOGRhOWE0MGFiMDE1OTEw
ZDMzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2Fu
dmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5j
cHAKQEAgLTUwLDcgKzUwLDcgQEAgUmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENhbnZhcyhI
VE1MQ2FudmFzRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHkKIAogSFRNTENhbnZh
c0VsZW1lbnQmIFJlbmRlckhUTUxDYW52YXM6OmNhbnZhc0VsZW1lbnQoKSBjb25zdAogewotICAg
IHJldHVybiB0b0hUTUxDYW52YXNFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkp
OwogfQogCiBib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAppbmRleCAwZWRjZTJkYmQ2ZTg5
NWExNjMwY2NhYzJjZDYzOWNhOWEzZDk3OTlhLi45MGM2MzU3YmU5MTdmMjQ2M2FkYTA5NDJiZDYw
ODUzNTRiNjdlZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SUZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNw
cApAQCAtNDYsNyArNDYsNyBAQCBSZW5kZXJJRnJhbWU6OlJlbmRlcklGcmFtZShIVE1MSUZyYW1l
RWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bAogCiBIVE1MSUZyYW1l
RWxlbWVudCYgUmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gdG9IVE1MSUZyYW1lRWxlbWVudChSZW5kZXJGcmFtZUJhc2U6OmZyYW1lT3duZXJFbGVtZW50
KCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oUmVuZGVyRnJhbWVC
YXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogYm9vbCBSZW5kZXJJRnJhbWU6OnNob3Vs
ZENvbXB1dGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAppbmRleCBkNjE1NWZjNmQ2ZTQ4NjYwNTc3NDA2OWFiYmYzNzNiZDZlNGZh
OGVmLi5lODU4NTgyYWM3NGJkYTgyMzQwZTI4NTEwNTA2Mjc2ZTQ0NjM5NmNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCBSZW5k
ZXJJbWFnZTo6UmVuZGVySW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHls
ZT4gc3R5bGUsIFN0eWxlSW1hZwogICAgIGltYWdlUmVzb3VyY2UoKS5pbml0aWFsaXplKHRoaXMp
OwogCiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgbV9oYXNT
aGFkb3dDb250cm9scyA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5oYXNTaGFkb3dDb250
cm9scygpOworICAgICAgICBtX2hhc1NoYWRvd0NvbnRyb2xzID0gZG93bmNhc3Q8SFRNTEltYWdl
RWxlbWVudD4oZWxlbWVudCkuaGFzU2hhZG93Q29udHJvbHMoKTsKIH0KIAogUmVuZGVySW1hZ2U6
OlJlbmRlckltYWdlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5
bGUsIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UpCkBAIC01MTcsMjAgKzUxNywyMCBAQCB2b2lkIFJl
bmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50SW5mbyYgcGFpbnRJbmZv
KQogICAgIGlmICghZm9jdXNlZEVsZW1lbnQgfHwgIWlzSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRF
bGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEFyZWFFbGVtZW50KiBhcmVhRWxl
bWVudCA9IHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsKLSAgICBpZiAoYXJlYUVs
ZW1lbnQtPmltYWdlRWxlbWVudCgpICE9IGVsZW1lbnQoKSkKKyAgICBIVE1MQXJlYUVsZW1lbnQm
IGFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQp
OworICAgIGlmIChhcmVhRWxlbWVudC5pbWFnZUVsZW1lbnQoKSAhPSBlbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW4gaWYgdGhlIHRoZW1lIGhhbmRsZXMgZm9jdXMgcmlu
ZyBkcmF3aW5nIGZvciBlbnRpcmUgZWxlbWVudHMsIGl0IHdvbid0IGRvIGl0IGZvcgogICAgIC8v
IGFuIGFyZWEgd2l0aGluIGFuIGltYWdlLCBzbyB3ZSBkb24ndCBjYWxsIFJlbmRlclRoZW1lOjpz
dXBwb3J0c0ZvY3VzUmluZyBoZXJlLgogCi0gICAgUGF0aCBwYXRoID0gYXJlYUVsZW1lbnQtPmNv
bXB1dGVQYXRoKHRoaXMpOworICAgIFBhdGggcGF0aCA9IGFyZWFFbGVtZW50LmNvbXB1dGVQYXRo
KHRoaXMpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgYWRkaXRpb25hbCBjb2RlIHRvIGNsaXAgdGhlIHBhdGggdG8g
dGhlIGltYWdlJ3MgYm91bmRpbmcgYm94PwogCi0gICAgUmVuZGVyU3R5bGUqIGFyZWFFbGVtZW50
U3R5bGUgPSBhcmVhRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBh
cmVhRWxlbWVudFN0eWxlID0gYXJlYUVsZW1lbnQuY29tcHV0ZWRTdHlsZSgpOwogICAgIHVuc2ln
bmVkIHNob3J0IG91dGxpbmVXaWR0aCA9IGFyZWFFbGVtZW50U3R5bGUtPm91dGxpbmVXaWR0aCgp
OwogICAgIGlmICghb3V0bGluZVdpZHRoKQogICAgICAgICByZXR1cm47CkBAIC01NjAsOCArNTYw
LDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVs
bCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsdCA9
IChlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkpID8gdG9IVE1MSW1h
Z2VFbGVtZW50KGVsZW1lbnQoKSkgOiAwOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENv
bXBvc2l0ZVNvdXJjZU92ZXI7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0g
KGVsZW1lbnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKSkgPyBkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWxlbWVudCA/IGltYWdlRWxlbWVudC0+Y29t
cG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgSW1hZ2UqIGltYWdl
ID0gaW1hZ2VSZXNvdXJjZSgpLmltYWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBpbWFnZSwg
TGF5b3V0U2l6ZShyZWN0LnNpemUoKSkpOwogICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
biBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkp
OwpAQCAtNjIyLDggKzYyMiw4IEBAIExheW91dFVuaXQgUmVuZGVySW1hZ2U6Om1pbmltdW1SZXBs
YWNlZEhlaWdodCgpIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VN
YXAoKSBjb25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBlbGVtZW50KCkgJiYgaXNI
VE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyB0b0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgp
KSA6IDA7Ci0gICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChpLT5mYXN0
R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpKSA6IDA7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2UgPSBlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyBkb3duY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaW1h
Z2UgPyBpbWFnZS0+dHJlZVNjb3BlKCkuZ2V0SW1hZ2VNYXAoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1
dGUodXNlbWFwQXR0cikpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
QEAgLTY1NSwxMCArNjU1LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRleHQoKQog
ICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNIVE1MSW5w
dXRFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTElucHV0RWxl
bWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAoaXNIVE1MSW1hZ2VFbGVt
ZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTEltYWdlRWxlbWVudChl
bGVtZW50KCkpLT5hbHRUZXh0KCk7CisgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudCgqZWxlbWVu
dCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVs
ZW1lbnQoKSkuYWx0VGV4dCgpOworICAgIGVsc2UgaWYgKGlzSFRNTEltYWdlRWxlbWVudCgqZWxl
bWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4o
KmVsZW1lbnQoKSkuYWx0VGV4dCgpOwogfQogCiBib29sIFJlbmRlckltYWdlOjpjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAppbmRleCAzNGY5NzJkOTQ5YzEwZTg4YWNkMTBkODU1MDU3YjA1OWJiOTQxYmNm
Li5hZWE0ZjkwOTBmOWM0M2VjYjlkZjIxMTJkMjNiOTk4ZGQwZjMyOWFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNzQsNyArNzQs
NyBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3ko
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcgogewogICAgIEFTU0VSVChyZW5kZXJlci5pc0Nh
bnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gdG9I
VE1MQ2FudmFzRWxlbWVudChyZW5kZXJlci5ub2RlKCkpOworICAgIGNvbnN0IEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIubm9k
ZSgpKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5k
ZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0FjY2VsZXJh
dGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFzOwpAQCAtMzAwLDcgKzMw
MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXll
cigpCiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKENBKQogICAgIGlmICghY29tcG9zaXRv
cigpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSAmJiByZW5kZXJlcigpLmlzQ2FudmFzKCkp
IHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRNTENhbnZh
c0VsZW1lbnQocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgICAgICBjb25zdCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCku
ZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNhbnZhcy0+c2hvdWxkQWNjZWxlcmF0ZShjYW52YXMt
PnNpemUoKSkpCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFjY2VsZXJhdGVzRHJh
d2luZyh0cnVlKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCku
aXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENh
bnZhc0FzTGF5ZXJDb250ZW50cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAg
ICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAgICAgICBpZiAoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQogICAgICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjb250ZXh0
LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJGb3JDYW52YXMp
OwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxNTUzODIyNDhm
MjZhNjUwNjU2ZDg3MDRkOGZiNmIzYWQwY2Q2ODkwLi40YmU0NjkxZDAzYWIyNTAwNmQ0Y2UyNjMx
Yzk1NWU4NzQxZTBjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMjQzNSw3ICsyNDM1LDcgQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYKICNpZiBVU0UoQ09NUE9TSVRJTkdfRk9SX1NNQUxMX0NBTlZBU0VTKQogICAg
ICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcgPSB0cnVlOwog
I2Vsc2UKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRNTENhbnZhc0Vs
ZW1lbnQocmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpOwog
ICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcgPSBjYW52
YXMtPnNpemUoKS5hcmVhKCkgPj0gY2FudmFzQXJlYVRocmVzaG9sZFJlcXVpcmluZ0NvbXBvc2l0
aW5nOwogI2VuZGlmCiAgICAgICAgIENhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kgY29tcG9zaXRp
bmdTdHJhdGVneSA9IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDU3NTlhYmMzNzhmNDAz
ZjA5NTBiNWE1YmM3ZGJjNGU4OGQzOWZjNGYuLjYyYWVkYzNhNzFjYzQ2YzIzZmViZTIxODhhODQ3
M2Q0ZDg2ZmQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBSZW5kZXJMaXN0Qm94Ojp+UmVuZGVyTGlzdEJveCgpCiAK
IEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJMaXN0Qm94OjpzZWxlY3RFbGVtZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkp
OworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4obm9kZUZvck5vbkFub255
bW91cygpKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCkBA
IC0xMTcsOSArMTE3LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgp
CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBz
dHlsZSgpLmZvbnQoKTsKICAgICAgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpKQotICAgICAgICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQp
LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgICAgICAgICAgdGV4
dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9S
ZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXNIVE1MT3B0R3JvdXBF
bGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9IHRvSFRNTE9wdEdyb3Vw
RWxlbWVudChlbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXh0
ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0
KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgp
KTsKICAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3Bh
Y2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKQEAgLTM4NywxMyArMzg3LDEzIEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgU3RyaW5nIGl0ZW1UZXh0OwogICAgIGJvb2wgaXNP
cHRpb25FbGVtZW50ID0gaXNIVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpOwogICAg
IGlmIChpc09wdGlvbkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0gdG9IVE1MT3B0aW9uRWxl
bWVudChsaXN0SXRlbUVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7
CisgICAgICAgIGl0ZW1UZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRl
bUVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICBlbHNlIGlm
IChpc0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSkKLSAgICAgICAgaXRlbVRl
eHQgPSB0b0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KS0+Z3JvdXBMYWJlbFRl
eHQoKTsKKyAgICAgICAgaXRlbVRleHQgPSBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50Pigq
bGlzdEl0ZW1FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIGFwcGx5VGV4dFRyYW5zZm9y
bShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRleHRDb2xvciA9IGxpc3RJ
dGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKGlzT3B0aW9uRWxl
bWVudCAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCktPnNlbGVjdGVkKCkp
IHsKKyAgICBpZiAoaXNPcHRpb25FbGVtZW50ICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChmcmFtZSgpLnNl
bGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1l
bnQoKSA9PSAmc2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0gdGhlbWUo
KS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiAgICAgICAgIC8vIEhv
bm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBkaXNhYmxlZCBpdGVtcwpAQCAtNDI2LDcgKzQy
Niw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgSFRNTEVsZW1lbnQqIGxpc3RJdGVt
RWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29sb3IgYmFja0NvbG9yOwot
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCkgJiYgdG9IVE1MT3B0
aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT5zZWxlY3RlZCgpKSB7CisgICAgaWYgKGlzSFRN
TE9wdGlvbkVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmxpc3RJdGVtRWxlbWVudCkuc2VsZWN0ZWQoKSkgewogICAgICAgICBpZiAoZnJhbWUo
KS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudCgpLmZvY3VzZWRF
bGVtZW50KCkgPT0gJnNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgICAgIGJhY2tDb2xvciA9IHRo
ZW1lKCkuYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogICAgICAgICBl
bHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCAz
NjhlZDllMmJlZWIxZjg4YjU1NDZiN2ZkNjgzNGJlNjFlNmJhMjdhLi5mYTAxMmM5ZThiYmMzYTY3
MzczYjIwNDAzYmU1MWUwMDE5NmQzM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBpbmxpbmUgaW50IFJlbmRlckxp
c3RJdGVtOjpjYWxjVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9leHBsaWNpdFZhbHVl
OwogCiAgICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QodGhpcyk7Ci0gICAgSFRNTE9M
aXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlzdC0+aGFzVGFnTmFtZShvbFRh
ZykpID8gdG9IVE1MT0xpc3RFbGVtZW50KGxpc3QpIDogbnVsbHB0cjsKKyAgICBIVE1MT0xpc3RF
bGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNUYWdOYW1lKG9sVGFnKSkg
PyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxwdHI7CiAgICAgaW50IHZh
bHVlU3RlcCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlzdEVsZW1lbnQtPmlzUmV2
ZXJzZWQoKSkKICAgICAgICAgdmFsdWVTdGVwID0gLTE7CkBAIC01MDEsNyArNTAxLDcgQEAgdm9p
ZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBib29sIGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0gICAgSFRNTE9MaXN0RWxl
bWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5oYXNUYWdOYW1lKG9s
VGFnKSkgPyB0b0hUTUxPTGlzdEVsZW1lbnQobGlzdE5vZGUpIDogbnVsbHB0cjsKKyAgICBIVE1M
T0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1Rh
Z05hbWUob2xUYWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3ROb2RlKSA6IG51
bGxwdHI7CiAgICAgaWYgKG9MaXN0RWxlbWVudCkgewogICAgICAgICBvTGlzdEVsZW1lbnQtPml0
ZW1Db3VudENoYW5nZWQoKTsKICAgICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVsZW1lbnQt
PmlzUmV2ZXJzZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNw
cAppbmRleCBiZGVhOTc5MjkyOTZkZDBhNTZiMzZhY2I5M2JiYjlhYThkY2I5Y2IyLi4yNWE5N2U2
YjNhNThlOTg4ZDZhYTQ2NTEzODlkZjc2ODNhMDAyNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03Myw4ICs3Myw4IEBAIGludCBSZW5kZXJNYXJx
dWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1bHQgPSBtX2xheWVyLT5y
ZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZVNwZWVkKCk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9
IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50ICYmIGVsZW1l
bnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykpCi0gICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJl
c3VsdCwgdG9IVE1MTWFycXVlZUVsZW1lbnQoZWxlbWVudCktPm1pbmltdW1EZWxheSgpKTsKKyAg
ICBpZiAoZWxlbWVudCAmJiBpc0hUTUxNYXJxdWVlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAg
cmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxIVE1MTWFycXVlZUVsZW1lbnQ+KCpl
bGVtZW50KS5taW5pbXVtRGVsYXkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggMTM0Y2Y5NDBmOGM5
MzFiYTM0MTdkZDBmMmMxMjA5YjgwZjlkZmVjOS4uMzdlZWE1ZWU3MjNiZGY4ZGQ1ZTU5MDUxZTU5
OGM5OWI4OWM0NDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBzaXplX3Qgc2VsZWN0ZWRPcHRpb25Db3Vu
dChjb25zdCBSZW5kZXJNZW51TGlzdCYgcmVuZGVyTWVudUxpc3QpCiAKICAgICBzaXplX3QgY291
bnQgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKSB7
Ci0gICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hU
TUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmIChp
c0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICArK2NvdW50Owog
ICAgIH0KICAgICByZXR1cm4gY291bnQ7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBSZW5kZXJN
ZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAKIEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJN
ZW51TGlzdDo6c2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTFNlbGVj
dEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBk
YXRlT3B0aW9uc1dpZHRoKCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSB0b0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgIGFwcGx5
VGV4dFRyYW5zZm9ybShzdHlsZSgpLCB0ZXh0LCAnICcpOwogICAgICAgICBpZiAodGhlbWUoKS5w
b3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgaW4g
dGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNlbnRhZ2Ug
dmFsdWVzIGZvciBub3cuCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6
c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAgIGlmIChpID49IDAgJiYgaSA8
IHNpemUpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKICAgICAg
ICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIHRleHQg
PSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CisgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgICAg
ICBtX29wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNDUxLDkgKzQ1MSw5IEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIFN0cmluZyBpdGVtU3RyaW5nOwogICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoaXNIVE1MT3B0
R3JvdXBFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtU3RyaW5nID0gdG9IVE1MT3B0R3Jv
dXBFbGVtZW50KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOworICAgICAgICBpdGVtU3RyaW5n
ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0
KCk7CiAgICAgZWxzZSBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
aXRlbVN0cmluZyA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnRleHRJbmRlbnRlZFRv
UmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICAgICAgaXRlbVN0cmluZyA9IGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgp
OwogCiAgICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1TdHJpbmcsICcgJyk7CiAg
ICAgcmV0dXJuIGl0ZW1TdHJpbmc7CkBAIC02NTQsNyArNjU0LDcgQEAgYm9vbCBSZW5kZXJNZW51
TGlzdDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIGlmIChs
aXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgcmV0dXJu
IGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVt
ZW50KS0+c2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50
KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CiB9
CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5k
ZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAppbmRleCBlNjI0Njg2
YzVhNDRjYjA0NzAxOGJhMTJjMTUzZWFlM2Y2YmFkNzMzLi45ZWRiYmQ5OWI1MGZmZDBhOTRmNzY4
ODY5MzQ4YjlmYWEzNzhiYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRl
ci5jcHAKQEAgLTQ0LDEwICs0NCwxMCBAQCBIVE1MTWV0ZXJFbGVtZW50KiBSZW5kZXJNZXRlcjo6
bWV0ZXJFbGVtZW50KCkgY29uc3QKICAgICBBU1NFUlQoZWxlbWVudCgpKTsKIAogICAgIGlmIChp
c0hUTUxNZXRlckVsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTE1ldGVy
RWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1ldGVyRWxl
bWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7
Ci0gICAgcmV0dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1lbnQ+KGVsZW1lbnQoKS0+c2hhZG93
SG9zdCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCmluZGV4IDI0MjVmMDYy
MzFmZTg5MTViZTg5MTZkZTkyMTI3YWMxZGUxMDIxYjYuLjJiNGYwNTdhYTEzZTdjZjMzNzYyN2Ni
MjcwZjMyNzIyNDJiZDY2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQcm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBy
b2dyZXNzLmNwcApAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBSZW5kZXJQcm9ncmVzczo6dXBk
YXRlQW5pbWF0aW9uU3RhdGUoKQogSFRNTFByb2dyZXNzRWxlbWVudCogUmVuZGVyUHJvZ3Jlc3M6
OnByb2dyZXNzRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hUTUxQcm9n
cmVzc0VsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxl
bWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFByb2dyZXNzRWxl
bWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7
Ci0gICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50KCktPnNoYWRvd0hvc3Qo
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQ+KGVsZW1lbnQoKS0+
c2hhZG93SG9zdCgpKTsKIH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggYWViODhiZTE4YWNkOWRiOWE2
MzgxZTNmNmMwMGQ2NjliYTNhZTk3MS4uMTA3OTc5ZTFlZjlmZTNiMDAzNWMzZjc2N2Y3ZDc5YjA3
M2RjMGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKQEAg
LTYwLDcgKzYwLDcgQEAgUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVyKCkKIAogSFRNTElucHV0
RWxlbWVudCYgUmVuZGVyU2xpZGVyOjplbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9I
VE1MSW5wdXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIGludCBS
ZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIC8qZmlyc3RM
aW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAK
aW5kZXggNzk3OGZlMjFlNGRjZDZkNzlmYjRiNGZiNDAwOTJlOTIxZmFiY2YxNi4uZGUzNzI2ZDJj
MzZlZDNiNWE1YWJiY2Q4YmRlMzBmYjY2YjllNmRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCkBAIC02NCw3ICs2NCw3
IEBAIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjp+UmVuZGVyU25hcHNob3R0ZWRQbHVnSW4oKQog
CiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6cGx1Z0lu
SW1hZ2VFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KFJlbmRlckVtYmVkZGVkT2JqZWN0OjpmcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OmZyYW1lT3duZXJFbGVtZW50KCkpOwogfQogCiB2b2lkIFJlbmRlclNuYXBzaG90dGVkUGx1Z0lu
OjpsYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5jcHAKaW5kZXggOGIwZDBlZmJiM2Q1ZmI2MGVjNWE4MjE3OGEyMzMxNDRmOGI1MjlkNC4uNDAz
NWY2NjA0MTllYWY1MDgzYWRiM2QzZWI4MWMyZDlhMTk4Nzc5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00OCw3ICs0OCw3IEBAIFJl
bmRlclRleHRDb250cm9sOjp+UmVuZGVyVGV4dENvbnRyb2woKQogCiBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCYgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSBj
b25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KG5vZGVGb3JO
b25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiBUZXh0Q29udHJvbElubmVyVGV4
dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sOjppbm5lclRleHRFbGVtZW50KCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwCmluZGV4IDkxZGI1M2Q5MDU1NzkwMWJjOWVjY2VmZThmY2Q2M2EwNzBlY2QyY2Uu
LjUyNzE4ZGEzYjE1MDU2ZTczYzgyYzViNzA2NWJkNDZhNTQ5OTFjYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNw
cApAQCAtNDUsNyArNDUsNyBAQCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6flJlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lKCkKIAogSFRNTFRleHRBcmVhRWxlbWVudCYgUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6OnRleHRBcmVhRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
SFRNTFRleHRBcmVhRWxlbWVudChSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEZvcm1Db250cm9sRWxl
bWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oUmVuZGVy
VGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9CiAKIGJvb2wgUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDU5NTdlZTdh
NjhiOTJiZGJjMjZkMDJjYWIwMGJmYzlkYjkyYWQ2MmQuLmMyZWM3ZDY3NDYwNTAzZTliZmNjZWEw
MTQ4ZGI3M2FkYmZmYmU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC00ODEsNyArNDgxLDcgQEAg
Ym9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9n
aWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hU
TUxJbnB1dEVsZW1lbnQoUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQo
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KFJlbmRlclRleHRDb250
cm9sOjp0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBhMTUwOGI4OGJiODk5ZGYwNTgxZTJkNDYwZDRj
ODgwYWM1M2Q4MzBkLi5mYjVlZTVjZTNmMmFkZTA4ZGRiNzMwYTQzMzczODNmMjc3MzAwMGRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTk4MCw3ICs5ODAs
NyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghaW5wdXQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gdG9IVE1MRGF0YUxp
c3RFbGVtZW50KGlucHV0LT5saXN0KCkpOworICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFM
aXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQtPmxpc3QoKSk7CiAgICAg
aWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDM2LDggKzEwMzYsOCBAQCB2
b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29s
b3Ioby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29s
b3JTcGFjZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogbm9kZSA9
IG9wdGlvbnMtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBBU1NFUlQoaXNIVE1MT3B0aW9uRWxl
bWVudChub2RlKSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0g
dG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gb3B0aW9u
RWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbkVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOworICAgICAgICBTdHJpbmcg
dmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7CiAgICAgICAgIGlmICghaW5wdXQtPmlzVmFs
aWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZG91YmxlIHBh
cnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5wdXQtPnNhbml0aXplVmFs
dWUodmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpp
bmRleCA5NGUxYmRiM2ZhYWZmY2Q4YzgxOTI0Yjg0YTJhYTRlMWMwYzM5ZjhkLi43ODliZWY1NjFi
NTJjNTI1OWQ1NjdkMzJkZjAyN2YxZTFhZDc2ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC02NzIsNyArNjcyLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYg
Ym94LCBjb24KIAogICAgIC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAgICBpZiAoYm94LmlzTWVu
dUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7
CisgICAgaWYgKGJveC5pc01lbnVMaXN0KCkgJiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+
KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CiAgICAgICAgIGludCBzaXplID0gMjsKICAgICAg
ICAgaW50IGNvdW50ID0gMzsKICAgICAgICAgaW50IHBhZGRpbmcgPSAzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IGQ0Y2FiMmIyYzk3NjVhOGQ0YmU5
ZTg1NTFlZTBjNmJiMzVhOTY2NzQuLmM1YWZlYmQzMWMyYjVlMTg3NTU3YjI4MGEwNGY2ZmU1ZjQ2
MjQ2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAg
LTE2NzgsNyArMTY3OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQCiAKICAgICBOU1NlYXJj
aEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAgICBpZiAoIWlucHV0LT5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaW5wdXQtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYg
IXRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoaW5wdXQpLT5pc1JlYWRPbmx5KCkpKQorICAg
IGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIChpbnB1dC0+aXNUZXh0Rm9y
bUNvbnRyb2woKSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCppbnB1
dCkuaXNSZWFkT25seSgpKSkKICAgICAgICAgdXBkYXRlUHJlc3NlZFN0YXRlKFtzZWFyY2ggY2Fu
Y2VsQnV0dG9uQ2VsbF0sIG8pOwogICAgIGVsc2UgaWYgKFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNl
bGxdIGlzSGlnaGxpZ2h0ZWRdKQogICAgICAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBz
ZXRIaWdobGlnaHRlZDpOT107CkBAIC0xODYxLDEzICsxODYxLDEzIEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1hZ2VFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1
Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHBsdWdJbkVsZW1lbnQp
OworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCpwbHVnSW5FbGVtZW50KTsKIAotICAgIEltYWdl
KiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC0+c25hcHNob3RJbWFnZSgpOworICAgIElt
YWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC5zbmFwc2hvdEltYWdlKCk7CiAgICAg
aWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJTbmFwc2hv
dHRlZFBsdWdJbiogcGx1Z0luUmVuZGVyZXIgPSB0b1JlbmRlclNuYXBzaG90dGVkUGx1Z0luKHBs
dWdJbkltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU25hcHNob3R0ZWRQbHVn
SW4qIHBsdWdJblJlbmRlcmVyID0gdG9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbihwbHVnSW5JbWFn
ZUVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgRmxvYXRQb2ludCBzbmFwc2hvdEFic1BvcyA9IHBs
dWdJblJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICBzbmFwc2hvdEFic1Bvcy5tb3Zl
KHBsdWdJblJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBwbHVnSW5SZW5kZXJlci0+cGFkZGluZ0xl
ZnQoKSwgcGx1Z0luUmVuZGVyZXItPmJvcmRlclRvcCgpICsgcGx1Z0luUmVuZGVyZXItPnBhZGRp
bmdUb3AoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWRlby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCmluZGV4
IDVjOTYwNmZiNjhjNGVhZmVhNzY4ZTcwMWZhMzZjOWIzNDUwY2IwNTIuLjZlYWZmMzNiYjUxZjUw
NTRhNWJmZGU0YzFiNTBlNzk3MjYyYzMwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZGVvLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgUmVuZGVyVmlkZW86OmxheW91
dCgpCiAgICAgCiBIVE1MVmlkZW9FbGVtZW50JiBSZW5kZXJWaWRlbzo6dmlkZW9FbGVtZW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KFJlbmRlck1lZGlhOjptZWRp
YUVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KFJlbmRl
ck1lZGlhOjptZWRpYUVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyVmlkZW86OnVwZGF0ZUZy
b21FbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hl
LmNwcAppbmRleCA3NDg2NjBmYzQ5MmIzNjEzM2VlZTM1ZjIzOTA5ODZkOTdjNDc2MWQ5Li4zZjIx
MTFmNTNkNGVlYjdhZDA1Y2IzNjA0NzU5YTY0OGM1OGIyNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC05Myw3ICs5Myw3IEBAIEltYWdl
KiBTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYg
KG5vZGUgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdXJsU3RyaW5nID0gdG9IVE1MSW1hZ2VFbGVtZW50KG5vZGUpLT5pbWFnZVNvdXJj
ZVVSTCgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVybFN0cmluZyA9IGRvd25jYXN0
PEhUTUxJbWFnZUVsZW1lbnQ+KCpub2RlKS5pbWFnZVNvdXJjZVVSTCgpOwogICAgICAgICBVUkwg
dXJsID0gbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwogICAgICAgICBp
bWFnZUZvckNvbnRhaW5lci0+c2V0VVJMKHVybCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5pbgpp
bmRleCA2N2Y3MmQ4NDQ2MzVmYTIxMDdkM2UzNjE5ZmM3M2Q5ZGE3NTgwZWI4Li5iNzcwOGMxMTFj
YmZiMDJhNzA4M2RkZmYwZGRmNTI5NjhkYWY3MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvc3ZndGFncy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5pbgpAQCAt
Myw3ICszLDcgQEAgbmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKIGZh
bGxiYWNrSW50ZXJmYWNlTmFtZT0iU1ZHVW5rbm93bkVsZW1lbnQiCiBmYWxsYmFja0pTSW50ZXJm
YWNlTmFtZT0iU1ZHRWxlbWVudCIKIAotYQorYSBnZW5lcmF0ZVR5cGVIZWxwZXJzCiAjaWYgRU5B
QkxFX1NWR19GT05UUwogYWx0R2x5cGggZ2VuZXJhdGVUeXBlSGVscGVycwogYWx0R2x5cGhEZWYg
Z2VuZXJhdGVUeXBlSGVscGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDBhMDI2N2FjZDQ3NTQ3NWE3MDA4M2JiMWU4Yjg3NzVkOGU3ZWEyMWUuLjA2NDg5NmRkNmY4ZWQ3
MjVkMWM4YTAwNjNiZjc1OGE1YjRjZmMyNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEludGVybmFsczo6c2V0U2hhZG93UHNldWRv
SWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQwogU3RyaW5n
IEludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAg
aWYgKGVsZW1lbnQgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkpIHsK
LSAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRGb3JtQ29udHJv
bEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KTsKKyAgICAg
ICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRGb3JtQ29udHJvbEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpOwogICAg
ICAgICBpZiAoIXRleHRGb3JtQ29udHJvbEVsZW1lbnQuaXNQbGFjZWhvbGRlclZpc2libGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgaWYgKEhUTUxFbGVtZW50KiBw
bGFjZWhvbGRlckVsZW1lbnQgPSB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LnBsYWNlaG9sZGVyRWxl
bWVudCgpKQpAQCAtOTEyLDkgKzkxMiw4IEBAIGJvb2wgSW50ZXJuYWxzOjp3YXNMYXN0Q2hhbmdl
VXNlckVkaXQoRWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAo
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0RWxlbWVu
dCgpKQogICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQo
KTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgaGFzVGFnTmFtZSBpbnN0ZWFk
IGJ1dCBXaW5kb3dzIHBvcnQgZG9lc24ndCBsaW5rIFF1YWxpZmllZE5hbWVzIHByb3Blcmx5Lgot
ICAgIGlmICh0ZXh0RmllbGQtPnRhZ05hbWUoKSA9PSAiVEVYVEFSRUEiKQotICAgICAgICByZXR1
cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KHRleHRGaWVsZCktPmxhc3RDaGFuZ2VXYXNVc2VyRWRp
dCgpOworICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQodGV4dEZpZWxkKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFu
Z2VXYXNVc2VyRWRpdCgpOwogCiAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTkxOSw4ICsxOTE4LDggQEAgdm9pZCBJbnRlcm5hbHM6OnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhOb2Rl
KgogICAgICAgICBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGVsc2UgaWYgKG5v
ZGUtPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIGRvY3VtZW50ID0gdG9Eb2N1bWVudChub2Rl
KTsKLSAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSkK
LSAgICAgICAgZG9jdW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG5vZGUpLT5jb250ZW50RG9j
dW1lbnQoKTsKKyAgICBlbHNlIGlmIChpc0hUTUxJRnJhbWVFbGVtZW50KG5vZGUpKQorICAgICAg
ICBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pigqbm9kZSkuY29udGVudERv
Y3VtZW50KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGVjID0gVHlwZUVycm9yOwogICAgICAgICBy
ZXR1cm47CkBAIC0yMDg3LDkgKzIwODYsOSBAQCBib29sIEludGVybmFsczo6aXNTZWxlY3RQb3B1
cFZpc2libGUoTm9kZSogbm9kZSkKICAgICBpZiAoIWlzSFRNTFNlbGVjdEVsZW1lbnQobm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUpOworICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxl
Y3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOwogCi0gICAgYXV0byByZW5k
ZXJlciA9IHNlbGVjdC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gc2VsZWN0LnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNNZW51TGlzdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCBkMmZlN2MwZDkzN2Q4YTRjMjlhYmY2Y2I4OWMz
Y2M2NjRlYjM2YmNiLi45YTFmOGY1MGE4Mjc2NGJlY2E1NWIxYmRlZTM2ZTdmNzBhNDljNThiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ckxpYnhtbDIuY3BwCkBAIC04NTAsMTYgKzg1MCwxNiBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENo
YQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBp
ZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRlVGFnKSkKLSAgICAg
ICAgcHVzaEN1cnJlbnROb2RlKHRvSFRNTFRlbXBsYXRlRWxlbWVudChuZXdFbGVtZW50LmdldCgp
KS0+Y29udGVudCgpKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCpuZXdFbGVtZW50
KSkKKyAgICAgICAgcHVzaEN1cnJlbnROb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+
KCpuZXdFbGVtZW50KS5jb250ZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgcHVzaEN1cnJlbnRO
b2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwogI2Vsc2UKICAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxl
bWVudC5nZXQoKSk7CiAjZW5kaWYKIAotICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbFRhZykpCi0gICAgICAgIHRvSFRNTEh0bWxFbGVtZW50KG5ld0VsZW1lbnQu
Z2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgaWYgKGlzSFRNTEh0bWxFbGVtZW50KCpu
ZXdFbGVtZW50KSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVtZW50PigqbmV3RWxlbWVu
dCkuaW5zZXJ0ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCAmJiBp
c0ZpcnN0RWxlbWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
SU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
SU9TLm1tCmluZGV4IGY2NjRmOTViZTkxNjEyMDVlZjBmNzg0ZjVhNzZlZTE4M2E3ZmU5ODkuLjJi
NjViYjBhYjY3NGZlNzU3ZjUyMDgyMTliMzBkMDcwYjdkYzk1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MubW0KQEAg
LTMxNCwxMSArMzE0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpmb2N1c2VkRWxlbWVu
dENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmICghaW5wdXRFbGVt
ZW50LT5pc1RleHQoKSkKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQu
aXNUZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhbGxGb3JtRGVsZWdhdGUod2ViVmll
dygpLCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTopLCBraXQoaW5wdXRFbGVt
ZW50KSwga2l0KGlucHV0RWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CisgICAgQ2FsbEZv
cm1EZWxlZ2F0ZSh3ZWJWaWV3KCksIEBzZWxlY3RvcihkaWRGb2N1c1RleHRGaWVsZDppbkZyYW1l
OiksIGtpdCgmaW5wdXRFbGVtZW50KSwga2l0KGlucHV0RWxlbWVudC5kb2N1bWVudCgpLmZyYW1l
KCkpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OnNob3dQbGF5YmFja1RhcmdldFBp
Y2tlcihib29sIGhhc1ZpZGVvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRE9NL1dl
YkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQppbmRleCA1MGE5ZDhmZGJjZTJkYmIyNGU0ODY1MTVlZmUwZWE3Njc0OGJjZjkxLi5iMWMy
MDM1NTEyM2MwNjk0MmY3NDYzZGZlMWRjNjUwYWUxZWFjZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIEBpbXBsZW1lbnRh
dGlvbiBET01IVE1MSW5wdXRFbGVtZW50IChXZWJET01IVE1MSW5wdXRFbGVtZW50T3BlcmF0aW9u
c1ByaXZhdGUpCiAKIC0gKHZvaWQpX3NldEF1dG9maWxsZWQ6KEJPT0wpYXV0b2ZpbGxlZAogewot
ICAgIHRvSFRNTElucHV0RWxlbWVudChjb3JlKChET01FbGVtZW50ICopc2VsZikpLT5zZXRBdXRv
ZmlsbGVkKGF1dG9maWxsZWQpOworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGNvcmUo
KERPTUVsZW1lbnQgKilzZWxmKSktPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7CiB9CiAKIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQppbmRleCAyMjU0ZTJlZjc5NWMxMDk2MzM1Yzk2YzEzZjFjYmIyNTY5NWUxYzdkLi4y
NGRlNjdhNzIzNTgxM2JhNWUyMjJlM2M2ZGM4ZmFhMGMwZTc1YWNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC0yMjMs
MTEgKzIyMywxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2Vk
KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNU
ZXh0KCkpCisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKmVsZW1lbnQpOworICAgIGlmICghaW5wdXRFbGVtZW50LmlzVGV4dCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNl
bGVjdG9yKGRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6KSwga2l0KGlucHV0RWxlbWVudCksIGtp
dChpbnB1dEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOworICAgIENhbGxGb3JtRGVsZWdh
dGUobV93ZWJWaWV3LCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTopLCBraXQo
JmlucHV0RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKSk7CiB9
CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQppbmRleCA3YjYyOTZlNzgyY2Y1ZGEyMTM0NzYyMzFmZWQzMTZkODdiM2M5MGU3Li5hNjk0OTJj
OTYwODQ0ZThkMTJjYzZiMzM2MGRmNDVlYjIyYTVhNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC03MDgsNyArNzA4
LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVt
ZW50KiBlbGVtZW50KQogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBr
aXQodG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKTsKKyAgICBET01IVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkp
OwogICAgIEZvcm1EZWxlZ2F0ZUxvZyhpbnB1dEVsZW1lbnQpOwogICAgIENhbGxGb3JtRGVsZWdh
dGUobV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nOmluRnJhbWU6
KSwgaW5wdXRFbGVtZW50LCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CiB9CkBA
IC03MTgsNyArNzE4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVk
aXRpbmcoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAgICBDYWxs
Rm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHRleHRGaWVsZERpZEVuZEVkaXRpbmc6
aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIGtpdChlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkp
KTsKIH0KQEAgLTczMyw3ICs3MzMsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElu
cHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3Jt
RGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAgICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmll
dywgQHNlbGVjdG9yKHRleHREaWRDaGFuZ2VJblRleHRGaWVsZDppbkZyYW1lOiksIGlucHV0RWxl
bWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwogfQpAQCAtNzY2LDcgKzc2
Niw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQo
RWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVuCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1l
bnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIERPTUhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpOworICAg
IERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKGlucHV0RWxlbWVudCk7
CiAgICAgaWYgKFNFTCBjb21tYW5kU2VsZWN0b3IgPSBzZWxlY3RvckZvcktleUV2ZW50KGV2ZW50
KSkKICAgICAgICAgcmV0dXJuIENhbGxGb3JtRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKE5PLCBt
X3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RmllbGQ6ZG9Db21tYW5kQnlTZWxlY3RvcjppbkZyYW1l
OiksIGlucHV0RWxlbWVudCwgY29tbWFuZFNlbGVjdG9yLCBraXQoZWxlbWVudC0+ZG9jdW1lbnQo
KS5mcmFtZSgpKSk7CkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRl
eHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlz
SFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVt
ZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5w
dXRFbGVtZW50KTsKICAgICAvLyBXZSdyZSB1c2luZyB0aGUgZGVsZXRlQmFja3dhcmQgc2VsZWN0
b3IgZm9yIGFsbCBkZWxldGlvbiBvcGVyYXRpb25zIHNpbmNlIHRoZSBhdXRvZmlsbCBjb2RlIHRy
ZWF0cyBhbGwgZGVsZXRpb25zIHRoZSBzYW1lIHdheS4KICAgICBDYWxsRm9ybURlbGVnYXRlUmV0
dXJuaW5nQm9vbGVhbihOTywgbV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkOmRvQ29tbWFu
ZEJ5U2VsZWN0b3I6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIEBzZWxlY3RvcihkZWxldGVCYWNr
d2FyZDopLCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CkBAIC03ODksNyArNzg5
LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1l
bnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhRWxl
bWVudCA9IGtpdCh0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkpOworICAgIERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhRWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MVGV4dEFy
ZWFFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKHRleHRBcmVhRWxlbWVu
dCk7CiAgICAgQ2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RGlkQ2hh
bmdlSW5UZXh0QXJlYTppbkZyYW1lOiksIHRleHRBcmVhRWxlbWVudCwga2l0KGVsZW1lbnQtPmRv
Y3VtZW50KCkuZnJhbWUoKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAwOWRkYzFkODVjMzNlZTkwOTBjYzU0NTgw
YzQxNTYzNzI0NWI2ZDFhLi4wOTJlNThkN2I0M2ZjYzk0NjA2ZDM4OWMwZjY0N2JkNGU3ODQyOGFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRh
dGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRh
dGlvbi5tbQpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0aE5h
bWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCiBzdGF0aWMgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCogZWxl
bWVudCkKIHsKICAgICBFbGVtZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICByZXR1cm4g
bm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQobm9k
ZSkgOiAwOworICAgIHJldHVybiBub2RlICYmIGlzSFRNTElucHV0RWxlbWVudChub2RlKSA/IGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cjsKIH0KIAogLSAoQk9PTCll
bGVtZW50RG9lc0F1dG9Db21wbGV0ZTooRE9NRWxlbWVudCAqKWVsZW1lbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2lu
L0RPTUhUTUxDbGFzc2VzLmNwcAppbmRleCBiMzhjNzdhNmU2ZjYzMzAzNWE2ZDU5MzBkOWI3MTgy
MDc2YTA5Nzk2Li41OWUwZmI1MzVlNzU3NmNkODRkOTk0ZWEzYzMwMDk2MzA1OWU3YWYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCkBAIC0yNTAsNyArMjUwLDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OlVSTCgKICAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpyZXN1bHQgPSBCU3RyaW5nKHRv
SFRNTERvY3VtZW50KG1fZG9jdW1lbnQpLT51cmwoKSkucmVsZWFzZSgpOworICAgICpyZXN1bHQg
PSBCU3RyaW5nKGRvd25jYXN0PEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCktPnVybCgpKS5yZWxl
YXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0yNjEsOSArMjYxLDkgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmJvZHkoCiAgICAgaWYgKCFt
X2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXR1
cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jID0gdG9IVE1MRG9jdW1lbnQo
bV9kb2N1bWVudCk7CisgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gZG93bmNhc3Q8SFRNTERv
Y3VtZW50PigqbV9kb2N1bWVudCk7CiAgICAgQ09NUHRyPElET01FbGVtZW50PiBkb21FbGVtZW50
OwotICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNl
KGh0bWxEb2MtPmJvZHkoKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1l
bnQ6OmNyZWF0ZUluc3RhbmNlKGh0bWxEb2MuYm9keSgpKSk7CiAgICAgaWYgKGRvbUVsZW1lbnQp
CiAgICAgICAgIHJldHVybiBkb21FbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUhUTUxF
bGVtZW50LCAodm9pZCoqKSBib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTMw
NCw4ICszMDQsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxEb2N1bWVudDo6
Zm9ybXMoCiAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVu
dCgpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9j
ID0gdG9IVE1MRG9jdW1lbnQobV9kb2N1bWVudCk7Ci0gICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBmb3JtcyA9IGh0bWxEb2MtPmZvcm1zKCk7CisgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0g
ZG93bmNhc3Q8SFRNTERvY3VtZW50PigqbV9kb2N1bWVudCk7CisgICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBmb3JtcyA9IGh0bWxEb2MuZm9ybXMoKTsKICAgICAqY29sbGVjdGlvbiA9IERPTUhU
TUxDb2xsZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShmb3Jtcy5nZXQoKSk7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CkBAIC01NjAsNyArNTYwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RS
KiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxGb3JtRWxlbWVudCht
X2VsZW1lbnQpKTsKLSAgICBXVEY6OlN0cmluZyBhY3Rpb25TdHJpbmcgPSB0b0hUTUxGb3JtRWxl
bWVudChtX2VsZW1lbnQpLT5hY3Rpb24oKTsKKyAgICBXVEY6OlN0cmluZyBhY3Rpb25TdHJpbmcg
PSBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KCptX2VsZW1lbnQpLmFjdGlvbigpOwogICAgICpy
ZXN1bHQgPSBCU3RyaW5nKGFjdGlvblN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09L
OwogfQpAQCAtNTkwLDcgKzU5MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TEZvcm1FbGVtZW50OjptZXRob2QoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiog
cmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MRm9ybUVsZW1lbnQobV9l
bGVtZW50KSk7Ci0gICAgV1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0gdG9IVE1MRm9ybUVsZW1l
bnQobV9lbGVtZW50KS0+bWV0aG9kKCk7CisgICAgV1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0g
ZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigqbV9lbGVtZW50KS5tZXRob2QoKTsKICAgICAqcmVz
dWx0ID0gQlN0cmluZyhtZXRob2RTdHJpbmcpLnJlbGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsK
IH0KQEAgLTcwMiwxMyArNzAyLDEzIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMoCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKICAg
ICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVu
dCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MU2VsZWN0RWxlbWVu
dCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9lbGVtZW50
KTsKIAotICAgIGlmICghc2VsZWN0RWxlbWVudC0+b3B0aW9ucygpKQorICAgIGlmICghc2VsZWN0
RWxlbWVudC5vcHRpb25zKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICAqcmVzdWx0
ID0gMDsKLSAgICBSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBvcHRpb25zID0gc2VsZWN0
RWxlbWVudC0+b3B0aW9ucygpOworICAgICpyZXN1bHQgPSBudWxscHRyOworICAgIFJlZlB0cjxI
VE1MT3B0aW9uc0NvbGxlY3Rpb24+IG9wdGlvbnMgPSBzZWxlY3RFbGVtZW50Lm9wdGlvbnMoKTsK
ICAgICAqcmVzdWx0ID0gRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShv
cHRpb25zLmdldCgpKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTgwNCwxMiArODA0LDEyIEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFNlbGVjdEVsZW1lbnQ6OmFjdGl2YXRl
SXRlbUF0SW5kZXgoCiAgICAgLyogW2luXSAqLyBpbnQgaW5kZXgpCiB7CiAgICAgQVNTRVJUKG1f
ZWxlbWVudCk7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxT
ZWxlY3RFbGVtZW50KG1fZWxlbWVudCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAKLSAgICBp
ZiAoaW5kZXggPj0gc2VsZWN0RWxlbWVudC0+bGVuZ3RoKCkpCisgICAgaWYgKGluZGV4ID49IHNl
bGVjdEVsZW1lbnQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBzZWxl
Y3RFbGVtZW50LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KTsKKyAgICBzZWxlY3RFbGVtZW50LnNl
dFNlbGVjdGVkSW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC04NjAsOSAr
ODYwLDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MT3B0aW9uRWxlbWVudDo6
dGV4dCgKIAogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxPcHRpb25F
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50
ID0gdG9IVE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25FbGVtZW50
JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQp
OwogCi0gICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+dGV4dCgpKS5yZWxlYXNl
KCk7CisgICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC50ZXh0KCkpLnJlbGVhc2Uo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTg5Nyw5ICs4OTcsOSBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCgKIAogICAgIEFT
U0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxPcHRpb25FbGVtZW50KG1fZWxlbWVu
dCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9u
RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb25FbGVtZW50
ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpOwogCi0gICAgKnJlc3Vs
dCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+bGFiZWwoKSkucmVsZWFzZSgpOworICAgICpyZXN1
bHQgPSBCU3RyaW5nKG9wdGlvbkVsZW1lbnQubGFiZWwoKSkucmVsZWFzZSgpOwogICAgIHJldHVy
biBTX09LOwogfQogICAgIApAQCAtOTkxLDExICs5OTEsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKAogewogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpyZXN1bHQgPSAwOworICAgICpyZXN1bHQg
PSBudWxscHRyOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1f
ZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElu
cHV0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIENPTVB0cjxJ
RE9NRWxlbWVudD4gZG9tRWxlbWVudDsKLSAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxF
bGVtZW50OjpjcmVhdGVJbnN0YW5jZShpbnB1dEVsZW1lbnQtPmZvcm0oKSkpOworICAgIGRvbUVs
ZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGlucHV0RWxlbWVu
dC5mb3JtKCkpKTsKICAgICBpZiAoZG9tRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGRvbUVsZW1l
bnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NSFRNTEVsZW1lbnQsICh2b2lkKiopIHJlc3VsdCk7
CiAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTEwNzUsOCArMTA3NSw4IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6ZGlzYWJsZWQoCiAgICAgICAgIC8qIFty
ZXR2YWxdW291dF0gKi8gQk9PTCogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYg
aXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQg
PSBpbnB1dEVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gVFJVRSA6IEZBTFNFOwor
ICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAg
CkBAIC0xMTE5LDggKzExMTksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJ
bnB1dEVsZW1lbnQ6OnJlYWRPbmx5KAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wq
IHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudCht
X2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50LT5pc1Jl
YWRPbmx5KCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKnJlc3Vs
dCA9IGlucHV0RWxlbWVudC5pc1JlYWRPbmx5KCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAgICAgCkBAIC0xMTg0LDkgKzExODQsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUoCiAgICAgICAgIC8qIFtpbl0gKi8g
QlNUUiB0eXBlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50
KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxl
bWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIFdURjo6
U3RyaW5nIHR5cGVTdHJpbmcodHlwZSwgU3lzU3RyaW5nTGVuKHR5cGUpKTsKLSAgICBpbnB1dEVs
ZW1lbnQtPnNldFR5cGUodHlwZVN0cmluZyk7CisgICAgaW5wdXRFbGVtZW50LnNldFR5cGUodHlw
ZVN0cmluZyk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0xMjA4LDggKzEyMDgsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKAog
ICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKICAgICBBU1NFUlQo
bV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsK
LSAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqbV9lbGVtZW50KTsKKyAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlucHV0RWxl
bWVudC52YWx1ZSgpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKHZhbHVlU3RyaW5nKS5yZWxlYXNl
KCk7CiAgICAgaWYgKHZhbHVlU3RyaW5nLmxlbmd0aCgpICYmICEqcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gRV9PVVRPRk1FTU9SWTsKQEAgLTEyMjAsOCArMTIyMCw4IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoCiAgICAgICAgIC8qIFtp
bl0gKi8gQlNUUiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0
RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFZh
bHVlKFN0cmluZygoVUNoYXIqKSB2YWx1ZSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOworICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCptX2VsZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikg
dmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAt
MTIzMCwxNiArMTIzMCwxNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1
dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcigKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAg
ICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAg
IGlucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0aWNfY2FzdDxVQ2hhcio+
KHZhbHVlKSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAg
IGlucHV0RWxlbWVudC5zZXRWYWx1ZUZvclVzZXIoU3RyaW5nKHN0YXRpY19jYXN0PFVDaGFyKj4o
dmFsdWUpLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0KCB2b2lk
KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVu
dCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxl
bWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2VsZWN0KCk7CisgICAgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1f
ZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50LnNlbGVjdCgpOwogICAgIHJldHVybiBTX09LOwog
fQogICAgIApAQCAtMTI1Myw4ICsxMjUzLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCgKICAgICAvKiBbaW5dICovIGxv
bmcgc3RhcnQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQo
bV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1M
SW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRTZWxlY3Rpb25T
dGFydChzdGFydCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50LnNldFNl
bGVjdGlvblN0YXJ0KHN0YXJ0KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI2Miw4ICsx
MjYyLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojpz
ZWxlY3Rpb25TdGFydCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIGxvbmcgKnN0YXJ0KQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudCht
X2VsZW1lbnQpOwotICAgICpzdGFydCA9IGlucHV0RWxlbWVudC0+c2VsZWN0aW9uU3RhcnQoKTsK
KyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PigqbV9lbGVtZW50KTsKKyAgICAqc3RhcnQgPSBpbnB1dEVsZW1lbnQuc2VsZWN0aW9u
U3RhcnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI3MSw4ICsxMjcxLDggQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25F
bmQoCiAgICAgLyogW2luXSAqLyBsb25nIGVuZCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYm
IGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1dEVs
ZW1lbnQtPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlu
cHV0RWxlbWVudC5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMTI4MCw4ICsxMjgwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5w
dXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBsb25nICpl
bmQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVt
ZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRF
bGVtZW50KG1fZWxlbWVudCk7Ci0gICAgKmVuZCA9IGlucHV0RWxlbWVudC0+c2VsZWN0aW9uRW5k
KCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKmVuZCA9IGlucHV0RWxlbWVudC5zZWxlY3Rp
b25FbmQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI5Miw4ICsxMjkyLDggQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCgK
IHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50
KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQtPmlz
VGV4dEZpZWxkKCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKnJl
c3VsdCA9IGlucHV0RWxlbWVudC5pc1RleHRGaWVsZCgpID8gVFJVRSA6IEZBTFNFOwogICAgIHJl
dHVybiBTX09LOwogfQogCkBAIC0xMzI4LDEzICsxMzI4LDEzIEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6cmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlKAog
CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzSFRNTElucHV0RWxlbWVudCht
X2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKIAotICAgIFN0cmlu
ZyBuZXdWYWx1ZSA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAgICBTdHJpbmcgbmV3VmFsdWUg
PSBpbnB1dEVsZW1lbnQudmFsdWUoKTsKICAgICBTdHJpbmcgd2ViQ29yZVJlcGxhY2VtZW50U3Ry
aW5nKHN0YXRpY19jYXN0PFVDaGFyKj4ocmVwbGFjZW1lbnRTdHJpbmcpLCBTeXNTdHJpbmdMZW4o
cmVwbGFjZW1lbnRTdHJpbmcpKTsKICAgICBuZXdWYWx1ZS5yZXBsYWNlKHN0YXJ0VGFyZ2V0LCBl
bmRUYXJnZXQgLSBzdGFydFRhcmdldCwgd2ViQ29yZVJlcGxhY2VtZW50U3RyaW5nKTsKLSAgICBp
bnB1dEVsZW1lbnQtPnNldFZhbHVlKG5ld1ZhbHVlKTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFNl
bGVjdGlvblJhbmdlKGluZGV4LCBuZXdWYWx1ZS5sZW5ndGgoKSk7CisgICAgaW5wdXRFbGVtZW50
LnNldFZhbHVlKG5ld1ZhbHVlKTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uo
aW5kZXgsIG5ld1ZhbHVlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTM0
NSw5ICsxMzQ1LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3RlZFJhbmdlKAogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VS
VChpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgKnN0YXJ0
ID0gaW5wdXRFbGVtZW50LT5zZWxlY3Rpb25TdGFydCgpOwotICAgICplbmQgPSBpbnB1dEVsZW1l
bnQtPnNlbGVjdGlvbkVuZCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpzdGFydCA9IGlu
cHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCgpOworICAgICplbmQgPSBpbnB1dEVsZW1lbnQuc2Vs
ZWN0aW9uRW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzNTYsOCArMTM1Niw4IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2Zp
bGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRF
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2V0QXV0
b2ZpbGxlZCghIWZpbGxlZCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50
LnNldEF1dG9maWxsZWQoISFmaWxsZWQpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMzY2
LDggKzEzNjYsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1l
bnQ6OmlzQXV0b2ZpbGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQo
aXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQg
PSBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpID8gVFJVRSA6IEZBTFNFOworICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpt
X2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNBdXRvZmlsbGVkKCkgPyBU
UlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzODQsNyArMTM4NCw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNVc2VyRWRp
dGVkKAogICAgIEJPT0wgdGV4dEZpZWxkID0gRkFMU0U7CiAgICAgaWYgKEZBSUxFRChpc1RleHRG
aWVsZCgmdGV4dEZpZWxkKSkgfHwgIXRleHRGaWVsZCkKICAgICAgICAgcmV0dXJuIFNfT0s7Ci0g
ICAgaWYgKHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpLT5sYXN0Q2hhbmdlV2FzVXNlckVk
aXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCkubGFz
dENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQgPSBUUlVFOwogICAgIHJldHVy
biBTX09LOwogfQpAQCAtMTQyOCw5ICsxNDI4LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpmb3JtKAogICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OwogICAgICpyZXN1bHQgPSAwOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MVGV4dEFy
ZWFFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRhcmVh
RWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxUZXh0
QXJlYUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1l
bnQ+KCptX2VsZW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKLSAg
ICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZSh0ZXh0
YXJlYUVsZW1lbnQtPmZvcm0oKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVs
ZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKHRleHRhcmVhRWxlbWVudC5mb3JtKCkpKTsKICAgICBpZiAo
ZG9tRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJ
RF9JRE9NSFRNTEVsZW1lbnQsICh2b2lkKiopIHJlc3VsdCk7CiAgICAgcmV0dXJuIEVfRkFJTDsK
QEAgLTE1NDUsOCArMTU0NSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRl
eHRBcmVhRWxlbWVudDo6dmFsdWUoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiog
cmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MVGV4dEFyZWFFbGVtZW50
KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRhcmVhRWxlbWVudCA9
IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOwotICAgIFdURjo6U3RyaW5nIHZhbHVl
U3RyaW5nID0gdGV4dGFyZWFFbGVtZW50LT52YWx1ZSgpOworICAgIEhUTUxUZXh0QXJlYUVsZW1l
bnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOworICAgIFdURjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gdGV4dGFyZWFFbGVtZW50LnZh
bHVlKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcodmFsdWVTdHJpbmcpLnJlbGVhc2UoKTsKICAg
ICBpZiAodmFsdWVTdHJpbmcubGVuZ3RoKCkgJiYgISpyZXN1bHQpCiAgICAgICAgIHJldHVybiBF
X09VVE9GTUVNT1JZOwpAQCAtMTU1NywxNiArMTU1NywxNiBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKAogICAgICAgICAvKiBbaW5d
ICovIEJTVFIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJl
YUVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dGFyZWFF
bGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgdGV4dGFyZWFF
bGVtZW50LT5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1
ZSkpKTsKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICB0ZXh0YXJlYUVsZW1lbnQu
c2V0VmFsdWUoU3RyaW5nKChVQ2hhciopIHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdCggdm9pZCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50
ICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MVGV4dEFyZWFF
bGVtZW50KiB0ZXh0YXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50
KTsKLSAgICB0ZXh0YXJlYUVsZW1lbnQtPnNlbGVjdCgpOworICAgIEhUTUxUZXh0QXJlYUVsZW1l
bnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOworICAgIHRleHRhcmVhRWxlbWVudC5zZWxlY3QoKTsKICAgICByZXR1cm4gU19PSzsK
IH0KIApAQCAtMTU4MCw3ICsxNTgwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MVGV4dEFyZWFFbGVtZW50Ojppc1VzZXJFZGl0ZWQoCiAKICAgICAqcmVzdWx0ID0gRkFMU0U7
CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50
KSk7Ci0gICAgaWYgKHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpLT5sYXN0Q2hhbmdl
V2FzVXNlckVkaXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1f
ZWxlbWVudCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQgPSBUUlVF
OwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTYwNiwxMCArMTYwNiwxMCBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERPTUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUoCiB7CiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnJlc3VsdCA9
IDA7CisgICAgKnJlc3VsdCA9IG51bGxwdHI7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAg
SFRNTElGcmFtZUVsZW1lbnQqIGlGcmFtZUVsZW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG1f
ZWxlbWVudCk7Ci0gICAgQ09NUHRyPElXZWJGcmFtZT4gd2ViRnJhbWUgPSBraXQoaUZyYW1lRWxl
bWVudC0+Y29udGVudEZyYW1lKCkpOworICAgIEhUTUxJRnJhbWVFbGVtZW50JiBpRnJhbWVFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIENPTVB0
cjxJV2ViRnJhbWU+IHdlYkZyYW1lID0ga2l0KGlGcmFtZUVsZW1lbnQuY29udGVudEZyYW1lKCkp
OwogICAgIGlmICghd2ViRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAgcmV0dXJu
IHdlYkZyYW1lLmNvcHlSZWZUbyhyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDc4
OGEyZTgwZjFjZmE5ZTgzZDIzNTM5Yzg3MDcyNWY4YmQyZjEyNDMuLjhjNmM0NWMzMjljOTgyZTNh
MzUzZDE1MGVlNjE4ZDVhMGNkOGM5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTE5NCw3
ICsxOTQsNyBAQCBzdGF0aWMgRWxlbWVudCAqZWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVt
ZW50ICplbGVtZW50KQogc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9N
RWxlbWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIElET01FbGVtZW50
UHJpdmF0ZSogZWxlUHJpdjsKICAgICBIUkVTVUxUIGhyID0gZWxlbWVudC0+UXVlcnlJbnRlcmZh
Y2UoSUlEX0lET01FbGVtZW50UHJpdmF0ZSwgKHZvaWQqKikgJmVsZVByaXYpOwpAQCAtMjAzLDE1
ICsyMDMsMTUgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9NRWxl
bWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAgICAgaHIgPSBlbGVQcml2LT5jb3JlRWxl
bWVudCgodm9pZCoqKSZlbGUpOwogICAgICAgICBlbGVQcml2LT5SZWxlYXNlKCk7CiAgICAgICAg
IGlmIChTVUNDRUVERUQoaHIpICYmIGVsZSAmJiBpc0hUTUxGb3JtRWxlbWVudChlbGUpKQotICAg
ICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVtZW50KGVsZSk7CisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGUpOwogICAgIH0KLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICgh
ZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgSURPTUVsZW1lbnRQcml2YXRlKiBlbGVQcml2OwogICAgIEhSRVNVTFQgaHIgPSBlbGVtZW50
LT5RdWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnRQcml2YXRlLCAodm9pZCoqKSAmZWxlUHJp
dik7CkBAIC0yMjAsOSArMjIwLDkgQEAgc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQogICAgICAgICBociA9IGVs
ZVByaXYtPmNvcmVFbGVtZW50KCh2b2lkKiopJmVsZSk7CiAgICAgICAgIGVsZVByaXYtPlJlbGVh
c2UoKTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxlICYmIGlzSFRNTElucHV0RWxl
bWVudChlbGUpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChlbGUpOwor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZSk7CiAgICAg
fQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBXZWJGcmFtZVBy
aXZhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNw
cAppbmRleCAxZGMwYjRiNTAzMDc0YzJiMWE1NTNjZDg5MDBiZDUxYzUyYWU2OGQ0Li5jNjEyYzJj
MGJhM2IyZjAwM2JmYWRmOGQyNWVlNWRlNzYwNGYzMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTE5OSw1NSArMTk5LDU1IEBAIFBhc3NS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
Ojp2aXNpYmxlUmFuZ2UoKSBjCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpzZXRI
VE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAg
aWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKSkKKyAgICBpZiAoIWlzSFRNTElu
cHV0RWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdG9IVE1MSW5wdXRF
bGVtZW50KG1fbm9kZS5nZXQoKSktPnNldFZhbHVlRm9yVXNlcih2YWx1ZSk7CisgICAgZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0VmFsdWVGb3JVc2VyKHZhbHVlKTsKIH0K
IAogYm9vbCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVudEF1dG9m
aWxsZWQoKSBjb25zdAogewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQo
KSkpCisgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQo
KSktPmlzQXV0b2ZpbGxlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqbV9ub2RlKS5pc0F1dG9maWxsZWQoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKGJvb2wgZmlsbGVkKQogewotICAg
IGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkpCisgICAgaWYgKCFpc0hUTUxJ
bnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRvSFRNTElucHV0
RWxlbWVudChtX25vZGUuZ2V0KCkpLT5zZXRBdXRvZmlsbGVkKGZpbGxlZCk7CisgICAgZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0QXV0b2ZpbGxlZChmaWxsZWQpOwogfQog
CiBib29sIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6aHRtbElucHV0RWxlbWVudExhc3RDaGFu
Z2VXYXNVc2VyRWRpdCgpCiB7Ci0gICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdl
dCgpKSkKKyAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkp
LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm1fbm9kZSkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiB9CiAKIGJvb2wgSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdhc1Vz
ZXJFZGl0KCkKIHsKLSAgICBpZiAoIWlzSFRNTFRleHRBcmVhRWxlbWVudChtX25vZGUuZ2V0KCkp
KQorICAgIGlmICghaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX25vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fbm9kZS5nZXQo
KSktPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4
dEFyZWFFbGVtZW50PigqbV9ub2RlKS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIH0KIAogYm9v
bCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzVGV4dEZpZWxkKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkgJiYgdG9IVE1MSW5wdXRFbGVt
ZW50KG1fbm9kZS5nZXQoKSktPmlzVGV4dCgpOworICAgIHJldHVybiBpc0hUTUxJbnB1dEVsZW1l
bnQoKm1fbm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuaXNUZXh0
KCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6Omh0bWxUYWJsZUNlbGxFbGVtZW50Q2VsbEFib3ZlKCkKIHsKICAgICBp
ZiAoIW1fbm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBnZXRPckNyZWF0ZShzdGF0aWNfY2FzdDxI
VE1MVGFibGVDZWxsRWxlbWVudCo+KG1fbm9kZS5nZXQoKSktPmNlbGxBYm92ZSgpKTsKKyAgICBy
ZXR1cm4gZ2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQmPigqbV9u
b2RlKS5jZWxsQWJvdmUoKSk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViRnJhbWU+IEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZTo6ZG9jdW1lbnRGcmFtZSgpCkBAIC0yNzYsMTAgKzI3NiwxMCBAQCBQYXNz
UmVmUHRyPFdlYkZyYW1lPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxGcmFtZUVsZW1l
bnRDb250ZW50RnJhbWUoKQogCiBQYXNzUmVmUHRyPFdlYkZyYW1lPiBJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCkKIHsKLSAgICBpZiAoIW1f
bm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQorICAgIGlmICghaXNIVE1MSUZyYW1lRWxlbWVu
dCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBGcmFtZSogZnJhbWUg
PSB0b0hUTUxJRnJhbWVFbGVtZW50KG1fbm9kZS5nZXQoKSktPmNvbnRlbnRGcmFtZSgpOworICAg
IEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqbV9ub2RlKS5jb250
ZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW5DaG9pY2VBbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCmluZGV4IGYwNWZkMjUzOWI1ZTA4NDZh
YTRkODcwMzJiZjM5ZGZjYzkzZmZkY2EuLjBjNGE2Y2I5ODFjOTA0NWQxZWJiYjg3Y2UyMjc0NGU1
ZDI1ZDA0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KQEAgLTYxLDcg
KzYxLDcgQEAgdm9pZCBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uOjp1cGRhdGVHZW9tZXRyeSgp
CiAKIHZvaWQgUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6Y29tbWl0KCkKIHsKLSAgICBjaG9p
Y2VBbm5vdGF0aW9uKCkuc3RyaW5nVmFsdWUgPSB0b0hUTUxTZWxlY3RFbGVtZW50KGVsZW1lbnQo
KSktPnZhbHVlKCk7CisgICAgY2hvaWNlQW5ub3RhdGlvbigpLnN0cmluZ1ZhbHVlID0gZG93bmNh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KGVsZW1lbnQoKSktPnZhbHVlKCk7CiAKICAgICBQREZQbHVn
aW5Bbm5vdGF0aW9uOjpjb21taXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1t
CmluZGV4IGE1ZDJmNWU2YmI5MzUwMWViNzYwM2U2NTIzOTNjZTE0YjkwMDhkZWQuLmUyNDBmYzgw
YTRmYzc4OGVhMWIwYzg0OTEwMzJmYTE3NjMyYjkxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5u
b3RhdGlvbi5tbQpAQCAtMTA1LDkgKzEwNSw5IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gUERGUGx1
Z2luVGV4dEFubm90YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KCkKICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWduLCBjc3NB
bGlnbm1lbnRWYWx1ZUZvck5TVGV4dEFsaWdubWVudCh0ZXh0QW5ub3RhdGlvbi5hbGlnbm1lbnQp
KTsKIAogICAgIGlmIChpc011bHRpbGluZSkKLSAgICAgICAgdG9IVE1MVGV4dEFyZWFFbGVtZW50
KHN0eWxlZEVsZW1lbnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7Cisg
ICAgICAgIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLT5zZXRW
YWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAgICB0b0hU
TUxJbnB1dEVsZW1lbnQoc3R5bGVkRWxlbWVudCktPnNldFZhbHVlKHRleHRBbm5vdGF0aW9uLnN0
cmluZ1ZhbHVlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc3R5bGVkRWxl
bWVudCktPnNldFZhbHVlKHRleHRBbm5vdGF0aW9uLnN0cmluZ1ZhbHVlKTsKIAogICAgIHJldHVy
biBlbGVtZW50OwogfQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUERGUGx1Z2luVGV4dEFubm90
YXRpb246OmNvbW1pdCgpCiAKIFN0cmluZyBQREZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6dmFsdWUo
KSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGVsZW1l
bnQoKSktPnZhbHVlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50PihlbGVtZW50KCkpLT52YWx1ZSgpOwogfQogCiBib29sIFBERlBsdWdpblRleHRBbm5v
dGF0aW9uOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMTAzZjg1NzYyYzBiYjkxYjgy
NjM4NzBmMjc2ZjNkYzQ1ZWJkMjU1OC4uNzYzODM2YmY0MTYzMTNiMWYxZDQ3YjQyNzViNGZhMTk1
ODQ5OGY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcApAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5pdGlhbGl6
ZVBsdWdpbigpCiAgICAgfQogCiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lO
X0hFVVJJU1RJQykKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1l
bnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVtZW50LmdldCgpKTsKKyAg
ICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQuZ2V0KCkpOwogICAgIG1fZGlk
UGx1Z0luU3RhcnRPZmZTY3JlZW4gPSAhbV93ZWJQYWdlLT5wbHVnSW5JbnRlcnNlY3RzU2VhcmNo
UmVjdCgqcGx1Z0luSW1hZ2VFbGVtZW50KTsKICNlbmRpZgogICAgIG1fcGx1Z2luLT5pbml0aWFs
aXplKHRoaXMsIG1fcGFyYW1ldGVycyk7CkBAIC0xNzEzLDcgKzE3MTMsNyBAQCB2b2lkIFBsdWdp
blZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fcGx1Z2luKTsK
IAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KG1fcGx1Z2luRWxlbWVudC5nZXQoKSk7CisgICAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxl
bWVudD4obV9wbHVnaW5FbGVtZW50LmdldCgpKTsKICAgICBib29sIGlzUGx1Z0luT25TY3JlZW4g
PSBtX3dlYlBhZ2UtPnBsdWdJbkludGVyc2VjdHNTZWFyY2hSZWN0KCpwbHVnSW5JbWFnZUVsZW1l
bnQpOwogICAgIGJvb2wgcGx1Z0luQ2FtZU9uU2NyZWVuID0gaXNQbHVnSW5PblNjcmVlbiAmJiBt
X2RpZFBsdWdJblN0YXJ0T2ZmU2NyZWVuOwogICAgIGJvb2wgc25hcHNob3RGb3VuZCA9IGZhbHNl
OwpAQCAtMTc4MSw3ICsxNzgxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZl
VXNlckludGVyYWN0aW9uKCkKIAogICAgIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbiA9IHRy
dWU7CiAKLSAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVs
ZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVtZW50LmdldCgpKTsK
KyAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQuZ2V0KCkp
OwogICAgIFN0cmluZyBwYWdlT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5kb2N1bWVudCgp
LnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKTsKICAgICBT
dHJpbmcgcGx1Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2FkZWRVcmwoKS5ob3N0
KCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2FkZWRNaW1l
VHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGYzYzliZGQ1ZWYwZjU0NDA4MzRm
YWZmOWU3YzI0MDFjYjEzOGNiMjUuLmI1MTc2M2VhNTBkNzE0NDQ0YzczNmU4ZjEwZTM0YTI2Mzhl
ZmRkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHZv
aWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCogZWxlbWVu
dCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpOwotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHQoKSkKKyAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
ZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQuaXNUZXh0KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpl
bGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7Ci0gICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS5kaWRGb2N1c1RleHRGaWVsZChtX3Bh
Z2UsIGlucHV0RWxlbWVudCwgd2ViRnJhbWUpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVG
b3JtQ2xpZW50KCkuZGlkRm9jdXNUZXh0RmllbGQobV9wYWdlLCAmaW5wdXRFbGVtZW50LCB3ZWJG
cmFtZSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZy
YW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBiZmY3NmYyZTRhYjRkN2My
YjE4YTZmMjEwM2ZkMDUzYjY1YzA2Zjc0Li4xMjE0MTdlOWRhNjBhODViMzM3MDllZWM5MDRjNjFh
Y2FmNjBlZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0zMDEsNyArMzAxLDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBl
bGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1l
KCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAK
LSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEJlZ2lu
RWRpdGluZyhtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwgd2ViRnJhbWUpOwor
ICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkudGV4dEZpZWxkRGlkQmVnaW5F
ZGl0aW5nKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCksIHdlYkZy
YW1lKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmco
RWxlbWVudCogZWxlbWVudCkKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1l
KiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgp
LmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9wYWdlLCB0b0hUTUxJ
bnB1dEVsZW1lbnQoZWxlbWVudCksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVu
ZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9wYWdlLCBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0z
MjUsNyArMzI1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRG
aWVsZChFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
Ojpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VS
VCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRl
eHREaWRDaGFuZ2VJblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50
KSwgd2ViRnJhbWUsIGluaXRpYXRlZEJ5VXNlclR5cGluZyk7CisgICAgbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQobV9wYWdlLCBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUsIGluaXRpYXRlZEJ5VXNl
clR5cGluZyk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0
QXJlYShFbGVtZW50KiBlbGVtZW50KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQogICAgIFdl
YkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1
bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHREaWRDaGFuZ2VJblRleHRBcmVhKG1fcGFnZSwg
dG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CisgICAgbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShtX3BhZ2Us
IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDAzLDcgKzQwMyw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwgS2V5Ym9h
cmRFdmVuCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUo
KmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKIAot
ICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZFBlcmZv
cm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwg
dG9JbnB1dEZpZWxkQWN0aW9uKGFjdGlvblR5cGUpLCB3ZWJGcmFtZSk7CisgICAgcmV0dXJuIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuc2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4
dEZpZWxkKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCksIHRvSW5w
dXRGaWVsZEFjdGlvbihhY3Rpb25UeXBlKSwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQpA
QCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRl
ZEluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0g
V2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CiAg
ICAgQVNTRVJUKHdlYkZyYW1lKTsKIAotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xp
ZW50KCkuc2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxkKG1fcGFnZSwgdG9IVE1MSW5wdXRF
bGVtZW50KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJbnB1dEZpZWxkQWN0aW9uVHlw
ZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9y
bUNsaWVudCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJbnB1dEZp
ZWxkQWN0aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKIH0KIAogYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6
OlRleHRDaGVja2luZ1R5cGUgdHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlNjJhY2ZkOWM0NmE4NTUxYzNlODQ0NjJlYTBh
MTJlYmVjMTJiZjg2Li41YTdiMmMzMWQ1M2Y0Mzk0ZTljY2ZmYmU5NWIxZGJjYzg4YjdmNmM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC02
MjQsNyArNjI0LDcgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihX
ZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHUKICAgICBTdHJpbmcgcGFnZVVS
TFN0cmluZyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+
cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVE
X1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z2luSW1h
Z2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCpwbHVnaW5FbGVtZW50KTsKKyAg
ICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqcGx1Z2luRWxlbWVudCk7CiAgICAgdW5zaWduZWQgcGx1
Z2luQXJlYSA9IDA7CiAgICAgUGx1Z2luUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUgPSBwbHVnaW5F
bGVtZW50LT5kaXNwbGF5U3RhdGUoKSA9PSBIVE1MUGx1Z0luRWxlbWVudDo6V2FpdGluZ0ZvclNu
YXBzaG90ICYmICEocGx1Z0luSXNQcmltYXJ5U2l6ZShwbHVnaW5JbWFnZUVsZW1lbnQsIHBsdWdp
bkFyZWEpICYmICFwbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdChwbHVnaW5JbWFnZUVsZW1lbnQp
KSA/IFBsdWdpblByb2Nlc3NUeXBlU25hcHNob3QgOiBQbHVnaW5Qcm9jZXNzVHlwZU5vcm1hbDsK
ICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KaW5kZXggMTViOWM5MGFlOTRkZGI2Yjc0MTMyYTI4NzYxODJmOTliNDkyNTFh
Yy4uNjVlNmU5ZDI1ZDM3MTVkY2E4MDUyNTY4YWNmZmIzYzUyZjRhMmY1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAt
NjEyLDkgKzYxMiw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoIW1fYXNzaXN0ZWROb2RlKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsK
LSAgICAgICAgSFRNTElucHV0RWxlbWVudCAqZWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudCht
X2Fzc2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZhbHVlLCBE
aXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQo
Km1fYXNzaXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgZWxl
bWVudC5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKICAgICB9
CiAgICAgLy8gRklYTUU6IHNob3VsZCBhbHNvIGhhbmRsZSB0aGUgY2FzZSBvZiBIVE1MU2VsZWN0
RWxlbWVudC4KIH0KQEAgLTYyMywxOCArNjIzLDE4IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0
ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiB7CiAgICAgaWYgKCFtX2Fzc2lzdGVk
Tm9kZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9hc3Np
c3RlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQgKmVsZW1lbnQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAgICAgICBlbGVtZW50
LT5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBEaXNwYXRjaElu
cHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoKm1fYXNzaXN0
ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgZWxlbWVudC5zZXRW
YWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBEaXNwYXRjaElucHV0QW5k
Q2hhbmdlRXZlbnQpOwogICAgIH0KIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVT
ZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24p
CiB7Ci0gICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNIVE1MU2VsZWN0RWxlbWVudChtX2Fz
c2lzdGVkTm9kZS5nZXQoKSkpCisgICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNIVE1MU2Vs
ZWN0RWxlbWVudCgqbV9hc3Npc3RlZE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICBIVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5n
ZXQoKSk7Ci0gICAgc2VsZWN0LT5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxs
b3dNdWx0aXBsZVNlbGVjdGlvbik7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRv
d25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOworICAgIHNlbGVjdC5v
cHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7
CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTk5MywxMCArMTk5MywxMCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNBc3Npc3RhYmxlTm9kZShOb2RlKiBub2RlKQogICAgIGlmIChpc0hU
TUxTZWxlY3RFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoaXNI
VE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gIXRvSFRNTFRleHRBcmVh
RWxlbWVudChub2RlKS0+aXNSZWFkT25seU5vZGUoKTsKKyAgICAgICAgcmV0dXJuICFkb3duY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50Pigqbm9kZSkuaXNSZWFkT25seU5vZGUoKTsKICAgICBpZiAo
aXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiAhZWxlbWVu
dC0+aXNSZWFkT25seU5vZGUoKSAmJiAoZWxlbWVudC0+aXNUZXh0RmllbGQoKSB8fCBlbGVtZW50
LT5pc0RhdGVGaWVsZCgpIHx8IGVsZW1lbnQtPmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkgfHwgZWxl
bWVudC0+aXNNb250aEZpZWxkKCkgfHwgZWxlbWVudC0+aXNUaW1lRmllbGQoKSk7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
bm9kZSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5pc1JlYWRPbmx5Tm9kZSgpICYmIChlbGVt
ZW50LmlzVGV4dEZpZWxkKCkgfHwgZWxlbWVudC5pc0RhdGVGaWVsZCgpIHx8IGVsZW1lbnQuaXNE
YXRlVGltZUxvY2FsRmllbGQoKSB8fCBlbGVtZW50LmlzTW9udGhGaWVsZCgpIHx8IGVsZW1lbnQu
aXNUaW1lRmllbGQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCk7CkBAIC0yMDY2LDgxICsyMDY2LDgxIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAg
IGluZm9ybWF0aW9uLmhhc05leHROb2RlID0gaGFzRm9jdXNhYmxlRWxlbWVudChtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSwgbV9wYWdlLmdldCgpLCB0cnVlKTsKICAgICBpbmZvcm1hdGlvbi5oYXNQcmV2
aW91c05vZGUgPSBoYXNGb2N1c2FibGVFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpLCBtX3Bh
Z2UuZ2V0KCksIGZhbHNlKTsKIAotICAgIGlmIChpc0hUTUxTZWxlY3RFbGVtZW50KG1fYXNzaXN0
ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTFNlbGVjdEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOworICAgIGlmIChpc0hUTUxT
ZWxlY3RFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVu
dCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUp
OwogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6U2VsZWN0Owot
ICAgICAgICBzaXplX3QgY291bnQgPSBlbGVtZW50LT5saXN0SXRlbXMoKS5zaXplKCk7CisgICAg
ICAgIHNpemVfdCBjb3VudCA9IGVsZW1lbnQubGlzdEl0ZW1zKCkuc2l6ZSgpOwogICAgICAgICBp
bnQgcGFyZW50R3JvdXBJRCA9IDA7CiAgICAgICAgIC8vIFRoZSBwYXJlbnQgZ3JvdXAgSUQgaW5k
aWNhdGVzIHRoZSBncm91cCB0aGUgb3B0aW9uIGJlbG9uZ3MgdG8gYW5kIGlzIDAgZm9yIGdyb3Vw
IGVsZW1lbnRzLgogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9uIGVsZW1lbnRzIGluIGJl
dHdlZW4gZ3JvdXBzLCB0aGV5IGFyZSBnaXZlbiBpdCdzIG93biBncm91cCBpZGVudGlmaWVyLgog
ICAgICAgICAvLyBJZiBhIHNlbGVjdCBkb2VzIG5vdCBoYXZlIGdyb3VwcywgYWxsIHRoZSBvcHRp
b24gZWxlbWVudHMgaGF2ZSBncm91cCBJRCAwLgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50KiBpdGVtID0gZWxlbWVu
dC0+bGlzdEl0ZW1zKClbaV07CisgICAgICAgICAgICBIVE1MRWxlbWVudCogaXRlbSA9IGVsZW1l
bnQubGlzdEl0ZW1zKClbaV07CiAgICAgICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChp
dGVtKSkgewotICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hU
TUxPcHRpb25FbGVtZW50KGl0ZW0pOwotICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVj
dE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0ZW0ob3B0aW9uLT50ZXh0KCksIGZhbHNlLCBwYXJlbnRH
cm91cElELCBvcHRpb24tPnNlbGVjdGVkKCksIG9wdGlvbi0+ZmFzdEhhc0F0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cikpKTsKKyAgICAgICAgICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtKTsK
KyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmFwcGVuZChPcHRpb25J
dGVtKG9wdGlvbi50ZXh0KCksIGZhbHNlLCBwYXJlbnRHcm91cElELCBvcHRpb24uc2VsZWN0ZWQo
KSwgb3B0aW9uLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0
dHIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChpdGVt
KSkgewotICAgICAgICAgICAgICAgIEhUTUxPcHRHcm91cEVsZW1lbnQqIGdyb3VwID0gdG9IVE1M
T3B0R3JvdXBFbGVtZW50KGl0ZW0pOworICAgICAgICAgICAgICAgIEhUTUxPcHRHcm91cEVsZW1l
bnQmIGdyb3VwID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0ZW0pOwogICAgICAg
ICAgICAgICAgIHBhcmVudEdyb3VwSUQrKzsKLSAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5z
ZWxlY3RPcHRpb25zLmFwcGVuZChPcHRpb25JdGVtKGdyb3VwLT5ncm91cExhYmVsVGV4dCgpLCB0
cnVlLCAwLCBmYWxzZSwgZ3JvdXAtPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpkaXNhYmxlZEF0dHIpKSk7CisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0
aW9ucy5hcHBlbmQoT3B0aW9uSXRlbShncm91cC5ncm91cExhYmVsVGV4dCgpLCB0cnVlLCAwLCBm
YWxzZSwgZ3JvdXAuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVk
QXR0cikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpbmZvcm1hdGlvbi5z
ZWxlY3RlZEluZGV4ID0gZWxlbWVudC0+c2VsZWN0ZWRJbmRleCgpOwotICAgICAgICBpbmZvcm1h
dGlvbi5pc011bHRpU2VsZWN0ID0gZWxlbWVudC0+bXVsdGlwbGUoKTsKLSAgICB9IGVsc2UgaWYg
KGlzSFRNTFRleHRBcmVhRWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsKLSAgICAgICAg
SFRNTFRleHRBcmVhRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2Fz
c2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlw
ZSA9IHN0YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXplVHlwZT4oZWxlbWVudC0+YXV0b2NhcGl0
YWxpemVUeXBlKCkpOwotICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gZWxlbWVu
dC0+YXV0b2NvcnJlY3QoKTsKKyAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0ZWRJbmRleCA9IGVs
ZW1lbnQuc2VsZWN0ZWRJbmRleCgpOworICAgICAgICBpbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0
ID0gZWxlbWVudC5tdWx0aXBsZSgpOworICAgIH0gZWxzZSBpZiAoaXNIVE1MVGV4dEFyZWFFbGVt
ZW50KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgZWxl
bWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7Cisg
ICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0YXRpY19jYXN0PFdlYkF1
dG9jYXBpdGFsaXplVHlwZT4oZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7CisgICAgICAg
IGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LmF1dG9jb3JyZWN0KCk7CiAgICAg
ICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpUZXh0QXJlYTsKLSAgICAg
ICAgaW5mb3JtYXRpb24uaXNSZWFkT25seSA9IGVsZW1lbnQtPmlzUmVhZE9ubHkoKTsKLSAgICAg
ICAgaW5mb3JtYXRpb24udmFsdWUgPSBlbGVtZW50LT52YWx1ZSgpOwotICAgIH0gZWxzZSBpZiAo
aXNIVE1MSW5wdXRFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fYXNzaXN0ZWROb2Rl
LmdldCgpKTsKLSAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC0+Zm9ybSgp
OworICAgICAgICBpbmZvcm1hdGlvbi5pc1JlYWRPbmx5ID0gZWxlbWVudC5pc1JlYWRPbmx5KCk7
CisgICAgICAgIGluZm9ybWF0aW9uLnZhbHVlID0gZWxlbWVudC52YWx1ZSgpOworICAgIH0gZWxz
ZSBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRN
TElucHV0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fz
c2lzdGVkTm9kZSk7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGVsZW1lbnQuZm9y
bSgpOwogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmZvcm1BY3Rp
b24gPSBmb3JtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjphY3Rpb25BdHRy
KTsKLSAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gc3RhdGljX2Nhc3Q8
V2ViQXV0b2NhcGl0YWxpemVUeXBlPihlbGVtZW50LT5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7Ci0g
ICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LT5hdXRvY29ycmVjdCgp
OwotICAgICAgICBpZiAoZWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIGluZm9y
bWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXpl
VHlwZT4oZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7CisgICAgICAgIGluZm9ybWF0aW9u
LmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LmF1dG9jb3JyZWN0KCk7CisgICAgICAgIGlmIChlbGVt
ZW50LmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5
cGUgPSBJbnB1dFR5cGU6OlBhc3N3b3JkOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1Nl
YXJjaEZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNTZWFyY2hGaWVsZCgpKQog
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlNlYXJjaDsK
LSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNFbWFpbEZpZWxkKCkpCisgICAgICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaXNFbWFpbEZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSA9IElucHV0VHlwZTo6RW1haWw7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlz
VGVsZXBob25lRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc1RlbGVwaG9uZUZp
ZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6
UGhvbmU7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzTnVtYmVyRmllbGQoKSkKLSAgICAg
ICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJw
YXR0ZXJuIikgPT0gIlxcZCoiIHx8IGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgicGF0dGVybiIpID09
ICJbMC05XSoiID8gSW5wdXRUeXBlOjpOdW1iZXJQYWQgOiBJbnB1dFR5cGU6Ok51bWJlcjsKLSAg
ICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNEYXRlVGltZUxvY2FsRmllbGQoKSkKKyAgICAgICAg
ZWxzZSBpZiAoZWxlbWVudC5pc051bWJlckZpZWxkKCkpCisgICAgICAgICAgICBpbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlxcZCoi
IHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlswLTldKiIgPyBJbnB1dFR5
cGU6Ok51bWJlclBhZCA6IElucHV0VHlwZTo6TnVtYmVyOworICAgICAgICBlbHNlIGlmIChlbGVt
ZW50LmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSA9IElucHV0VHlwZTo6RGF0ZVRpbWVMb2NhbDsKLSAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC0+aXNEYXRlRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0RhdGVGaWVs
ZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkRh
dGU7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzRGF0ZVRpbWVGaWVsZCgpKQorICAgICAg
ICBlbHNlIGlmIChlbGVtZW50LmlzRGF0ZVRpbWVGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3Jt
YXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkRhdGVUaW1lOwotICAgICAgICBlbHNlIGlm
IChlbGVtZW50LT5pc1RpbWVGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzVGlt
ZUZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlw
ZTo6VGltZTsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNXZWVrRmllbGQoKSkKKyAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC5pc1dlZWtGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRp
b24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OldlZWs7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1l
bnQtPmlzTW9udGhGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzTW9udGhGaWVs
ZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6Ok1v
bnRoOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1VSTEZpZWxkKCkpCisgICAgICAgIGVs
c2UgaWYgKGVsZW1lbnQuaXNVUkxGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxl
bWVudFR5cGUgPSBJbnB1dFR5cGU6OlVSTDsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNU
ZXh0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGF0dGVybiA9IGVsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpwYXR0ZXJuQXR0cik7CisgICAgICAgIGVs
c2UgaWYgKGVsZW1lbnQuaXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcGF0dGVybiA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnBhdHRlcm5B
dHRyKTsKICAgICAgICAgICAgIGlmIChwYXR0ZXJuID09ICJcXGQqIiB8fCBwYXR0ZXJuID09ICJb
MC05XSoiKQogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRU
eXBlOjpOdW1iZXJQYWQ7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpbmZv
cm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6VGV4dDsKICAgICAgICAgICAgICAgICBp
ZiAoIWluZm9ybWF0aW9uLmZvcm1BY3Rpb24uaXNFbXB0eSgpCi0gICAgICAgICAgICAgICAgICAg
ICYmIChlbGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIpIHx8IGVs
ZW1lbnQtPmdldElkQXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIpIHx8IGVsZW1lbnQtPmZh
c3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLmNvbnRhaW5zKCJzZWFyY2giKSkp
CisgICAgICAgICAgICAgICAgICAgICYmIChlbGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKS5jb250
YWlucygic2VhcmNoIikgfHwgZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLmNvbnRhaW5zKCJzZWFy
Y2giKSB8fCBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLmNv
bnRhaW5zKCJzZWFyY2giKSkpCiAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1l
bnRUeXBlID0gSW5wdXRUeXBlOjpTZWFyY2g7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmZvcm1hdGlvbi5pc1JlYWRPbmx5ID0gZWxlbWVudC0+aXNSZWFkT25seSgpOwot
ICAgICAgICBpbmZvcm1hdGlvbi52YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7Ci0gICAgICAgIGlu
Zm9ybWF0aW9uLnZhbHVlQXNOdW1iZXIgPSBlbGVtZW50LT52YWx1ZUFzTnVtYmVyKCk7Ci0gICAg
ICAgIGluZm9ybWF0aW9uLnRpdGxlID0gZWxlbWVudC0+dGl0bGUoKTsKKyAgICAgICAgaW5mb3Jt
YXRpb24uaXNSZWFkT25seSA9IGVsZW1lbnQuaXNSZWFkT25seSgpOworICAgICAgICBpbmZvcm1h
dGlvbi52YWx1ZSA9IGVsZW1lbnQudmFsdWUoKTsKKyAgICAgICAgaW5mb3JtYXRpb24udmFsdWVB
c051bWJlciA9IGVsZW1lbnQudmFsdWVBc051bWJlcigpOworICAgICAgICBpbmZvcm1hdGlvbi50
aXRsZSA9IGVsZW1lbnQudGl0bGUoKTsKICAgICB9IGVsc2UgaWYgKG1fYXNzaXN0ZWROb2RlLT5o
YXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJ
bnB1dFR5cGU6OkNvbnRlbnRFZGl0YWJsZTsKICAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvY29y
cmVjdCA9IHRydWU7ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBsb29rIGF0IHRoZSBhdHRyaWJ1dGU/
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238543</attachid>
            <date>2014-09-23 08:56:22 -0700</date>
            <delta_ts>2014-09-23 13:50:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137007-20140923085620.patch</filename>
            <type>text/plain</type>
            <size>285679</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczODcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBlZTMwZTE3MjZhYmE0
YjBiMDBhMTI5ZTU4NjU0NWVjNTRlMmQ1Yi4uYmIzMDIwZjYyYWFjMWNjNTcyMmQyMmJhOWRmMjhi
NzQ4Mzg4ZWYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxNyBAQAorMjAxNC0wOS0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50
PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKSBhbmQgZHJvcAorICAgICAgICB0cmFuc2l0
aW9uIG1hY3JvcyBmb3IgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFs
c28gY2xlYW5zIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVs
ZW1lbnRGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hh
bmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZWRD
aGlsZHJlbkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb246OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc1NlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c2V0U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzdHJp
bmdWYWx1ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6
YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZUFjdGlvbkVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29udGFpbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVybmFsTGlua0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmFkaW9CdXR0b25Hcm91cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1p
bmVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGRUZXh0RmllbGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZUZvck1TQUEpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNMaW5rZWQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5U2xpZGVyOjppbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNsaWRlclRodW1iOjplbGVtZW50UmVjdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlOjp0aXRsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZHJlblNlbGVjdGlvbkNoYW5n
ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChvcHRpb25Gcm9tU2VsZWN0aW9uKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcDoKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENhcHRpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxkTGVuZ3RoKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
YW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c1JlYWNoYWJsZUZyb21ET00pOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICog
Y3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
Q2hlY2tlZCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGNzcy9T
dHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6Z2V0
TmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZO
ZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6Om1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJ
c1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
aXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKiBkb20vQ3VycmVudFNjcmlwdEluY3JlbWVu
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50U2NyaXB0SW5jcmVtZW50ZXI6OkN1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlcik6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OnNldERyYWdJbWFnZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aWNvblVSTHMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc01hcE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNl
ZFVzZW1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAgICogZG9tL1Zp
c2l0ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0hhc2hGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50
VHlwZUhlbHBlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpp
bWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRmly
c3RNYXJrYWJsZSk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dp
dGhOYW1lc3BhY2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQ
ZXJmb3JtU21hcnRSZXBsYWNlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6bm9uQm91bmRhcnlTaGFk
b3dUcmVlUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6aXNJ
blBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6CisgICAgICAgICog
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRU
ZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6
CisgICAgICAgICogaHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMpOgorICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9y
eURvY3VtZW50UGFyc2VyOjpjcmVhdGVCYXNpY0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01hdGNoaW5nRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50OjpzZXRJbm5lckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OmRpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpmb3JtSW1hZ2VFbGVtZW50cyk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50Ojphc3NlcnRJdGVtQ2FuQmVJblBhc3ROYW1lc01hcCk6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hU
TUxLZXlnZW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
OjpzaGFkb3dTZWxlY3QpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OnZpcnR1YWxGb3JtKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVs
ZW1lbnRNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXMp
OgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6
Om93bmVyRGF0YUxpc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRk
KToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGh0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRQbHVn
SW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4pOgorICAgICAgICAqIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
Omhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6c2VsZWN0T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRpb25zRm9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleCk6CisgICAg
ICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN1bW1hcnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRUYWJsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Ojpyb3dBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6
bGFzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3Vz
dG9tRWxlbWVudEFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNsb25lTm9kZSk6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6
CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YWJlbHNOb2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMpOgorICAgICAgICAqIGh0bWwvTWVkaWFEb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVE
b2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNjZW5kZW50VmlkZW9FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKToK
KyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICog
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlw
ZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBl
Ojppc0tleWJvYXJkRm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6Y2hlY2tFbGVtZW50TWF0Y2hlc1Jh
ZGlvTm9kZUxpc3RGaWx0ZXIpOgorICAgICAgICAqIGh0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpvd25lckRvY3VtZW50Rm9yQ3VycmVudE5vZGUpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGV0YWlsc01hcmtlckNvbnRyb2w6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXRlclNoYWRvd0VsZW1lbnQ6Om1ldGVy
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzU2hhZG93RWxlbWVudDo6cHJvZ3Jlc3NFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAgICogbG9h
ZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6aGFuZGxlRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKiBs
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OmRp
c3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2Jq
ZWN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU3VibWl0SW1h
Z2UpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRF
bWJlZGRlZE9iamVjdFRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBk
YXRlRW1iZWRkZWRPYmplY3QpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q2FuZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZSk6CisgICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6Om1lZGlhQ29udHJvbHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OmlzTGl2ZUxpbmspOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGxhbkNvdW50ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OmZyYW1lRWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZyYW1lU2V0OjpmcmFtZVNldEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxD
YW52YXM6OmNhbnZhc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OlJlbmRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpw
YWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjppbWFnZU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0ZWRPcHRpb25Db3VudCk6
CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgIChSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0
OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQp
OgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6
Om1ldGVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyOjplbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU25hcHNob3R0ZWRQbHVnSW46
OnBsdWdJbkltYWdlRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp0ZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OnRleHRBcmVhRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWRlbzo6dmlkZW9FbGVtZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVy
KToKKyAgICAgICAgKiBzdmcvc3ZndGFncy5pbjoKKyAgICAgICAgR2VuZXJhdGUgaGVscGVycyB0
byBTVkdBRWxlbWVudC4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6d2FzTGFzdENoYW5nZVVzZXJFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVu
UG9zdExheW91dFRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQ
b3B1cFZpc2libGUpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1l
bnROcyk6CisKIDIwMTQtMDktMjMgIEVkdWFyZG8gTGltYSBNaXRldiAgPGVsaW1hQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gQWRkcyBpbXBsZW1lbnRhdGlvbiBvZiBTdWJ0bGUgQ3J5cHRv
IGRpZ2VzdCBhbGdvcml0aG1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKaW5kZXggNDcyNzJlMmZlM2Q3ODFjYjg2
MzdjNWM5NzY3YTQ3NWI4MjBlYmU5My4uYmIxMDlmNzA1YzRiMzkxNzZiY2I1YjExMTM1MjA3Yjg0
ZDJjMTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTIyICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhU
TUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzAwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1MKkVsZW1l
bnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50SU9T
Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorCiAyMDE0LTA5LTE3ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTcz
Njk1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDNlNDBkMmE2MzZkNDM4N2ZjZDgxNGEwM2RkYzRjOTE5
MTg5NWRjODUuLmRjYzJlODdjZTBiMmE2ZDBlZjQxYjEyZTQ1MjU1ZDRlM2U1ZTFhYTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNC0wOS0yMiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1MKkVsZW1lbnQ+KCkg
aW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQg
b2YgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1t
OgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IF9zZXRBdXRvZmlsbGVkOl0pOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNo
cm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRG
aWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVs
ZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdl
SW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1h
bmRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRl
ZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUlu
VGV4dEFyZWEpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tOgor
ICAgICAgICAoaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxlbWVudCBj
YXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA1MWY3YzIxYTQzNzkw
ZDVhNDBlYzA3NDgwOWNmN2JhMDI3MmFmOWI2Li4zYWMwNzM1Y2RiOTNlZDAzMTAyMjUxZDE4MDg3
OTljNmNjNDVkZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTQtMDkt
MjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgZG93bmNh
c3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwq
RWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkuCisKKyAgICAgICAgKiBET01I
VE1MQ2xhc3Nlcy5jcHA6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OlVSTCk6CisgICAgICAg
IChET01IVE1MRG9jdW1lbnQ6OmJvZHkpOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50Ojpmb3Jt
cyk6CisgICAgICAgIChET01IVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbik6CisgICAgICAgIChET01I
VE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9ucyk6CisgICAgICAgIChET01IVE1MU2VsZWN0RWxlbWVudDo6YWN0aXZhdGVJdGVtQXRJ
bmRleCk6CisgICAgICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCk6CisgICAgICAgIChE
T01IVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVu
dDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpkaXNhYmxlZCk6CisgICAg
ICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpzZXRUeXBlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVl
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKERP
TUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2Vs
ZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3Rh
cnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKToKKyAg
ICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVt
ZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxl
bWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpzZXRB
dXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2ZpbGxlZCk6
CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJFZGl0ZWQpOgorICAgICAgICAo
RE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFF
bGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1
ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAo
RE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKERPTUhUTUxJ
RnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAg
ICAgICAgKGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQpOgorICAgICAgICAoaW5wdXRFbGVtZW50
RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5LTIxICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgRWxlbWVudCBjYXN0aW5nIGhlbHBlciBmdW5jdGlv
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCBkZTQ2Y2RlNDA5ZGQ2NTgyZDllNGI5N2IxYjM2YzI3MWU3MmRlYzc1
Li5hYjQ5YjE4ZmViODE3ZTRhYzcxNzA0NDdiM2RkNWJmMTlmNzljNThjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTQtMDktMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpFbGVtZW50PigpIGluc3RlYWQgb2YgdG9I
VE1MKkVsZW1lbnQoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM3MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVt
ZW50KCkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIpOgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVudEF1dG9maWxs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnNldEhUTUxJ
bnB1dEVsZW1lbnRBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjpodG1sSW5wdXRFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KToKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFFbGVtZW50
TGFzdENoYW5nZVdhc1VzZXJFZGl0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjppc1RleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZTo6aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUpOgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZy
YW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFu
bm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbkNob2ljZUFubm90YXRpb246
OmNvbW1pdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0
QW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luVGV4dEFubm90YXRpb246
OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luVGV4
dEFubm90YXRpb246OnZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmluaXRpYWxpemVQbHVnaW4p
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQp
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1l
bnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxk
RGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0
RmllbGREaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp0
ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9y
Q2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJl
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5k
ZXgpOgorICAgICAgICAoV2ViS2l0Ojppc0Fzc2lzdGFibGVOb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBEZWxldGVk
LgorCiAyMDE0LTA5LTIyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ29jb2FdIEFkZCBVSSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHdpbmRvdy5jbG9zZSgp
IGlzIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKaW5kZXggZjE5NTNkNmM1YTc2OGI1MjU3YTJmNjZhZGFkNGQ0N2ZjMWU2OTViNi4uZWFh
MTYyM2UwNDU2YzRkMWEzNmU4MTExNTQzMmQyZTgxYzBjNGI2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAg
QWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVudEZvclBh
Z2UoY29uc3QgUGFnZSogcGFnZSkKICAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKICAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZEVsZW1l
bnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgaXNIVE1MQXJlYUVsZW1lbnQoZm9jdXNl
ZEVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KHRvSFRN
TEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KSk7CisgICAgICAgIHJldHVybiBmb2N1c2VkSW1h
Z2VNYXBVSUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkp
OwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZm9jdXNlZERvY3VtZW50LT5heE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWRFbGVtZW50ID8gc3RhdGljX2Nhc3Q8Tm9k
ZSo+KGZvY3VzZWRFbGVtZW50KSA6IGZvY3VzZWREb2N1bWVudCk7CiAgICAgaWYgKCFvYmopCkBA
IC05NDgsNyArOTQ4LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KIHZvaWQgQVhPYmplY3RD
YWNoZTo6bGFiZWxDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGlzSFRN
TExhYmVsRWxlbWVudChlbGVtZW50KSk7Ci0gICAgSFRNTEVsZW1lbnQqIGNvcnJlc3BvbmRpbmdD
b250cm9sID0gdG9IVE1MTGFiZWxFbGVtZW50KGVsZW1lbnQpLT5jb250cm9sKCk7CisgICAgSFRN
TEVsZW1lbnQqIGNvcnJlc3BvbmRpbmdDb250cm9sID0gZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVu
dD4oZWxlbWVudCktPmNvbnRyb2woKTsKICAgICB0ZXh0Q2hhbmdlZChjb3JyZXNwb25kaW5nQ29u
dHJvbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdEJveC5jcHAKaW5kZXggNjJiOTM0ZDdkM2I4NTU2M2JiZmY0NWNmNzg1ZTZl
NzJkNzI3NjE3Yi4uMGY4ZTFkOWI1NmU3ODhmODE3NTNiMWYyMDBjZmIyNzUzYmIxYjBiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlz
dEJveC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6Y2Fu
U2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0CiAgICAgaWYgKCFzZWxlY3ROb2Rl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuICF0b0hUTUxTZWxlY3RF
bGVtZW50KHNlbGVjdE5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKKyAgICByZXR1cm4g
IWRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0Tm9kZSkuaXNEaXNhYmxlZEZvcm1D
b250cm9sKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmFkZENoaWxkcmVuKCkK
QEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4o
KQogICAgIAogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+bGlzdEl0
ZW1zKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogZG93bmNhc3Q8SFRNTFNl
bGVjdEVsZW1lbnQ+KCpzZWxlY3ROb2RlKS5saXN0SXRlbXMoKSkgewogICAgICAgICAvLyBUaGUg
Y2FzdCB0byBIVE1MRWxlbWVudCBiZWxvdyBpcyBzYWZlIGJlY2F1c2UgdGhlIG9ubHkgb3RoZXIg
cG9zc2libGUgbGlzdEl0ZW0gdHlwZQogICAgICAgICAvLyB3b3VsZCBiZSBhIFdNTEVsZW1lbnQs
IGJ1dCBXTUwgYnVpbGRzIGRvbid0IHVzZSBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzIGF0IGFsbC4K
ICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hPcHRpb25B
Y2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKaW5kZXgg
YTlmYWQ4ZDQ3MmE3M2EyYzA5Y2ZjODA1NDllYWYxMDQ2Y2U2ZDllNi4uZDg2NWM4OTVlM2VlNjVj
NjYxZGViYzFiNTBjNGFmMWYxODc5YjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKQEAgLTg0
LDcgKzg0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxlY3RlZCgp
IGNvbnN0CiAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVtZW50KG1f
b3B0aW9uRWxlbWVudCktPnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRp
b25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5zZWxlY3RlZCgpOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlMaXN0Qm94T3B0aW9uOjppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKQEAg
LTE1NywxMCArMTU3LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6c3Ry
aW5nVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIAogICAgIGlm
IChpc0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJldHVybiB0
b0hUTUxPcHRpb25FbGVtZW50KG1fb3B0aW9uRWxlbWVudCktPnRleHQoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS50ZXh0KCk7
CiAgICAgCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVsZW1lbnQpKQot
ICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxlbWVudCktPmdy
b3VwTGFiZWxUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVt
ZW50PigqbV9vcHRpb25FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIAogICAgIHJldHVy
biBTdHJpbmcoKTsKIH0KQEAgLTIwMywxMCArMjAzLDEwIEBAIEhUTUxTZWxlY3RFbGVtZW50KiBB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6bGlzdEJveE9wdGlvblBhcmVudE5vZGUoKSBjb25z
dAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50
KG1fb3B0aW9uRWxlbWVudCkpCi0gICAgICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVtZW50KG1f
b3B0aW9uRWxlbWVudCktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2VsZWN0RWxl
bWVudCgpOwogCiAgICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVsZW1lbnQp
KQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0R3JvdXBFbGVtZW50KG1fb3B0aW9uRWxlbWVudCkt
Pm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdEdy
b3VwRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkub3duZXJTZWxlY3RFbGVtZW50KCk7CiAKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKaW5kZXggYTA3MzViNGZl
ZmExYjNhN2QxMWZiMzM0ODZlMjEwZDdiOTcxYzljNS4uZGViMDkyMGY4Yjk4MzZjYzk4NmEyMzgy
OTY1ZGE2MDY2MmJhNmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKQEAgLTI3Nyw3ICsyNzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OnZhbHVlRGVzY3JpcHRpb24o
KSBjb25zdAogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKLSAgICBmbG9hdCB0aW1lID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUp
LT52YWx1ZSgpLnRvRmxvYXQoKTsKKyAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwogICAgIHJldHVybiBsb2NhbGl6ZWRN
ZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwCmlu
ZGV4IDg4ZTJlNmVlMTU2MGRiOWMwMjgyMjJkNjMyNzIyYzE0YjcwMDZmZTYuLmVkMTdkNGEzNzdm
ZTYxODVlYmRhZjAxMTdjOGVmNjg4MTdkODM0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAK
QEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzRW5h
YmxlZCgpIGNvbnN0CiB7CiAgICAgLy8gaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgcmV0dXJucyB0
cnVlIGlmIHRoZSBwYXJlbnQgPHNlbGVjdD4gZWxlbWVudCBpcyBkaXNhYmxlZCwKICAgICAvLyB3
aGljaCB3ZSBkb24ndCB3YW50LgotICAgIHJldHVybiAhdG9IVE1MT3B0aW9uRWxlbWVudChtX2Vs
ZW1lbnQuZ2V0KCkpLT5vd25FbGVtZW50RGlzYWJsZWQoKTsKKyAgICByZXR1cm4gIWRvd25jYXN0
PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50KS5vd25FbGVtZW50RGlzYWJsZWQoKTsKIH0K
IAogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzVmlzaWJsZSgpIGNvbnN0CkBA
IC03NSw3ICs3NSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc09mZlNj
cmVlbigpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc1NlbGVj
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQu
Z2V0KCkpLT5zZWxlY3RlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKm1fZWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5TWVudUxp
c3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKICAgICBpZiAoIWNh
blNldFNlbGVjdGVkQXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRvSFRNTE9w
dGlvbkVsZW1lbnQobV9lbGVtZW50LmdldCgpKS0+c2V0U2VsZWN0ZWQoYik7CisgICAgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnNldFNlbGVjdGVkKGIpOwogfQogCiBT
dHJpbmcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9yTVNBQSgpIGNvbnN0CkBA
IC0xMTQsNyArMTE0LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246
OmVsZW1lbnRSZWN0KCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
bjo6c3RyaW5nVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxPcHRpb25FbGVtZW50
KG1fZWxlbWVudC5nZXQoKSktPnRleHQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQ+KCptX2VsZW1lbnQpLnRleHQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZW51TGlzdFBvcHVwLmNwcAppbmRleCAxZDUyMTlkNjMzYjA1ZDc1NmUxNDhkNzVmNzQ3
ZDg3MTMzODdhM2NlLi5mYzI1ODVkMWVmYzEzYjRkY2U0MmEzZGIwNjBlY2Q1YzYxZGI2MWRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51
TGlzdFBvcHVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZW51TGlzdFBvcHVwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKCkKIAogICAgIG1faGF2ZUNoaWxkcmVuID0g
dHJ1ZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbGlzdEl0ZW0gOiB0b0hUTUxTZWxlY3RFbGVt
ZW50KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgbGlz
dEl0ZW0gOiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdE5vZGUpLmxpc3RJdGVt
cygpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9uID0gbWVu
dUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKICAgICAgICAgaWYgKG9w
dGlvbikgewogICAgICAgICAgICAgb3B0aW9uLT5zZXRQYXJlbnQodGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCmluZGV4IDZlY2FlMTgyNWQ4N2RiYjk3YmI4ODIzNTI4ZTkxMTBlMjM1MzExMzguLjY3ZjI4
YjMwNzRlNmU5ZDY0ZTBhOTM2Zjc3Y2VmYWY3ZjRiZjFmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCkBA
IC0yOTEsMTggKzI5MSwxOCBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlKCktPmhhc1Rh
Z05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7CiAgICAg
aWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIGlmIChpbnB1
dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOworICAgICAgICBpZiAoaW5wdXQuaXNDaGVj
a2JveCgpKQogICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKLSAgICAgICAgaWYgKGlu
cHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgIGlmIChpbnB1dC5pc1JhZGlvQnV0dG9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOwotICAgICAgICBpZiAoaW5wdXQt
PmlzVGV4dEJ1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1Jh
bmdlQ29udHJvbCgpKQorICAgICAgICBpZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkKICAgICAg
ICAgICAgIHJldHVybiBTbGlkZXJSb2xlOwogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1Ip
Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LT5nZXRBdHRyaWJ1dGUo
dHlwZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1dC5nZXRB
dHRyaWJ1dGUodHlwZUF0dHIpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwg
ImNvbG9yIikpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3JXZWxsUm9sZTsKICNlbmRpZgpAQCAt
MzEwLDggKzMxMCw4IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0RmllbGRS
b2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpIHsKLSAg
ICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVt
ZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBsZSgpID8g
TGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKCkpOwor
ICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC5tdWx0aXBsZSgpID8gTGlzdEJveFJvbGUgOiBQ
b3BVcEJ1dHRvblJvbGU7CiAgICAgfQogICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQobm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKQEAgLTQ2OSw4ICs0NjksOCBAQCBi
b29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUp
KSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50
KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzVGV4dCgpIHx8IGlucHV0LT5pc051bWJl
ckZpZWxkKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICByZXR1cm4gaW5wdXQuaXNUZXh0KCkgfHwg
aW5wdXQuaXNOdW1iZXJGaWVsZCgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTUx
OSw4ICs1MTksOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdl
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5w
dXRFbGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0b24oKTsK
KyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC5pc0ltYWdlQnV0dG9uKCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1NCw4IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAKICAgICBpZiAocm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZSAmJiBpc0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBpbnB1dC0+aXNJbWFnZUJ1dHRvbigp
OworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0LmlzSW1hZ2VCdXR0b24oKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjksNyArNzI5LDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1l
KHNlbGVjdFRhZykgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5tdWx0aXBsZSgpOwor
ICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykgJiYgZG93
bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKCkpLm11bHRpcGxlKCk7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdApAQCAtNzQyLDkgKzc0
Miw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdAog
ICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpLT5pc1JlYWRPbmx5
KCk7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAgICBp
ZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXQtPmlzUmVh
ZE9ubHkoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmIChpbnB1dC5pc1RleHRGaWVsZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKICAgICB9CiAKICAgICByZXR1
cm4gIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKQEAgLTgzOCw5ICs4MzgsOSBAQCBTdHJpbmcg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAogZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAgIGlm
IChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAgICAgICAg
aWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0LT52
YWx1ZUFzTnVtYmVyKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1Jhbmdl
Q29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlQXNOdW1iZXIoKTsKICAg
ICB9CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NTIsOSArODUyLDkgQEAgZmxv
YXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAg
IGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0
LT5tYXhpbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29u
dHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsKICAgICB9CiAKICAg
ICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NjYsOSArODY2LDkgQEAgZmxvYXQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAogZmxvYXQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAgIGlmIChu
b2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKLSAgICAgICAgaWYg
KGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0LT5taW5p
bXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29udHJvbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1pbmltdW0oKTsKICAgICB9CiAKICAgICBpZiAo
IWlzUmFuZ2VDb250cm9sKCkpCkBAIC05NzQsOCArOTc0LDggQEAgRWxlbWVudCogQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogc3RhdGljIGJvb2wgaXNOb2Rl
QWN0aW9uRWxlbWVudChOb2RlKiBub2RlKQogewogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQo
bm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgp
ICYmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LT5pc0NoZWNrYm94KCkgfHwgaW5w
dXQtPmlzVGV4dEJ1dHRvbigpIHx8IGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC0+aXNJ
bWFnZUJ1dHRvbigpKSkKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmICghaW5wdXQuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgJiYgKGlucHV0LmlzUmFkaW9CdXR0b24oKSB8fCBpbnB1dC5pc0NoZWNr
Ym94KCkgfHwgaW5wdXQuaXNUZXh0QnV0dG9uKCkgfHwgaW5wdXQuaXNGaWxlVXBsb2FkKCkgfHwg
aW5wdXQuaXNJbWFnZUJ1dHRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0g
ZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
c2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzA3LDcgKzEzMDcsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlcm5hdGl2ZVRleHQoVmVjdG9yPEFjY2Vz
c2liaWxpdHlUZXh0PiYgdGV4dE9yZAogICAgIAogICAgIC8vIFRoZSBmaWVsZHNldCBlbGVtZW50
IGRlcml2ZXMgaXRzIGFsdGVybmF0aXZlIHRleHQgZnJvbSB0aGUgZmlyc3QgYXNzb2NpYXRlZCBs
ZWdlbmQgZWxlbWVudCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAgIGlmIChpc0hUTUxGaWVsZFNl
dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0b0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZSkt
PmxlZ2VuZCgpKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb3duY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50Pigqbm9k
ZSkubGVnZW5kKCkpOwogICAgICAgICBpZiAob2JqZWN0ICYmICFvYmplY3QtPmlzSGlkZGVuKCkp
CiAgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGFjY2Vzc2li
bGVOYW1lRm9yTm9kZShvYmplY3QtPm5vZGUoKSksIEFsdGVybmF0aXZlVGV4dCkpOwogICAgIH0K
QEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZpc2li
bGVUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikKICAgICAKICAgICBi
b29sIGlzSW5wdXRUYWcgPSBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7CiAgICAgaWYgKGlzSW5w
dXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVs
ZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpIHsKLSAgICAg
ICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoaW5wdXQtPnZhbHVlV2l0
aERlZmF1bHQoKSwgVmlzaWJsZVRleHQpKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmIChpbnB1
dC5pc1RleHRCdXR0b24oKSkgeworICAgICAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChBY2Nlc3Np
YmlsaXR5VGV4dChpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCksIFZpc2libGVUZXh0KSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjg1LDkgKzE2ODUsOSBAQCBT
dHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKIAogICAgIGJvb2wg
aXNJbnB1dFRhZyA9IGlzSFRNTElucHV0RWxlbWVudChub2RlKTsKICAgICBpZiAoaXNJbnB1dFRh
ZykgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVu
dChub2RlKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKLSAgICAgICAgICAg
IHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVmYXVsdCgpOworICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAg
aWYgKGlucHV0LmlzVGV4dEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVl
V2l0aERlZmF1bHQoKTsKICAgICB9CiAKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0NvbnRyb2wo
KSkgewpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojp0ZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGlzTmF0
aXZlVGV4dENvbnRyb2woKSAmJiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpIHx8IGlzSFRN
TElucHV0RWxlbWVudChub2RlKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KG5vZGUpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogCiAgICAgaWYgKCFub2RlLT5p
c0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTE3NzcsMTYgKzE3
NzcsMTYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSgpIGNv
bnN0CiAgICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7CiAKICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxl
Y3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKTsKLSAgICAgICAgaW50IHNlbGVj
dGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRl
bXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9
IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC5saXN0SXRlbXMoKTsKICAgICAg
ICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNlbGVjdGVk
SW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBvdmVycmlkZGVuRGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRleF0tPmZh
c3RHZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogICAgICAgICAgICAgaWYgKCFvdmVycmlk
ZGVuRGVzY3JpcHRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRk
ZW5EZXNjcmlwdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAoIXNlbGVjdEVsZW1lbnQtPm11
bHRpcGxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+dmFsdWUoKTsKKyAg
ICAgICAgaWYgKCFzZWxlY3RFbGVtZW50Lm11bHRpcGxlKCkpCisgICAgICAgICAgICByZXR1cm4g
c2VsZWN0RWxlbWVudC52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQog
CkBAIC0xODEyLDEzICsxODEyLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNv
bG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKICAgICBpZiAoIW5vZGUoKSB8
fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cik7
CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pigqbm9kZSgpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1dC5nZXRBdHRy
aWJ1dGUodHlwZUF0dHIpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgImNvbG9y
IikpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlIGFs
d2F5cyByZXR1cm5zIGEgc3RyaW5nIHBhcnNlYWJsZSBieSBDb2xvcigpLgotICAgIENvbG9yIGNv
bG9yKGlucHV0LT52YWx1ZSgpKTsKKyAgICBDb2xvciBjb2xvcihpbnB1dC52YWx1ZSgpKTsKICAg
ICByID0gY29sb3IucmVkKCk7CiAgICAgZyA9IGNvbG9yLmdyZWVuKCk7CiAgICAgYiA9IGNvbG9y
LmJsdWUoKTsKQEAgLTE4NDIsNyArMTg0Miw3IEBAIHN0YXRpYyBTdHJpbmcgYWNjZXNzaWJsZU5h
bWVGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBhbHQ7CiAgICAgCiAgICAgaWYg
KGlzSFRNTElucHV0RWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0RWxl
bWVudChub2RlKS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZSBub2RlIGNhbiBiZSB0
dXJuZWQgaW50byBhbiBBWCBvYmplY3QsIHdlIGNhbiB1c2Ugc3RhbmRhcmQgbmFtZSBjb21wdXRh
dGlvbiBydWxlcy4KICAgICAvLyBJZiBob3dldmVyLCB0aGUgbm9kZSBjYW5ub3QgKGJlY2F1c2Ug
dGhlcmUncyBubyByZW5kZXJlciBlLmcuKSBmYWxsYmFjayB0byB1c2luZyB0aGUgYmFzaWMgdGV4
dCB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggYTQ1NzQ4YTM2OGI3YzBlMzQ0
ZjA4MWVjZTJmOWU3ZWQyNzViOWRhYy4uMjMxZjJmZmE2MDUyYTdhMGUzN2QyNWNmMThjYTNjNzkz
YjE5NjlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC01MjQsOCArNTI0LDggQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0F0dGFjaG1lbnQoKSBjb25zdAogYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdAogewogICAg
IGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbnB1dEVsZW1l
bnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgICAgICByZXR1
cm4gaW5wdXQtPmlzRmlsZVVwbG9hZCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpOworICAg
ICAgICByZXR1cm4gaW5wdXQuaXNGaWxlVXBsb2FkKCk7CiAgICAgfQogICAgIAogICAgIHJldHVy
biBmYWxzZTsKQEAgLTc0MSw5ICs3NDEsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgIGlmIChjc3NCb3ggJiYgY3NzQm94LT5pc01l
bnVMaXN0KCkpIHsKICAgICAgICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBnbyBzdHJhaWdodCB0
byB0aGUgdGV4dCgpIG9mIGl0cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAvLyBUaGlzIGhhcyB0
byBiZSBvdmVycmlkZGVuIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3RlZCBpdGVtIGhhcyBh
biBBUklBIGxhYmVsLgotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCA9
IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAgaW50IHNl
bGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0
SXRlbXMoKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgIGlu
dCBzZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4KCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50Lmxp
c3RJdGVtcygpOwogICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRpY19jYXN0
PHNpemVfdD4oc2VsZWN0ZWRJbmRleCkgPCBsaXN0SXRlbXMuc2l6ZSgpKSB7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJyaWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJdGVtc1tz
ZWxlY3RlZEluZGV4XS0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAgICAgICAg
ICAgICBpZiAoIW92ZXJyaWRkZW5EZXNjcmlwdGlvbi5pc051bGwoKSkKQEAgLTc4Myw3ICs3ODMs
NyBAQCBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYWJlbEVs
ZW1lbnRDb250YWluZXIoKSBjb25zdAogICAgIC8vIGZpbmQgaWYgdGhpcyBoYXMgYSBwYXJlbnQg
dGhhdCBpcyBhIGxhYmVsCiAgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gbV9yZW5kZXJlci0+
bm9kZSgpOyBwYXJlbnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgp
KSB7CiAgICAgICAgIGlmIChpc0hUTUxMYWJlbEVsZW1lbnQocGFyZW50Tm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdG9IVE1MTGFiZWxFbGVtZW50KHBhcmVudE5vZGUpOworICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KHBhcmVudE5vZGUpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkxNiw5ICs5MTYsOSBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVtZW50KCkg
Y29uc3QKICAgICAvLyBSaWdodCBub3csIHdlIGRvIG5vdCBzdXBwb3J0IEFSSUEgbGlua3MgYXMg
aW50ZXJuYWwgbGluayBlbGVtZW50cwogICAgIGlmICghaXNIVE1MQW5jaG9yRWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSFRNTEFuY2hvckVsZW1lbnQqIGFu
Y2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVudCk7CisgICAgSFRNTEFuY2hvckVsZW1l
bnQmIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCk7CiAgICAg
Ci0gICAgVVJMIGxpbmtVUkwgPSBhbmNob3ItPmhyZWYoKTsKKyAgICBVUkwgbGlua1VSTCA9IGFu
Y2hvci5ocmVmKCk7CiAgICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllciA9IGxpbmtVUkwuZnJh
Z21lbnRJZGVudGlmaWVyKCk7CiAgICAgaWYgKGZyYWdtZW50SWRlbnRpZmllci5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTUzLDExICs5NTMsMTEgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW4KICAgICBpZiAoIW5vZGUgfHwgIWlzSFRNTElucHV0RWxlbWVudChub2Rl
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0g
dG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIGlmIHRoZXJlJ3MgYSBm
b3JtLCB0aGVuIHRoaXMgaXMgZWFzeQotICAgIGlmIChpbnB1dC0+Zm9ybSgpKSB7CisgICAgaWYg
KGlucHV0LmZvcm0oKSkgewogICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3JtRWxlbWVu
dHM7Ci0gICAgICAgIGlucHV0LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQtPm5hbWUo
KSwgZm9ybUVsZW1lbnRzKTsKKyAgICAgICAgaW5wdXQuZm9ybSgpLT5nZXROYW1lZEVsZW1lbnRz
KGlucHV0Lm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0
byYgYXNzb2NpYXRlRWxlbWVudCA6IGZvcm1FbGVtZW50cykgewogICAgICAgICAgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
JmFzc29jaWF0ZUVsZW1lbnQuZ2V0KCkpKQpAQCAtOTY4LDkgKzk2OCw5IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuCiAgICAgICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgIGlm
IChpc0hUTUxJbnB1dEVsZW1lbnQobGlzdC0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgICAgICBI
VE1MSW5wdXRFbGVtZW50KiBhc3NvY2lhdGVFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGxp
c3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVFbGVtZW50LT5pc1Jh
ZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC0+bmFtZSgpID09IGlucHV0LT5uYW1lKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9
IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoYXNzb2NpYXRlRWxlbWVudCkpCisgICAgICAg
ICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXNz
b2NpYXRlRWxlbWVudC5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC5uYW1lKCkg
PT0gaW5wdXQubmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVF
bGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFVJRWxlbWVudHMuYXBwZW5k
KG9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTUwNyw3ICsx
NTA3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKIFVSTCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojp1cmwoKSBjb25zdAogewogICAgIGlmIChpc0FuY2hvcigpICYmIGlzSFRNTEFuY2hv
ckVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBpZiAoSFRNTEFuY2hvckVs
ZW1lbnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yRWxlbWVudCgpKSkKKyAg
ICAgICAgaWYgKEhUTUxBbmNob3JFbGVtZW50KiBhbmNob3IgPSBkb3duY2FzdDxIVE1MQW5jaG9y
RWxlbWVudD4oYW5jaG9yRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBhbmNob3ItPmhy
ZWYoKTsKICAgICB9CiAgICAgCkBAIC0xNTE1LDEwICsxNTE1LDEwIEBAIFVSTCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9yZW5kZXJlci0+
ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKICAgICBpZiAoaXNJbWFnZSgpICYmIG1fcmVuZGVyZXIt
Pm5vZGUoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkKLSAgICAg
ICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCptX3JlbmRlcmVyLT5u
b2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChpc0lucHV0SW1hZ2UoKSkKLSAgICAgICAgcmV0
dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkp
LnNyYygpOwogICAgIAogICAgIHJldHVybiBVUkwoKTsKIH0KQEAgLTE2NzksNyArMTY3OSw3IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCkgfHwg
IW1fcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOworICAg
IEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKm1fcmVuZGVyZXItPm5vZGUoKSk7CiAKICAg
ICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTY4OCwxMCArMTY4OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNl
dFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIC8vIEZJWE1FOiBEbyB3ZSB3YW50IHRv
IGRvIGFueXRoaW5nIGhlcmUgZm9yIEFSSUEgdGV4dGJveGVzPwogICAgIGlmIChyZW5kZXJlci0+
aXNUZXh0RmllbGQoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qgc2FmZSEgIE90
aGVyIGVsZW1lbnRzIGNvdWxkIGhhdmUgYSBUZXh0RmllbGQgcmVuZGVyZXIuCi0gICAgICAgIHRv
SFRNTElucHV0RWxlbWVudChlbGVtZW50KS0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICAgICAgZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkuc2V0VmFsdWUoc3RyaW5nKTsKICAgICB9
IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgbm90IHNhZmUhICBPdGhlciBlbGVtZW50cyBjb3VsZCBoYXZlIGEgVGV4dEFyZWEgcmVu
ZGVyZXIuCi0gICAgICAgIHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KS0+c2V0VmFsdWUo
c3RyaW5nKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCku
c2V0VmFsdWUoc3RyaW5nKTsKICAgICB9CiB9CiAKQEAgLTE3NjMsMTAgKzE3NjMsMTAgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXREb2N1bWVudExpbmtzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgcmUKICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IGN1cnItPnBh
cmVudE5vZGUoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgaXNIVE1MQXJlYUVsZW1lbnQo
Y3VycikgJiYgaXNIVE1MTWFwRWxlbWVudChwYXJlbnQpKSB7CiAgICAgICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eUltYWdl
TWFwTGluayhheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsK
LSAgICAgICAgICAgICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gdG9IVE1MTWFwRWxlbWVudChw
YXJlbnQpOwotICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxlbWVudCh0
b0hUTUxBcmVhRWxlbWVudChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0
SFRNTE1hcEVsZW1lbnQobWFwKTsKLSAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LT5zZXRQYXJl
bnQoYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKG1hcCkpOworICAgICAgICAgICAgICAg
IEhUTUxNYXBFbGVtZW50JiBtYXAgPSBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKnBhcmVudCk7
CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTEFyZWFFbGVtZW50KGRvd25jYXN0
PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNl
dEhUTUxNYXBFbGVtZW50KCZtYXApOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldFBh
cmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoJm1hcCkpOwogCiAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChhcmVhT2JqZWN0KTsKICAgICAgICAgICAgIH0KQEAgLTIxNjEs
NyArMjE2MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNCiAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKEVsZW1lbnQqIG1hcFBhcmVudCA9IGFy
ZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQYXJlbnQgPSBtYXBQYXJlbnQtPnBh
cmVudEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoaXNIVE1MTWFwRWxlbWVudChtYXBQYXJlbnQp
KSB7Ci0gICAgICAgICAgICBwYXJlbnQgPSBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAo
dG9IVE1MTWFwRWxlbWVudChtYXBQYXJlbnQpKTsKKyAgICAgICAgICAgIHBhcmVudCA9IGFjY2Vz
c2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcChkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4obWFwUGFy
ZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMTEsMTAg
KzIyMTEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KICAgICBOb2RlKiBub2RlID0gaGl0
VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpOwog
CiAgICAgaWYgKGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gYWNjZXNz
aWJpbGl0eUltYWdlTWFwSGl0VGVzdCh0b0hUTUxBcmVhRWxlbWVudChub2RlKSwgcG9pbnQpOwor
ICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChkb3duY2FzdDxIVE1M
QXJlYUVsZW1lbnQ+KG5vZGUpLCBwb2ludCk7CiAgICAgCiAgICAgaWYgKGlzSFRNTE9wdGlvbkVs
ZW1lbnQobm9kZSkpCi0gICAgICAgIG5vZGUgPSB0b0hUTUxPcHRpb25FbGVtZW50KG5vZGUpLT5v
d25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50Pigqbm9kZSkub3duZXJTZWxlY3RFbGVtZW50KCk7CiAgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0KiBvYmogPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqKQpAQCAtMjUwNSwyMSAr
MjUwNSwyMSBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
ZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBUZXh0QXJlYVJvbGU7
CiAKICAgICBpZiAobm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAg
ICAgIGlmIChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBp
bnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgaWYgKGlu
cHV0LmlzQ2hlY2tib3goKSkKICAgICAgICAgICAgIHJldHVybiBDaGVja0JveFJvbGU7Ci0gICAg
ICAgIGlmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQuaXNSYWRp
b0J1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIFJhZGlvQnV0dG9uUm9sZTsKLSAgICAgICAg
aWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgaWYgKGlucHV0LmlzVGV4dEJ1dHRv
bigpKQogICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7CiAgICAgICAgIC8vIE9u
IGlPUywgdGhlIGRhdGUgZmllbGQgaXMgYSBwb3B1cCBidXR0b24uIE9uIG90aGVyIHBsYXRmb3Jt
cyB0aGlzIGlzIGEgdGV4dCBmaWVsZC4KICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGlmIChp
bnB1dC0+aXNEYXRlRmllbGQoKSkKKyAgICAgICAgaWYgKGlucHV0LmlzRGF0ZUZpZWxkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gUG9wVXBCdXR0b25Sb2xlOwogI2VuZGlmCiAgICAgICAgIAogI2lm
IEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlID0gaW5wdXQuZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJjb2xvciIpKQogICAgICAgICAgICAgcmV0dXJuIENv
bG9yV2VsbFJvbGU7CiAjZW5kaWYKQEAgLTI4NDAsOCArMjg0MCw4IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRyZW4oKQogICAgIGlmICghbm9kZSB8
fCAhaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAg
SFRNTEVsZW1lbnQqIHNwaW5CdXR0b25FbGVtZW50ID0gaW5wdXQtPmlubmVyU3BpbkJ1dHRvbkVs
ZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCpub2RlKTsKKyAgICBIVE1MRWxlbWVudCogc3BpbkJ1dHRvbkVsZW1lbnQgPSBp
bnB1dC5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKCFzcGluQnV0dG9uRWxlbWVu
dCB8fCAhc3BpbkJ1dHRvbkVsZW1lbnQtPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0zMjcxLDcgKzMyNzEsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKICAgICBpZiAoaXNMaW5rYWJsZSgq
dGhpcykpIHsKICAgICAgICAgRWxlbWVudCogYW5jaG9yID0gYW5jaG9yRWxlbWVudCgpOwogICAg
ICAgICBpZiAoYW5jaG9yICYmIGlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKLSAgICAgICAg
ICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvciktPmhyZWYoKTsKKyAgICAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFuY2hvcikuaHJlZigpOwog
ICAgIH0KIAogICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwpAQCAtMzI4Niw3ICszMjg2LDcgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0CiAgICAgaWYg
KCFhbmNob3IgfHwgIWlzSFRNTEFuY2hvckVsZW1lbnQoYW5jaG9yKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuICF0b0hUTUxBbmNob3JFbGVtZW50KGFuY2hvciktPmhyZWYo
KS5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFu
Y2hvcikuaHJlZigpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpoYXNCb2xkRm9udCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAppbmRleCA5NTBmOTgyOTAyYTdhODYwZDhm
ZmY1MmNjZjJkNDE5YWJiMTBjZjAzLi5iNWUzNDZkNTZlNjdiNDQ1NGQwNGM5ZDYwYzk4MTBhOTEy
MWUxMmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNsaWRlci5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlT
bGlkZXI6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIEhUTUxJbnB1dEVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlTbGlkZXI6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOworICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpOwogfQogCiAKQEAgLTE1
OSw3ICsxNTksNyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6ZWxlbWVu
dFJlY3QoKSBjb25zdAogICAgIFJlbmRlck9iamVjdCogc2xpZGVyUmVuZGVyZXIgPSBtX3BhcmVu
dC0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXNsaWRlclJlbmRlcmVyIHx8ICFzbGlkZXJSZW5kZXJl
ci0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICByZXR1cm4g
dG9IVE1MSW5wdXRFbGVtZW50KHNsaWRlclJlbmRlcmVyLT5ub2RlKCkpLT5zbGlkZXJUaHVtYkVs
ZW1lbnQoKS0+Ym91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oc2xpZGVyUmVuZGVyZXItPm5vZGUoKSktPnNsaWRlclRodW1iRWxlbWVudCgpLT5ib3Vu
ZGluZ0JveCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYjo6Y29tcHV0ZUFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IGQ5ZDQzNWY4YmVhN2MyYmIz
M2Y3YzhkYzllMWI4YTExZGIwODE4NmEuLjUwZTU4ZDljZjJhYWZkMDUzYzFkZTMwZTQ1NDQwN2Jm
ODkwYTYxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTFRhYmxlRWxlbWVudCogQWNj
ZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdAogICAgIAogICAgIFJlbmRlclRh
YmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CiAgICAgaWYgKHRhYmxlLT5l
bGVtZW50KCkgJiYgaXNIVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpKQotICAgICAg
ICByZXR1cm4gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlLT5lbGVtZW50KCkpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGUtPmVsZW1lbnQoKSk7CiAgICAg
CiAgICAgLy8gSWYgdGhlIHRhYmxlIGhhcyBhIGRpc3BsYXk6dGFibGUtcm93LWdyb3VwLCB0aGVu
IHRoZSBSZW5kZXJUYWJsZSBkb2VzIG5vdCBoYXZlIGEgcG9pbnRlciB0byBpdCdzIEhUTUxUYWJs
ZUVsZW1lbnQuCiAgICAgLy8gV2UgY2FuIGluc3RlYWQgZmluZCBpdCBieSBhc2tpbmcgdGhlIGZp
cnN0U2VjdGlvbiBmb3IgaXRzIHBhcmVudC4KQEAgLTEwOSw3ICsxMDksNyBAQCBIVE1MVGFibGVF
bGVtZW50KiBBY2Nlc3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCgpIGNvbnN0CiAgICAgaWYg
KCFhY3R1YWxUYWJsZSB8fCAhaXNIVE1MVGFibGVFbGVtZW50KGFjdHVhbFRhYmxlKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxlbWVudChh
Y3R1YWxUYWJsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KGFjdHVh
bFRhYmxlKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgp
IGNvbnN0CkBAIC02MDgsNyArNjA4LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlUYWJsZTo6dGl0
bGUoKSBjb25zdAogICAgIC8vIHNlZSBpZiB0aGVyZSBpcyBhIGNhcHRpb24KICAgICBOb2RlKiB0
YWJsZUVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKHRhYmxlRWxlbWVudCAm
JiBpc0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50KSkgewotICAgICAgICBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQp
LT5jYXB0aW9uKCk7CisgICAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uID0g
ZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxlRWxlbWVudCkuY2FwdGlvbigpOwogICAg
ICAgICBpZiAoY2FwdGlvbikKICAgICAgICAgICAgIHRpdGxlID0gY2FwdGlvbi0+aW5uZXJUZXh0
KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
QVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9B
WE9iamVjdENhY2hlQXRrLmNwcAppbmRleCA5MzBlZjNiN2JjZmRmZGNjNDdkOWJmOWY1NDllNjE0
ZGUwYTQyNjk3Li5iODY1MTE4MDgyZDNhNzBkZDhhMzdjYjgzNjRmODNmNTkwODJlYjMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hl
QXRrLmNwcApAQCAtMTQwLDEwICsxNDAsOCBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGlsZHJlblNl
bGVjdGlvbkNoYW5nZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiAgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG9iamVjdC0+d3JhcHBlcigpLCAic2VsZWN0aW9uLWNoYW5nZWQiKTsKIAog
ICAgIC8vIEZpbmQgdGhlIGl0ZW0gd2hlcmUgdGhlIHNlbGVjdGlvbiBjaGFuZ2Ugd2FzIHRyaWdn
ZXJlZCBmcm9tLgotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxlY3RF
bGVtZW50KG5vZGUpOwotICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgaW50
IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3QtPmFjdGl2ZVNlbGVjdGlvblN0YXJ0TGlzdEluZGV4
KCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRvd25jYXN0PEhUTUxTZWxlY3RF
bGVtZW50Pigqbm9kZSk7CisgICAgaW50IGNoYW5nZWRJdGVtSW5kZXggPSBzZWxlY3QuYWN0aXZl
U2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxp
c3RPYmplY3QgPSBnZXRMaXN0T2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKCFsaXN0T2JqZWN0KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCmluZGV4IDZjNGNi
ZjkxNWZkNzBjYjFjNjRkZDgwZGQ0Y2YxNjdiODM3NDU2MjIuLjllODdmNGY1ZmJjNzdlZmY1Mjg1
NzY1ZDY2ZmY3NDc1OTRkMDIyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9wdGlvbkZyb21TZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW4K
ICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9IVE1MU2VsZWN0RWxlbWVu
dChyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdE5v
ZGUgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7CiAgICAg
ICAgIGlmICghc2VsZWN0Tm9kZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0x
OTUsOCArMTk1LDggQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdldFNl
bGVjdGlvbkNvdW50KEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQogICAgICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgaW50IHNlbGVjdGVkSW5kZXgg
PSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZEluZGV4KCk7
Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRleCA8IHN0
YXRpY19jYXN0PGludD4odG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKS0+bGlz
dEl0ZW1zKCkuc2l6ZSgpKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBkb3duY2FzdDxI
VE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgoKTsKKyAg
ICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3RhdGlj
X2Nhc3Q8aW50Pihkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSkt
Pmxpc3RJdGVtcygpLnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAppbmRleCBmNmVkMTljMGFhNjlhYjgzMTVkM2EzODE5
MmYxODZlYTBhODQ2NTYzLi42NTliODhmOGM3OWFiYTFjNDAxMDFiNjk5MjkxNmQ0ZWI0NjM3MTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKQEAgLTIzOCwxOSArMjM4
LDE5IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0hlYWRl
cihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRB
Y2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKIHsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktp
dEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCBudWxscHRyKTsKKyAgICByZXR1
cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUp
LCBudWxscHRyKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0
YWJsZSk7CiAgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkg
ewogICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUtPm5vZGUoKTsKICAgICAgICAgaWYgKG5v
ZGUgJiYgaXNIVE1MVGFibGVFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgICAgICBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHRvSFRNTFRhYmxlRWxlbWVudChub2RlKS0+Y2FwdGlv
bigpOworICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24gPSBkb3du
Y2FzdDxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkuY2FwdGlvbigpOwogICAgICAgICAgICAgaWYg
KGNhcHRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZp
cnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPmVsZW1lbnQo
KSktPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVHZXRDb2x1bW5EZXNjcmlwdGlvbihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDM0ZDBjYjkxY2ZmOGExZDg2ODZmNmY5NzA4
ZjQ0Yzg2MzdlMWNlNmEuLjVjYjQ0MGE5MDIwODM0NmY5ZTlmNTE3MzMwOGY1YjYxMGUzMjMwYjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTE3MSw3ICsxNzEsNyBAQCBzdGF0
aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbihBdGtPYmplY3Qq
IG9iamVjdCkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lU
X0FDQ0VTU0lCTEUob2JqZWN0KSwgMCk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIE5vZGUqIG5vZGUgPSAwOworICAgIE5vZGUqIG5v
ZGUgPSBudWxscHRyOwogICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKICAgICAgICAgbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBjb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJp
YnV0ZSgpICE9IFVua25vd25Sb2xlIHx8IGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKQEAgLTE3OSw3
ICsxNzksNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlw
dGlvbihBdGtPYmplY3QqIG9iamVjdCkKIAogICAgIC8vIGF0a190YWJsZV9nZXRfc3VtbWFyeSBy
ZXR1cm5zIGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28gZXhwb3Nl
IHN1bW1hcnkgaGVyZS4KICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGFibGVS
b2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gdG9IVE1MVGFibGVFbGVtZW50KG5vZGUp
LT5zdW1tYXJ5KCk7CisgICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gZG93bmNhc3Q8SFRNTFRhYmxl
RWxlbWVudD4oKm5vZGUpLnN1bW1hcnkoKTsKICAgICAgICAgaWYgKCFzdW1tYXJ5LmlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybiBjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KG9iamVjdCwg
QXRrQ2FjaGVkQWNjZXNzaWJsZURlc2NyaXB0aW9uLCBzdW1tYXJ5KTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0
SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9i
amVjdElPUy5tbQppbmRleCBlMWZkYzNiM2MyMTA0NWFiOGRjOWJjZjVmNDE0NzFlNWIzODQzMjdm
Li4xYzliOTM5ZWZlMWFiMDdjMmUzZGExMmVmNzU2Nzk2ODNiYTk5MjA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW0KQEAgLTY3LDExICs2Nyw4IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nl
c3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpCiAgICAgaWYgKCFyZW5kZXJPYmplY3QgfHwg
IXJlbmRlck9iamVjdC0+bm9kZSgpIHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKS0+aXNIVE1MRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KHJlbmRlck9iamVjdC0+bm9kZSgp
KTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCkubGVuZ3RoKCk7CisgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRl
ck9iamVjdC0+bm9kZSgpKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LnZhbHVlKCkubGVuZ3Ro
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0
dGFjaG1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCmluZGV4IGIwZmRmNjViMjk2MmZhOWE4MWViYjk4OTViNzc4MmNkM2U0
ZTZhMTIuLjZmYmExOTk1NDFmYzkwYWE5ZjY0ZjhhOWJiNzIzOGE5OTdlMWIwNzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTgz
LDE2ICs4MywxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVtR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogICAgIEFTU0VSVChkb2N1bWVu
dC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAKICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9w
ZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgIGlmICghYXRvbWljUHJv
cGVydHlOYW1lIHx8ICF0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05hbWVkSXRl
bSgqYXRvbWljUHJvcGVydHlOYW1lKSkKKyAgICBpZiAoIWF0b21pY1Byb3BlcnR5TmFtZSB8fCAh
ZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRlbSgqYXRv
bWljUHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAotICAgIGlmIChVTkxJS0VMWSh0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPndp
bmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVydHlOYW1l
KSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQp
LndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVydHlO
YW1lKSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9j
dW1lbnQtPndpbmRvd05hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKICAgICAgICAgQVNT
RVJUKGNvbGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY29s
bGVjdGlvbikpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhl
YywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHRvSFRNTERvY3VtZW50KGRvY3VtZW50KS0+d2lu
ZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBkb3duY2FzdDxIVE1M
RG9jdW1lbnQ+KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUp
KSk7CiB9CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQpAQCAtMjQ2LDcgKzI0
Niw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
dGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7CiAgICAgaWYgKGRvY3VtZW50
LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1By
b3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgICAgIGlmIChhdG9t
aWNQcm9wZXJ0eU5hbWUgJiYgdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5kb3dOYW1l
ZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5
TmFtZSAmJiBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJ
dGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgbmFtZWRJdGVtR2V0
dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMjMsNyArMzIz
LDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHUKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0
aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQt
PmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYgKGF0b21p
Y1Byb3BlcnR5TmFtZSAmJiB0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05hbWVk
SXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlO
YW1lICYmIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0
ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAxYWQz
YzYyNjY1Y2Q2ZTExNWNhZjg4OWQ1YTI3N2JiMDM1MTVhZWY1Li43OTUzYzZjZDViZTM1Y2I1YTg1
NGJhMDAyZGYwZWM5ZTkxYzYxZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC03Myw4ICs3Myw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFCiAgICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50
LmRvY3VtZW50TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpOwotICAgIGlmIChVTkxJS0VM
WShlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpKSB7Ci0gICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKSkKKyAg
ICBpZiAoVU5MSUtFTFkoaXNIVE1MSUZyYW1lRWxlbWVudChlbGVtZW50KSkpIHsKKyAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqZWxlbWVudCku
Y29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMo
ZXhlYywgZnJhbWUpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IGYyNTFlYjJk
ZWJmMDIzY2QzNmVjZDRjOTI2MDFhMDBmY2U4Yjg0MTcuLjc3ZWFmZjU4MDE3ZmYxZjJiNTZlZGYx
ODc3MDhmNmYyNDI0MDFlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTEsNyArNTEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdAogewogICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0g
anNDYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90QmFzZSktPmltcGwoKTsKICAgICBOb2RlKiBmcmFt
ZUVsZW1lbnQgPSBlbGVtZW50LmNoaWxkcmVuKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
dG9IVE1MRnJhbWVFbGVtZW50KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7Cisg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxGcmFtZUVsZW1lbnQ+KGZy
YW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3cgPSB0b0pTRE9NV2luZG93U2hlbGwoZG9jdW1lbnQtPmZyYW1lKCksIGN1
cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdp
bmRvdyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHAKaW5kZXggNjNhMmRjNmFjOGIxMjAyZWM2ZThlNDllNzZhNGM2NTYxNmM2ZmRlYS4uMmUxZDEy
NjZlM2MyM2I4MTRkYTk5ZmVmOTgxNTg2ZWQ3OTUzZmYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKEpTTm9kZSoganNOb2RlLCBOb2RlKiBub2Rl
LCBTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgaXMgZGVzdHJveWVk
LCBpdHMgbG9hZCBldmVudCB3aWxsIG5vdCBmaXJlLgogICAgICAgICAgICAgLy8gRklYTUU6IFRo
ZSBET00gc2hvdWxkIG1hbmFnZSB0aGlzIGlzc3VlIHdpdGhvdXQgdGhlIGhlbHAgb2YgSmF2YVNj
cmlwdCB3cmFwcGVycy4KICAgICAgICAgICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVu
dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpLmhh
c1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PihlbGVtZW50KS5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
ICAgICAgICAgZWxzZSBpZiAoaXNIVE1MQXVkaW9FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0b0hUTUxBdWRpb0VsZW1lbnQoZWxlbWVudCkucGF1c2VkKCkpCisgICAg
ICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxIVE1MQXVkaW9FbGVtZW50PihlbGVtZW50KS5wYXVz
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZjgyZWQyNzgx
YzUwNzI1Y2VkZDE1NDcwMWYwMmRlZGZlMDhjNGVlZi4uNjI2MzIxYzZiODcxY2NjYzdkODFmZWEy
YjFkY2YwZmRiYjNjNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAK
QEAgLTY1NSw3ICs2NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAg
ICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29u
dGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCku
aXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJs
ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9u
cy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaApp
bmRleCAxZGIxOWVjZDYxYTJmZDZjNDMyZTg5NDZlOGM1YjM2NGU3MjEwNjUwLi43ZmE0ZGM1Yjg5
OTBmZWZmZjRiMTcxOWQ0ODAxODA5NTU2ODhmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTg2LDcgKzg2LDcgQEAgQUxX
QVlTX0lOTElORSBib29sIGlzQ2hlY2tlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGNvbnN0IEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7
CiAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNr
ZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYm
IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpCisgICAgaWYgKGlzSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjE1Yzc5Y2YzNWI0
NzI4ZjA2NzU4YzM0M2NiMDk5NWI5MWU2MmY1YS4uNDI5Yzg0YTE2Njk5ODZkZGNjNTY5N2I2NmVh
OGM5ZjNhYjcxOWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTMz
OCw3ICsxMzM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICBpZiAoZSAmJiBlLT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsKICAgICAg
ICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhl
IGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8vIHNvIHdl
IGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBs
aWNpdGx5IHNpemVkLgotICAgICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlKSB8fCAhdG9I
VE1MSW5wdXRFbGVtZW50KGUpLT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgIGlmICghaXNIVE1M
SW5wdXRFbGVtZW50KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZSkuaXNJbWFn
ZUJ1dHRvbigpKQogICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCAxMDNlNjQxYWM2ZTdj
NWViNDBjMTc1MzJlYTAxNDQ1ZjYxMWMxNTJmLi4wNzIwMDM3ZTlhODdkMDM0MGRkMTA5ODA0NWJk
ODJhMzIzZWRiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExp
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKQEAgLTY4
LDcgKzY4LDcgQEAgU3R5bGVTaGVldCogU3R5bGVTaGVldExpc3Q6Oml0ZW0odW5zaWduZWQgaW5k
ZXgpCiBIVE1MU3R5bGVFbGVtZW50KiBTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElFIGFsc28gc3VwcG9y
dHMgcmV0cmlldmluZyBhIHN0eWxlc2hlZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUvaWQgb2Yg
dGhlIDxzdHlsZT4gdGFnCiAgICAgLy8gKHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGFsbCB0aGUg
b3RoZXIgY29sbGVjdGlvbnMpCkBAIC03Nyw4ICs3Nyw4IEBAIEhUTUxTdHlsZUVsZW1lbnQqIFN0
eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAg
IC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5
IDspCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG5h
bWUpOwogICAgIGlmIChlbGVtZW50ICYmIGlzSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KSkKLSAg
ICAgICAgcmV0dXJuIHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KTsKLSAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpOworICAg
IHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggYzBmMTgwYzgyNjk4YjY5ZGE1
Y2VmOGNmMmIyYzQ5YjYyMDUwYTkzZi4uMjAzN2JiN2ZiODMzMGQyNjgwYmZlNWMxM2EwOTkwODU5
NjFiOWRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApA
QCAtMjc4NSw3ICsyNzg1LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlm
TmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KgogICAgIGlmIChpc0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICBpZiAoY2hlY2tp
bmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2
aW5nU3R5bGUpCiAgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPmVsZW1lbnRTdHlsZS0+c2V0
VW5pcXVlKCk7Ci0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCpl
bGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJs
ZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNzk3LDE0ICsyNzk3LDE0IEBA
IHN0YXRpYyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1Bs
YWNlaG9sZGVyU2hvd24oRWxlbWVudCoKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5
bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRV
bmlxdWUoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhv
bGRlclZpc2libGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9v
bCBpc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgdG9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICByZXR1cm4g
aXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwog
fQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vo
b2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQmIGZyYWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1
cnJlbnRTY3JpcHRJbmNyZW1lbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRTY3Jp
cHRJbmNyZW1lbnRlci5oCmluZGV4IGY3ZTg0MWE3MGI3NDFjZTE0OWMwODVlMjJmNTY2ZGI1NDZj
OTU5YmMuLjdjNDg4YzA3MTg3MmUyN2RjODM3NWY0MGMwOGU0YTA0NzZlZGI5YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ3VycmVudFNjcmlwdEluY3JlbWVudGVyLmgKQEAgLTQyLDcgKzQy
LDcgQEAgcHVibGljOgogICAgICAgICAsIG1faXNIVE1MU2NyaXB0RWxlbWVudChpc0hUTUxTY3Jp
cHRFbGVtZW50KGVsZW1lbnQpKQogICAgIHsKICAgICAgICAgaWYgKG1faXNIVE1MU2NyaXB0RWxl
bWVudCkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KHRvSFRNTFNj
cmlwdEVsZW1lbnQoZWxlbWVudCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cHVzaEN1cnJl
bnRTY3JpcHQoZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICB9CiAK
ICAgICB+Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAKaW5kZXggNGNiZmFmMTM1Mzc2ZTVjYzk5YmViOWJlMDJjNjQ5NzIwZWI0ODgwZC4uMTlj
ZjljMjJmOGE0NTVhNzM4OGU4ZjNhMDc0MzZjMjg5Y2EwYjBjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlci5jcHAKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIERhdGFUcmFuc2Zlcjo6c2V0
RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBpbnQgeSkKIAogICAgIENhY2hlZElt
YWdlKiBpbWFnZTsKICAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVu
dCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgaW1hZ2UgPSB0b0hUTUxJbWFn
ZUVsZW1lbnQoZWxlbWVudCktPmNhY2hlZEltYWdlKCk7CisgICAgICAgIGltYWdlID0gZG93bmNh
c3Q8SFRNTEltYWdlRWxlbWVudD4oKmVsZW1lbnQpLmNhY2hlZEltYWdlKCk7CiAgICAgZWxzZQot
ICAgICAgICBpbWFnZSA9IDA7CisgICAgICAgIGltYWdlID0gbnVsbHB0cjsKIAogICAgIG1fZHJh
Z0xvY2F0aW9uID0gSW50UG9pbnQoeCwgeSk7CiAKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIERh
dGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGludCB4LCBpbnQgeSkK
ICAgICAgICAgbV9kcmFnSW1hZ2VMb2FkZXItPnN0YXJ0TG9hZGluZyhtX2RyYWdJbWFnZSk7CiAg
ICAgfQogCi0gICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gaW1hZ2UgPyAwIDogZWxlbWVudDsKKyAg
ICBtX2RyYWdJbWFnZUVsZW1lbnQgPSBpbWFnZSA/IG51bGxwdHIgOiBlbGVtZW50OwogCiAgICAg
dXBkYXRlRHJhZ0ltYWdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0MmQwZTBk
YWUyMzhkZTBhN2Y2N2EzOTM1NDFiYjY1MzI3OGExOGZjLi5lMGE3MDYxNGQ1NzRjYTljYzY0YzJm
MmU3M2M1ZGZiMTJiOGU5MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE1NTEsOCAr
MTU1MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCiAg
ICAgLy8gVGhlIERPTSBBUEkgaGFzIG5vIG1ldGhvZCBvZiBzcGVjaWZ5aW5nIGRpcmVjdGlvbiwg
c28gYXNzdW1lIExUUi4KICAgICB1cGRhdGVUaXRsZShTdHJpbmdXaXRoRGlyZWN0aW9uKHRpdGxl
LCBMVFIpKTsKIAotICAgIGlmIChtX3RpdGxlRWxlbWVudCAmJiBpc0hUTUxUaXRsZUVsZW1lbnQo
bV90aXRsZUVsZW1lbnQuZ2V0KCkpKQotICAgICAgICB0b0hUTUxUaXRsZUVsZW1lbnQobV90aXRs
ZUVsZW1lbnQuZ2V0KCkpLT5zZXRUZXh0KHRpdGxlKTsKKyAgICBpZiAobV90aXRsZUVsZW1lbnQg
JiYgaXNIVE1MVGl0bGVFbGVtZW50KCptX3RpdGxlRWxlbWVudCkpCisgICAgICAgIGRvd25jYXN0
PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkuc2V0VGV4dCh0aXRsZSk7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlRWxlbWVudChjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9u
JiB0aXRsZSwgRWxlbWVudCogdGl0bGVFbGVtZW50KQpAQCAtMjg4MSw3ICsyODgxLDcgQEAgdm9p
ZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNldENvb2tpZSB3b3JrIG9u
IFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4uLj4KICAg
ICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbiAo
Zm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9yZWQuCi0gICAgICAgICAgICB0b0hUTUxEb2N1
bWVudCh0aGlzKS0+c2V0Q29va2llKGNvbnRlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAg
ICAgICAgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqdGhpcykuc2V0Q29va2llKGNvbnRlbnQsIElH
Tk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC00NjUyLDE0
ICs0NjUyLDE0IEBAIGNvbnN0IFZlY3RvcjxJY29uVVJMPiYgRG9jdW1lbnQ6Omljb25VUkxzKGlu
dCBpY29uVHlwZXNNYXNrKQogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKGkp
OwogICAgICAgICBpZiAoIWNoaWxkLT5oYXNUYWdOYW1lKGxpbmtUYWcpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSB0b0hUTUxM
aW5rRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGlmICghKGxpbmtFbGVtZW50LT5pY29uVHlwZSgp
ICYgaWNvblR5cGVzTWFzaykpCisgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0VsZW1lbnQg
PSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KCpjaGlsZCk7CisgICAgICAgIGlmICghKGxpbmtF
bGVtZW50Lmljb25UeXBlKCkgJiBpY29uVHlwZXNNYXNrKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAobGlua0VsZW1lbnQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAgICAgIGlm
IChsaW5rRWxlbWVudC5ocmVmKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgLy8gUHV0IGl0IGF0IHRoZSBmcm9udCB0byBlbnN1cmUgdGhhdCBpY29ucyBzZWVu
IGxhdGVyIHRha2UgcHJlY2VkZW5jZSBhcyByZXF1aXJlZCBieSB0aGUgc3BlYy4KLSAgICAgICAg
SWNvblVSTCBuZXdVUkwobGlua0VsZW1lbnQtPmhyZWYoKSwgbGlua0VsZW1lbnQtPmljb25TaXpl
cygpLCBsaW5rRWxlbWVudC0+dHlwZSgpLCBsaW5rRWxlbWVudC0+aWNvblR5cGUoKSk7CisgICAg
ICAgIEljb25VUkwgbmV3VVJMKGxpbmtFbGVtZW50LmhyZWYoKSwgbGlua0VsZW1lbnQuaWNvblNp
emVzKCksIGxpbmtFbGVtZW50LnR5cGUoKSwgbGlua0VsZW1lbnQuaWNvblR5cGUoKSk7CiAgICAg
ICAgIG1faWNvblVSTHMuYXBwZW5kKG5ld1VSTCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4YjZjMWU2ZmU1NmQ3NzFjMGMyZmFlMmJk
NWI2NTk3MDIwN2E4MDUuLjc3ZWVjM2I3NWY0OWE4MDAyNGQ2YjA5MTE1YzIzYTE5ZmQyOWIzZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC01MywxOCAr
NTMsMTggQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hlc05hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1w
bCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogCiBpbmxpbmUgYm9vbCBrZXlNYXRjaGVz
TWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgcmV0dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MTWFw
RWxlbWVudChlbGVtZW50KS5nZXROYW1lKCkuaW1wbCgpID09ICZrZXk7CisgICAgcmV0dXJuIGlz
SFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KGVsZW1l
bnQpLmdldE5hbWUoKS5pbXBsKCkgPT0gJmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hl
c0xvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVtZW50KSAm
JiB0b0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSAm
a2V5OworICAgIHJldHVybiBpc0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpICYmIGRvd25jYXN0PEhU
TUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkubG93ZXIoKS5pbXBsKCkgPT0gJmtleTsK
IH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1F
OiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxkIG1hdGNoIGJvdGggaW1hZ2UgYW5k
IG9iamVjdCBlbGVtZW50cy4KLSAgICByZXR1cm4gaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQp
ICYmIHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5tYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChr
ZXkpOworICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkubWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoa2V5KTsK
IH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE2OCwyMiArMTY4
LDIyIEBAIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TmFtZShjb25z
dCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBEb2N1bWVu
dE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYg
a2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxN
YXBFbGVtZW50KGdldDxrZXlNYXRjaGVzTWFwTmFtZT4oa2V5LCBzY29wZSkpOworICAgIHJldHVy
biBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZ2V0PGtleU1hdGNoZXNNYXBOYW1lPihrZXksIHNj
b3BlKSk7CiB9CiAKIEhUTUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3Qg
VHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxlbWVudChn
ZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3BlKSk7CisgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1l
PihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1h
cDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBr
ZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTElt
YWdlRWxlbWVudChnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXA+KGtleSwgc2NvcGUpKTsK
KyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZ2V0PGtleU1hdGNoZXNMb3dl
cmNhc2VkVXNlbWFwPihrZXksIHNjb3BlKSk7CiB9CiAKIEhUTUxMYWJlbEVsZW1lbnQqIERvY3Vt
ZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIHJl
dHVybiB0b0hUTUxMYWJlbEVsZW1lbnQoZ2V0PGtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0ZT4o
a2V5LCBzY29wZSkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MTGFiZWxFbGVtZW50PihnZXQ8
a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKSk7CiB9CiAKIEVsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApp
bmRleCBkN2E5ZDY2NjczYTZhZTNlYjAxMzFmZjAzYTNmYjMwNDBlZTBkNmNmLi42MWQ5OWE3MWM0
YjljMTk2MDM4NjRjY2IyMDI5YWM4MDBjN2I0OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yODYsNyArMjg2LDcg
QEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVT
aGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNj
cmlwdCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzSFRNTExpbmtFbGVtZW50KGVsZW1lbnQp
KSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKLSAgICAgICAgICAgICAgICBI
VE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxlbWVudCk7
CisgICAgICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0
PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVt
ZW50LmlzRGlzYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgZW5hYmxlZFZpYVNjcmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZpYVNjcmlw
dCgpOwpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTCiAgICAgICAg
ICAgICBpZiAoaXNTVkdTdHlsZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgc2hl
ZXQgPSBkb3duY2FzdDxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgICAgICAg
ICBzaGVldCA9IHRvSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAg
ICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQgPSB0b0hUTUxTdHlsZUVs
ZW1lbnQoZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0
PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CiAgICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKICAgICAgICAgICAg
IC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0aGFuCiAg
ICAgICAgICAgICAvLyBQRVJTSVNURU5UKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAzZTA2
ZWQ3MGMyNTE1YTI4NTRjNTc3YTBhNjI0N2YzM2Q3YjE1ZWE2Li45MWZlMmE4NWFjN2IxNTYwYTlj
NTAxNmVkZDA4ODcxMWExNTk4ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzM4LDcg
KzEzMzgsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omlu
c2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50UmFyZURh
dGEoKS0+Y2xlYXJDbGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRyZWVTY29w
ZSogbmV3U2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRNTERvY3Vt
ZW50KiBuZXdEb2N1bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAmJiBuZXdT
Y29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1bWVudCgm
bmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1bWVudCog
bmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgbmV3U2NvcGUt
PmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVudCgpID8gZG93bmNhc3Q8SFRNTERvY3VtZW50
PigmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgIGlmIChuZXdTY29w
ZSAhPSAmdHJlZVNjb3BlKCkpCiAgICAgICAgIG5ld1Njb3BlID0gbnVsbHB0cjsKIApAQCAtMTM4
MSw3ICsxMzgxLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBp
bnNlcnRpb25Qb2ludCkKIAogICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0luVHJlZVNjb3BlKCkp
IHsKICAgICAgICAgVHJlZVNjb3BlKiBvbGRTY29wZSA9ICZpbnNlcnRpb25Qb2ludC50cmVlU2Nv
cGUoKTsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVudCA9IGluRG9jdW1lbnQoKSAm
JiBvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1
bWVudCgmb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgICAgICBIVE1M
RG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVudCgpICYmIG9sZFNjb3BlLT5kb2N1bWVu
dFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oJm9sZFNj
b3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKG9sZFNjb3BlICE9
ICZ0cmVlU2NvcGUoKSB8fCAhaXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgb2xkU2NvcGUg
PSBudWxscHRyOwogCkBAIC0yNTkwLDcgKzI1OTAsNyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1
cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JgogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQodG9IVE1MRG9jdW1l
bnQoZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOworICAgIHVwZGF0ZU5hbWVGb3JEb2N1
bWVudChkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KCkpLCBvbGROYW1lLCBuZXdOYW1l
KTsKIH0KIAogdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKFRyZWVTY29wZSYg
c2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdOYW1lKQpAQCAtMjYzOCw3ICsyNjM4LDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRl
SWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXcKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgdXBkYXRlSWRGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVudChkb2N1
bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzT25s
eUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKKyAgICB1cGRhdGVJZEZvckRvY3VtZW50KGRv
d25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZElkLCBuZXdJZCwgVXBkYXRlSFRN
TERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJpYnV0ZSk7CiB9
CiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlSWRGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBzY29wZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCkKQEAg
LTI2ODUsOSArMjY4NSw5IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlTGFiZWwoVHJlZVNjb3BlJiBz
Y29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICBz
Y29wZS5yZW1vdmVMYWJlbCgqb2xkRm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCAqdG9IVE1MTGFi
ZWxFbGVtZW50KHRoaXMpKTsKKyAgICAgICAgc2NvcGUucmVtb3ZlTGFiZWwoKm9sZEZvckF0dHJp
YnV0ZVZhbHVlLmltcGwoKSwgZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKnRoaXMpKTsKICAg
ICBpZiAoIW5ld0ZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgc2NvcGUuYWRk
TGFiZWwoKm5ld0ZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRvSFRNTExhYmVsRWxlbWVudCh0
aGlzKSk7CisgICAgICAgIHNjb3BlLmFkZExhYmVsKCpuZXdGb3JBdHRyaWJ1dGVWYWx1ZS5pbXBs
KCksIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KCp0aGlzKSk7CiB9CiAKIHZvaWQgRWxlbWVu
dDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQpAQCAt
Mjc0MSwxMSArMjc0MSwxMCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBFbGVtZW50Ojpl
bnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eQogICAgIGlmIChIVE1M
Q29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGNhY2hlZEhUTUxDb2xsZWN0aW9uKHR5cGUpKQogICAg
ICAgICByZXR1cm4gY29sbGVjdGlvbjsKIAotICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29s
bGVjdGlvbjsKICAgICBpZiAodHlwZSA9PSBUYWJsZVJvd3MpIHsKLSAgICAgICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1M
VGFibGVSb3dzQ29sbGVjdGlvbj4odG9IVE1MVGFibGVFbGVtZW50KCp0aGlzKSwgdHlwZSk7Cisg
ICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hl
ZENvbGxlY3Rpb248SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+KGRvd25jYXN0PEhUTUxUYWJsZUVs
ZW1lbnQ+KCp0aGlzKSwgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFNlbGVjdE9wdGlv
bnMpIHsKLSAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCku
YWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KHRvSFRNTFNlbGVjdEVs
ZW1lbnQoKnRoaXMpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5z
dXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+
KGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqdGhpcyksIHR5cGUpOwogICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBGb3JtQ29udHJvbHMpIHsKICAgICAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9y
bVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogICAgICAgICByZXR1cm4gZW5zdXJl
UmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uPigqdGhpcywgdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwCmluZGV4IGFhMWEwMGFjNjllMDk3YTgwMDY3OWNjMTJhZTM5ODM1MWIwYTY1
MDIuLjQwOTRmMzNjOTIyZGY1MDFkNDk1ZWYzNWRlMjkxYWFkNThkMDA3NzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zNTcsMTcgKzM1NywxNyBAQCBib29sIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZl
bnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBjbGlja0hhbmRsaW5n
U3RhdGU7CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlLmdldCgpKSkKLSAgICAgICAg
dG9IVE1MSW5wdXRFbGVtZW50KCpub2RlKS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQsIGNsaWNr
SGFuZGxpbmdTdGF0ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KS53aWxsRGlzcGF0Y2hFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAKICAgICBp
ZiAoIWV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1wdHkoKSkK
ICAgICAgICAgZGlzcGF0Y2hFdmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVu
dENvbnRleHQpOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCgmZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMoKm5vZGUpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKKyAg
ICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKICAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZSgwKTsKIAogICAgIGlmIChjbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0gICAgICAg
IHRvSFRNTElucHV0RWxlbWVudCgqbm9kZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwg
Y2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7
CiAKICAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBET00gZG9l
cyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCiAgICAgLy8gZGVmYXVsdCBoYW5kbGluZywg
dGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVybmFsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggNjA5NmM1ODQxZmZjOTg2NWY5MGZm
MjJmODNjYjE2NzcyNTA5NDMyYi4uZTMwNTZjMzYwMTI0OWVlMzllMzE4MjdjYWQyY2I4OGVjYTI2
YWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMzgzLDcgKzM4Myw3
IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKIFNjcmlwdEVs
ZW1lbnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICBpZiAoaXNIVE1MU2NyaXB0RWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRN
TFNjcmlwdEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2Ny
aXB0RWxlbWVudD4oZWxlbWVudCk7CiAKICAgICBpZiAoaXNTVkdTY3JpcHRFbGVtZW50KGVsZW1l
bnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU2NyaXB0RWxlbWVudD4oZWxlbWVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggNzViOTY4OWM4MGQz
N2Y1NDdlYmVmZTU0N2ZmNDE1Mzk1ZGUxNTQ2Zi4uNGMyMmQwMDczNmRmZmUwMzI1ZTFiYTExYzA4
ODk2MDRkZTYyZWUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5r
U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcApA
QCAtNzAsNyArNzAsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZv
ckFsbExpbmtzKCkKIGlubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVtZW50KERv
Y3VtZW50JiBkb2N1bWVudCwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXNIVE1MQW5j
aG9yRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTEFuY2hvckVsZW1lbnQo
ZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1M
QW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CiAgICAgaWYgKGNvbnN0
IEF0b21pY1N0cmluZyogYXR0cmlidXRlID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KSkKICAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudC5iYXNlVVJMKCksICph
dHRyaWJ1dGUpOwogICAgIHJldHVybiAwOwpAQCAtMTAxLDcgKzEwMSw3IEBAIEVJbnNpZGVMaW5r
IFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQmIGVs
ZW1lbnQpCiAKICAgICBMaW5rSGFzaCBoYXNoOwogICAgIGlmIChpc0hUTUxBbmNob3JFbGVtZW50
KGVsZW1lbnQpKQotICAgICAgICBoYXNoID0gdG9IVE1MQW5jaG9yRWxlbWVudChlbGVtZW50KS52
aXNpdGVkTGlua0hhc2goKTsKKyAgICAgICAgaGFzaCA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVt
ZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBlbHNlCiAgICAgICAgIGhhc2gg
PSBXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2goZWxlbWVudC5kb2N1bWVudCgpLmJhc2VVUkwoKSwg
KmF0dHJpYnV0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVz
LnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNDViOGRiNTE4ZDg4
NGU3NDQ2ZmM2MzU4ZDlmM2JmMWM5ZmIyOGJlOS4uNGRkZWRjMTdjODkyOWY4ODhjMmVjZWJkNzI2
Y2Q2YmVkODI1ODQzZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMu
cGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTY2NiwxNCArNjY2
LDYgQEAgc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFyZ1R5cGU+
IHsKIH07CiBFTkQKICAgICAgICAgOwotICAgICAgICBpZiAoJHBhcmFtZXRlcnN7bmFtZXNwYWNl
fSBlcSAiSFRNTCIpIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKLS8vIEZJWE1FOiBSZW1v
dmUgdGhlc2UgbWFjcm9zIG9uY2UgdGhlIGNvZGUgaGFzIGJlZW4gcG9ydGVkIHRvIHVzaW5nCi0v
LyBkb3duY2FzdDwqRWxlbWVudD4oKS4KLSNkZWZpbmUgdG8kY2xhc3MoeCkgV2ViQ29yZTo6ZG93
bmNhc3Q8V2ViQ29yZTo6JGNsYXNzPih4KQotRU5ECi0gICAgICAgICAgICA7Ci0gICAgICAgIH0K
ICAgICAgICAgcHJpbnQgRiAiXG4iOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAppbmRleCBiMmU1ZDNhODAwM2VlNGEwYTQ4OGFhNWE1NWEwZjFmMGJkY2Y1M2UwLi5lOTBmZGZh
MzNkYzI0ZmI1MzJjMTQ4YTlmNDMyYmI2MWMzNDkyOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVj
dGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0
ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMg
c2hhZG93IHRyZWUsCiAgICAgLy8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBmb3IgdGhh
dCB0ZXh0IGNvbnRyb2wuCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRGb3Jt
Q29udHJvbE9mU2VsZWN0aW9uU3RhcnQgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc2VsZWN0
aW9uLnN0YXJ0KCkpOwotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0RnJvbUNv
bnRyb2xPZlRhcmdldCA9IGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmV2ZW50LT50YXJn
ZXQoKS0+dG9Ob2RlKCkpID8gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChldmVudC0+dGFy
Z2V0KCktPnRvTm9kZSgpKSA6IG51bGxwdHI7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQqIHRleHRGcm9tQ29udHJvbE9mVGFyZ2V0ID0gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCgqZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgPyBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudD4oZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKSkgOiBudWxscHRyOwogICAgIGlm
ICh0ZXh0RnJvbUNvbnRyb2xPZlRhcmdldCAmJiAoc2VsZWN0aW9uLnN0YXJ0KCkuaXNOdWxsKCkg
fHwgdGV4dEZyb21Db250cm9sT2ZUYXJnZXQgIT0gdGV4dEZvcm1Db250cm9sT2ZTZWxlY3Rpb25T
dGFydCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0ZXh0RnJvbUNvbnRy
b2xPZlRhcmdldC0+c2VsZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVNlbGVj
dGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSk7
CkBAIC0zMjEsMTggKzMyMSwxOCBAQCBib29sIEVkaXRvcjo6Y2FuQ3V0KCkgY29uc3QKIHN0YXRp
YyBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudC5pc0ltYWdlRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jdW1lbnQuYm9keSgpOwogICAgIGlmICghYm9keSkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUqIG5vZGUg
PSBib2R5LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFpc0hUTUxJbWFnZUVsZW1lbnQobm9k
ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0hUTUxJbWFnZUVsZW1lbnQobm9k
ZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50Pihub2RlKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25zdApAQCAt
MzUzMywxOCArMzUzMywxOCBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSog
bm9kZSkKIHsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVy
KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKICAgICAg
ICAgICAgIHJldHVybiBub2RlOwogICAgICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCgqbm9kZSkpCi0gICAgICAgICAgICBub2RlID0gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudChub2RlKS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpOworICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Pigqbm9kZSkudmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBlbHNlIGlmIChub2RlLT5maXJz
dENoaWxkKCkpCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBFZGl0b3I6OnNl
bGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtl
clR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAwZTNmM2ZlMDM5YzA3ZDVhMjFmMTkwNWQ5ZmVkMDUy
ODQ2MDAzZjQyLi44ZGI3MmNmOWFjYWQyZDlkZjI0NGQyZjY0MWJlMTU0MTgyOGMwMGJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTY3MCwxNiArMTY3
MCwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAKICAgICBFbGVtZW50KiBmb2N1c2VkRWxl
bWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmIChmb2N1c2VkRWxlbWVu
dCAmJiBmb2N1c2VkRWxlbWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAgICAgIEhU
TUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChkb2N1
bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChzZWxlY3RFbGVtZW50LT5jYW5T
ZWxlY3RBbGwoKSkgewotICAgICAgICAgICAgc2VsZWN0RWxlbWVudC0+c2VsZWN0QWxsKCk7Cisg
ICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGlzSFRNTFNlbGVjdEVsZW1lbnQoZm9jdXNlZEVsZW1l
bnQpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CisgICAgICAgIGlmIChzZWxl
Y3RFbGVtZW50LmNhblNlbGVjdEFsbCgpKSB7CisgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnNl
bGVjdEFsbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
UmVmUHRyPE5vZGU+IHJvb3QgPSAwOwotICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gMDsK
KyAgICBSZWZQdHI8Tm9kZT4gcm9vdDsKKyAgICBOb2RlKiBzZWxlY3RTdGFydFRhcmdldCA9IG51
bGxwdHI7CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAg
ICAgcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAg
ICAgIGlmIChOb2RlKiBzaGFkb3dSb290ID0gbV9zZWxlY3Rpb24ubm9uQm91bmRhcnlTaGFkb3dU
cmVlUm9vdE5vZGUoKSkKQEAgLTE2ODksNyArMTY4OSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNlbGVjdEFsbCgpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9u
ZSgpICYmIGZvY3VzZWRFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAoZm9jdXNlZEVsZW1lbnQt
PmlzVGV4dEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICB0b0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KGZvY3VzZWRFbGVtZW50KS0+c2VsZWN0KCk7CisgICAgICAgICAgICAgICAg
ZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuc2Vs
ZWN0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcm9vdCA9IGZvY3VzZWRFbGVtZW50LT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgp
OwpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZv
cm0oRWxlbWVudCogc3RhcnQpCiAgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMuZnJvbSgq
c3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gKml0OwogICAgICAgICBpZiAoaXNIVE1MRm9ybUVs
ZW1lbnQoJmVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVtZW50KCZl
bGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KCZl
bGVtZW50KTsKICAgICAgICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KSkK
ICAgICAgICAgICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVudCkuZm9y
bSgpOwogICAgICAgICBpZiAoaXNIVE1MRnJhbWVFbGVtZW50QmFzZShlbGVtZW50KSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCAyMTVhYTdh
ZWUyMDVlMmU1OGY3YTdjZTMxYzJmMjNjNTE5NjZmMmJiLi4xOGU1ODk0ZDJjYjFjNWY0YWUxZjRl
MjI5Mzk0OGU5NmIzMTczN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFj
Y3VtdWxhdG9yLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9kZSogbm9k
CiAKICAgICBpZiAoISh0YXJnZXROb2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSAmJiBl
bGVtZW50Q2Fubm90SGF2ZUVuZFRhZyh0YXJnZXROb2RlKSkpIHsKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKLSAgICAgICAgTm9kZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFzVGFnTmFt
ZSh0ZW1wbGF0ZVRhZykgPyB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQodGFyZ2V0Tm9kZSkuY29udGVu
dCgpLT5maXJzdENoaWxkKCkgOiB0YXJnZXROb2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgTm9k
ZSogY3VycmVudCA9IHRhcmdldE5vZGUuaGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyBkb3duY2Fz
dDxIVE1MVGVtcGxhdGVFbGVtZW50Pih0YXJnZXROb2RlKS5jb250ZW50KCktPmZpcnN0Q2hpbGQo
KSA6IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2Vsc2UKICAgICAgICAgTm9kZSogY3VycmVu
dCA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDBiMDI0NjI3MmQ5
NTU3MmUyNDJlNjAwZWJlNDdkZmE3YTY3NTE0OWQuLmJkNTM2ZjA3OWYyMWZhY2U4M2JkZTRiZjgz
ODM2MDcxYjEyZjcxOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMjczLDcgKzEyNzMsNyBAQCBib29sIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3NpbmdU
ZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1
aXZhbGVudCgpKTsKLSAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRl
eHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bhc3N3b3Jk
RmllbGQoKSkKKyAgICBpZiAodGV4dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRD
b250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFz
c3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERpc2FibGUgc21hcnQgcmVw
bGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA0MDIyNWYwNmZhYzZlY2Vj
Mzg3ZmU1NGQxMmRhYmM0NTc2NmYyMjY0Li5iYTgzMjVmNTZjZWE0OWE4YzFjNTY4YWFiMDBkYzRi
OGRkNTU4MTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKQEAgLTY1OCwxMyArNjU4LDEzIEBAIEVsZW1lbnQqIFZpc2libGVTZWxlY3Rpb246OnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogCiBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpub25Cb3Vu
ZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFk
b3dUcmVlUm9vdE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5v
ZGUoKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBhc3N3b3Jk
RmllbGQoKSBjb25zdAogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29u
dHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAgICByZXR1cm4gdGV4
dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1
dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1cm4gdGV4
dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpOwogfQogCiAj
aWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9I
VE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tCmluZGV4IDhiYjc0OTZiOTVlMjQwMjIxZjRlN2E2YjNkMzg5YmY0MTdkMjgzNzMuLjI0
YmE1ZTFhMDIyNGU1MDk3MGQ4OTcwMzQ0ZmI3ODYxNjhhMTAyODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTIwMzUsNyArMjAzNSw3IEBA
IEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIE5T
SW50ZWdlciBkZXB0aCkKICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSAiZGVjaW1hbCI7CiAg
ICAgICAgIGxpc3QgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRMaXN0IGFsbG9jXSBpbml0V2l0
aE1hcmtlckZvcm1hdDpTdHJpbmcoInsiICsgbGlzdFN0eWxlVHlwZSArICJ9Iikgb3B0aW9uczow
XSk7CiAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAg
ICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSB0b0hUTUxPTGlzdEVsZW1lbnQoZWxl
bWVudCkuc3RhcnQoKTs7CisgICAgICAgICAgICBOU0ludGVnZXIgc3RhcnRpbmdJdGVtTnVtYmVy
ID0gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oZWxlbWVudCkuc3RhcnQoKTsKICAgICAgICAg
ICAgIFtsaXN0IHNldFN0YXJ0aW5nSXRlbU51bWJlcjpzdGFydGluZ0l0ZW1OdW1iZXJdOwogICAg
ICAgICB9CiAgICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsKQEAgLTIw
NDMsNyArMjA0Myw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQsIE5TSW50ZWdlciBkZXB0aCkKICAgICAgICAgX2FkZFF1b3RlRm9yRWxlbWVu
dChlbGVtZW50LCBZRVMsIF9xdW90ZUxldmVsKyspOwogICAgIH0gZWxzZSBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KGVs
ZW1lbnQpKSB7Ci0gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KTsKICAg
ICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQudHlwZSgpID09ICJ0ZXh0IikgewogICAgICAgICAg
ICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSgpOwogICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3RoXSA+IDApCkBAIC0yMDUyLDcgKzIwNTIs
NyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudChFbGVtZW50JiBlbGVtZW50
LCBOU0ludGVnZXIgZGVwdGgpCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFz
VGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKICAgICAgICAgaWYgKGlzSFRNTFRleHRBcmVhRWxlbWVu
dChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dEFyZWFF
bGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgSFRN
TFRleHRBcmVhRWxlbWVudCYgdGV4dEFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRBcmVh
RWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB0ZXh0QXJl
YUVsZW1lbnQudmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3Ro
XSA+IDApCiAgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAwYWFjYWQ0NTdmMDUwYjA0MmVm
YzZjYWMwNDhkNTdiZmY4Y2QwODdjLi5lMGViMzY5YzI0M2IwMGYyZDg0MjhjMDAyZTA0N2I2ODNl
OWRkZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0xODEs
MTIgKzE4MSwxMiBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNl
V3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgICAgICByZXR1cm47CiAK
ICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNl
ZEVsZW1lbnQoKTsKLSAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGZvY3VzZWRFbGVtZW50LT5o
YXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCAoZm9jdXNlZEVsZW1lbnQtPmhhc1RhZ05hbWUoaW5w
dXRUYWcpICYmCi0gICAgICAgICh0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNlZEVsZW1lbnQpLT5p
c1RleHRGaWVsZCgpIHx8Ci0gICAgICAgICB0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNlZEVsZW1l
bnQpLT5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKKyAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlz
SFRNTFRleHRBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkgfHwgKGlzSFRNTElucHV0RWxlbWVu
dChmb2N1c2VkRWxlbWVudCkKKyAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQorICAgICAgICAgICAgfHwgZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsK
ICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdG9IVE1MRWxlbWVudChmb2N1c2VkRWxlbWVudCktPnNl
dEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKKyAgICAgICAgdG9IVE1MRWxlbWVudCgq
Zm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKICAgICAg
ICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmMyMmJmZTI4YTEw
NGViYWYxNTQ2MDFkZmU4Yzk4ODliMmYyMWVkZC4uNDNlNjk1NzM0MGFkYmU0NTZiZmNiZmNiMzQ1
ZmM3MGM4YmU0ODgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzQ2LDcgKzc0
Niw3IEBAIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSogbm9kZSkKICAgICBpZiAoIWlzSFRN
TERpdkVsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxEaXZF
bGVtZW50JiBlbGVtZW50ID0gdG9IVE1MRGl2RWxlbWVudCgqbm9kZSk7CisgICAgSFRNTERpdkVs
ZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRGl2RWxlbWVudD4oKm5vZGUpOwogICAgIGlm
IChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCmluZGV4IDJlMmQ5YmQzYjBhM2RiZTRjODIy
NmU2MDk1Yjc3YjBhMDgwZDAyOGQuLmVhOTEzMTE4YTA5N2MzZDAyYjNkY2YzNjgwMTE4MzAwOGI4
MWYxNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCkBAIC0yMjgsNyAr
MjI4LDcgQEAgVmVjdG9yPENvbG9yPiBDb2xvcklucHV0VHlwZTo6c3VnZ2VzdGlvbnMoKSBjb25z
dAogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRhdGFMaXN0
KCk7CiAgICAgaWYgKGRhdGFMaXN0KSB7CiAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
b3B0aW9ucyA9IGRhdGFMaXN0LT5vcHRpb25zKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KG9wdGlv
bnMtPml0ZW0oaSkpOyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgSFRNTE9w
dGlvbkVsZW1lbnQqIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihvcHRpb25z
LT5pdGVtKGkpKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1ZhbGlkVmFs
dWUob3B0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIENvbG9yIGNvbG9yKG9wdGlvbi0+dmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDM1ZTMyZDM4MTRlMDdjMGExYWY2MzExMDIw
ODFmNGU3MjhhOWM3M2YuLmQ2ZjE0ZDczNTM1MzIzNjkxZmM5NmY4YjBmOGZjZjNiMzg2ODhmODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCkBAIC0z
MDMsNyArMzAzLDcgQEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6bG9hZERvY3Vt
ZW50VGVtcGxhdGUoKQogICAgIGVsc2UgaWYgKCFpc0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVt
ZW50LmdldCgpKSkKICAgICAgICAgTE9HX0VSUk9SKCJFbGVtZW50IG9mIGlkIFwiZnRwRGlyZWN0
b3J5VGFibGVcIiBpcyBub3QgYSB0YWJsZSBlbGVtZW50Iik7CiAgICAgZWxzZSAKLSAgICAgICAg
bV90YWJsZUVsZW1lbnQgPSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50LmdldCgpKTsK
KyAgICAgICAgbV90YWJsZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pih0YWJs
ZUVsZW1lbnQuZ2V0KCkpOwogCiAgICAgLy8gQmFpbCBpZiB3ZSBmb3VuZCB0aGUgdGFibGUgZWxl
bWVudAogICAgIGlmIChtX3RhYmxlRWxlbWVudCkKQEAgLTMxMSw3ICszMTEsNyBAQCBib29sIEZU
UERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAKICAgICAv
LyBPdGhlcndpc2UgY3JlYXRlIG9uZSBtYW51YWxseQogICAgIHRhYmxlRWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKLSAgICBtX3RhYmxlRWxlbWVu
dCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQuZ2V0KCkpOworICAgIG1fdGFibGVF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50LmdldCgpKTsK
ICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCAiZnRw
RGlyZWN0b3J5VGFibGUiKTsKIAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSB0YWJsZSBl
bGVtZW50LCBsZXRzIHRyeSB0byBhcHBlbmQgb3VyIG93biB0byB0aGUgYm9keQpAQCAtMzM2LDcg
KzMzNiw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZUJhc2ljRG9j
dW1lbnQoKQogICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKGJvZHlFbGVtZW50LCBJR05PUkVf
RVhDRVBUSU9OKTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBkb2N1bWVu
dCgpLT5jcmVhdGVFbGVtZW50KHRhYmxlVGFnLCBmYWxzZSk7Ci0gICAgbV90YWJsZUVsZW1lbnQg
PSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50LmdldCgpKTsKKyAgICBtX3RhYmxlRWxl
bWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlRWxlbWVudC5nZXQoKSk7CiAg
ICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgImZ0cERp
cmVjdG9yeVRhYmxlIik7CiAgICAgbV90YWJsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OnN0eWxlQXR0ciwgIndpZHRoOjEwMCUiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDQ0ZWUwNTA3YWQ3NWU0NmY2NGY1YThhZTJh
MGYwNDdkODEwYjA2NzUuLjlkZjQwNTk4OTI0OThjZWRjZjIzNmRjNDZhY2VhM2RhMTAzZDExYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKQEAg
LTk2LDEwICs5NiwxMCBAQCBIVE1MRm9ybUVsZW1lbnQqIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
ZmluZEFzc29jaWF0ZWRGb3JtKGNvbnN0IEhUTUxFbGVtZW50KiBlbAogICAgICAgICAvLyB0aGUg
Zmlyc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVxdWFsIHRv
CiAgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0IHRoZSBy
ZXN1bHQgb2YKICAgICAgICAgLy8gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRo
ZSBnaXZlbiBlbGVtZW50LgotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSAwOwor
ICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSBudWxscHRyOwogICAgICAgICBFbGVt
ZW50KiBuZXdGb3JtQ2FuZGlkYXRlID0gZWxlbWVudC0+dHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5
SWQoZm9ybUlkKTsKICAgICAgICAgaWYgKG5ld0Zvcm1DYW5kaWRhdGUgJiYgaXNIVE1MRm9ybUVs
ZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSkpCi0gICAgICAgICAgICBuZXdGb3JtID0gdG9IVE1MRm9y
bUVsZW1lbnQobmV3Rm9ybUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBuZXdGb3JtID0gZG93bmNh
c3Q8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0dXJuIG5l
d0Zvcm07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3Bw
CmluZGV4IGYxNjBhMmI4MWQxNDY0NjlkMWNlYWNmMmJmYTg5ZDljNTJiMTk4NDEuLjM0YWZlYjlm
ODlmZDNmMjM4MTk4NDU0N2M3MDI0NzMwNWI4ZDM4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNjEsMTYgKzE2MSwxNiBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2
ZW50KQogICAgIGlmICghaXNIVE1MSW1hZ2VFbGVtZW50KHRhcmdldCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHRvSFRNTEltYWdlRWxl
bWVudCh0YXJnZXQpOwotICAgIGlmICghaW1hZ2VFbGVtZW50IHx8ICFpbWFnZUVsZW1lbnQtPmlz
U2VydmVyTWFwKCkpCisgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2VFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTEltYWdlRWxlbWVudD4oKnRhcmdldCk7CisgICAgaWYgKCFpbWFnZUVsZW1lbnQuaXNT
ZXJ2ZXJNYXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpbWFnZUVsZW1lbnQtPnJl
bmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKQor
ICAgIGlmICghaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkgfHwgIWltYWdlRWxlbWVudC5yZW5kZXJl
cigpLT5pc1JlbmRlckltYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJJbWFnZSog
cmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAg
UmVuZGVySW1hZ2UmIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZSgqaW1hZ2VFbGVtZW50LnJlbmRl
cmVyKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3MgdHJ1ZSBm
b3IgdXNlVHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24gPSByZW5k
ZXJlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFn
ZVgoKSwgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVkoKSkpOworICAgIEZsb2F0UG9pbnQgYWJz
b2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KHRvTW91
c2VFdmVudChldmVudCktPnBhZ2VYKCksIHRvTW91c2VFdmVudChldmVudCktPnBhZ2VZKCkpKTsK
ICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJzb2x1dGVQ
b3NpdGlvbi55KCk7CiAgICAgdXJsLmFwcGVuZCgnPycpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXJlYUVsZW1lbnQuY3BwCmluZGV4IGIzNzk1NmMyMWJjNGE3NTZiMjc5OWE5YmRhMjE1YTBhN2Zh
YjUyYTMuLmRkODRiZGM2ODQwYzdhYjc2OTQxM2ZmZDFmMWEzNzNjMTY5NTc0MDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKQEAgLTE4Myw5ICsxODMsOSBAQCBIVE1M
SW1hZ2VFbGVtZW50KiBIVE1MQXJlYUVsZW1lbnQ6OmltYWdlRWxlbWVudCgpIGNvbnN0CiB7CiAg
ICAgTm9kZSogbWFwRWxlbWVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1hcEVsZW1lbnQg
fHwgIWlzSFRNTE1hcEVsZW1lbnQobWFwRWxlbWVudCkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxlbWVudCht
YXBFbGVtZW50KS0+aW1hZ2VFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNYXBF
bGVtZW50PigqbWFwRWxlbWVudCkuaW1hZ2VFbGVtZW50KCk7CiB9CiAKIGJvb2wgSFRNTEFyZWFF
bGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCAzMzI3YWJiYjNhYjliZjI1ZGNiYWZk
YWZhN2U5MzVhOGFjZGVhY2Y3Li45MWJiMjgxZjMxMjRjODgyYTRmNzcwNTcyYTIyNzBkMjVjOTg5
MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMTkxLDEwICsx
OTEsMTAgQEAgaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rp
b24mIGh0bWxDb2xsZWN0aW9uLCBFbGVtZW50JiBlbGUKICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6
CiAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKTsKICAgICBjYXNl
IFNlbGVjdGVkT3B0aW9uczoKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShvcHRp
b25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkuc2VsZWN0ZWQoKTsKKyAgICAg
ICAgcmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KGVsZW1lbnQpLnNlbGVjdGVkKCk7CiAgICAgY2FzZSBEYXRhTGlzdE9wdGlv
bnM6Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewotICAgICAg
ICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCk7CisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7CisgICAg
ICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFvcHRpb24uaXNEaXNhYmxlZEZvcm1D
b250cm9sKCkgJiYgIW9wdGlvbi52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIGlubGluZSBib29sIGlz
TWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBodG1sQ29sbGVjdGlvbiwgRWxl
bWVudCYgZWxlCiAgICAgY2FzZSBNYXBBcmVhczoKICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFz
VGFnTmFtZShhcmVhVGFnKTsKICAgICBjYXNlIERvY0FwcGxldHM6Ci0gICAgICAgIHJldHVybiBl
bGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVj
dFRhZykgJiYgdG9IVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KS5jb250YWluc0phdmFBcHBsZXQo
KSk7CisgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoaXNI
VE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4o
ZWxlbWVudCkuY29udGFpbnNKYXZhQXBwbGV0KCkpOwogICAgIGNhc2UgRG9jRW1iZWRzOgogICAg
ICAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFnKTsKICAgICBjYXNlIERvY0xp
bmtzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBmNDY5ZWM1MjM3NDRiNzVm
N2EyZDM0YmQwNDk1NzQxMjgyNzk1NjdjLi5jODcwYzMwNDBhYzlhYzJlM2NiODQ0YmZiZTE3YTcx
NGNiNTA3MGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzc5LDcgKzM3
OSw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNv
bnN0CiAKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwog
ICAgIGlmIChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxE
b2N1bWVudCYgaHRtbERvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpOworICAgICAg
ICBjb25zdCBIVE1MRG9jdW1lbnQmIGh0bWxEb2N1bWVudCA9IGRvd25jYXN0PEhUTUxEb2N1bWVu
dD4oZG9jdW1lbnQpOwogICAgICAgICByZXR1cm4gaHRtbERvY3VtZW50LmluRGVzaWduTW9kZSgp
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjgsNyArNDI4LDcgQEAgdm9pZCBIVE1M
RWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHRoaXM7CiAjaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIGlmIChoYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkK
LSAgICAgICAgICAgIGNvbnRhaW5lciA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0aGlzKS0+Y29u
dGVudCgpOworICAgICAgICAgICAgY29udGFpbmVyID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKICNlbmRpZgogICAgICAgICByZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQoKmNvbnRhaW5lciwgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAgICAgfQpA
QCAtOTIwLDExICs5MjAsMTEgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9u
YWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb24KIFRleHREaXJlY3Rp
b24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlKSBjb25zdAogewogICAgIGlmIChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
KCp0aGlzKSkgewotICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dEVsZW1l
bnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0X2Nhc3Q8SFRNTEVsZW1lbnQq
Pih0aGlzKSk7CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihjb25zdF9jYXN0PEhUTUxF
bGVtZW50Jj4oKnRoaXMpKTsKICAgICAgICAgYm9vbCBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eTsK
LSAgICAgICAgVUNoYXJEaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRleHRFbGVtZW50LT52YWx1
ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7Cisg
ICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVudC52YWx1ZSgp
LmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7CiAgICAg
ICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQotICAgICAgICAgICAgKnN0cm9u
Z0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/IHRleHRF
bGVtZW50IDogbnVsbHB0cjsKKyAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHRO
b2RlID0gaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPyAmdGV4dEVsZW1lbnQgOiBudWxscHRyOwog
ICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/IExUUiA6
IFJUTDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmlu
ZGV4IGNhMjU2NGEyMGQyYTJiNjExMzE4ODdiMjhjNGEyZmFlMTRlZGJlNTYuLjM2NDJiODVjYjZj
YjU3Mjg1ZDZjZDA3ZTVhYjNlOWE1NDQxMWZhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RW1iZWRFbGVtZW50LmNwcApAQCAtMTg4LDEyICsxODgsMTIgQEAgYm9vbCBIVE1MRW1iZWRFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogICAgIC8v
IElmIG15IHBhcmVudCBpcyBhbiA8b2JqZWN0PiBhbmQgaXMgbm90IHNldCB0byB1c2UgZmFsbGJh
Y2sgY29udGVudCwgSQogICAgIC8vIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgZ2V0IGEgcmVu
ZGVyZXIuCi0gICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAocCAm
JiBwLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgaWYgKCFwLT5yZW5kZXJlcigp
KQorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBpZiAocGFy
ZW50ICYmIGlzSFRNTE9iamVjdEVsZW1lbnQocGFyZW50KSkgeworICAgICAgICBpZiAoIXBhcmVu
dC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF0
b0hUTUxPYmplY3RFbGVtZW50KHApLT51c2VGYWxsYmFja0NvbnRlbnQoKSkgewotICAgICAgICAg
ICAgQVNTRVJUKCFwLT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOworICAgICAgICBp
ZiAoIWRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PigqcGFyZW50KS51c2VGYWxsYmFja0NvbnRl
bnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFwYXJlbnQtPnJlbmRlcmVyKCktPmlzRW1iZWRk
ZWRPYmplY3QoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRleCBkYjUw
YjI3YWYzYzBmMzlmMmM4NDY2MjNlNDVhZjJhNDEyYTk3ZmIzLi4wNDYxOWI1ODc4YzM1YzAxYThk
YjQ4YmJhMTdmMjVhN2YyZGIzYjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGaWVsZFNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1l
bnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKCkgY29uc3QKIAogICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRNTEZpZWxkU2V0
RWxlbWVudCY+KCp0aGlzKSkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmpl
Y3RUYWcpKQotICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxP
YmplY3RFbGVtZW50KGVsZW1lbnQpKTsKKyAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRz
LmFwcGVuZCgmZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICAgICAg
ZWxzZSBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgbV9h
c3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVu
dCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCmluZGV4IGEzMWY5MjZlN2E3ZmNkZTVlZDA5OTZmMjJlYjViYTUzNTA4M2Q4MTkuLjEy
YWNmYjNhYzU4MmZlYmI1NDA2OWRhNGYyYjY3MzU0YmVjMDNkMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBA
IGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0
QW5jZXN0b3IoKSBjb25zdAogICAgIEVsZW1lbnQqIHByZXZpb3VzQW5jZXN0b3IgPSBudWxscHRy
OwogICAgIGZvciAoRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnRFbGVtZW50KCk7IGFuY2VzdG9y
OyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKGlz
SFRNTEZpZWxkU2V0RWxlbWVudChhbmNlc3RvcikgJiYgYW5jZXN0b3ItPmZhc3RIYXNBdHRyaWJ1
dGUoZGlzYWJsZWRBdHRyKSkgewotICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmll
bGRTZXRBbmNlc3RvciA9IHRvSFRNTEZpZWxkU2V0RWxlbWVudCgqYW5jZXN0b3IpOworICAgICAg
ICAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmllbGRTZXRBbmNlc3RvciA9IGRvd25jYXN0PEhU
TUxGaWVsZFNldEVsZW1lbnQ+KCphbmNlc3Rvcik7CiAgICAgICAgICAgICBib29sIGlzSW5GaXJz
dExlZ2VuZCA9IHByZXZpb3VzQW5jZXN0b3IgJiYgaXNIVE1MTGVnZW5kRWxlbWVudChwcmV2aW91
c0FuY2VzdG9yKSAmJiBwcmV2aW91c0FuY2VzdG9yID09IGZpZWxkU2V0QW5jZXN0b3IubGVnZW5k
KCk7CiAgICAgICAgICAgICByZXR1cm4gIWlzSW5GaXJzdExlZ2VuZDsKICAgICAgICAgfQpAQCAt
MTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9mb2N1cyhIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBlbGVtZW50KQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBzZXQgb2YgaGFz
VGFnTmFtZSBjaGVja3MgYmUgcmVwbGFjZWQgYnkgYQogICAgIC8vIHZpcnR1YWwgbWVtYmVyIGZ1
bmN0aW9uPwogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiAhdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLT5pc0lucHV0VHlwZUhpZGRlbigpOwor
ICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5pc0lu
cHV0VHlwZUhpZGRlbigpOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGtleWdl
blRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24uY3BwCmluZGV4IDc3YWQ3NDIzOGYyZDQzMTBhMmNlZDkyNDhjOGMyYWNjMDY1YjAwZTcu
LjY4YzFkZWVmMjQ3NzMyNzMxZjdlMDUzNmEwMzAwNzVkZGYzZjk3ZmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCkBAIC01Niwx
NCArNTYsMTQgQEAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBIVE1MRm9y
bUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGUKIHsKICAgICBBU1NFUlQoaXNIVE1M
Rm9ybUVsZW1lbnQob3duZXJOb2RlKCkpIHx8IG93bmVyTm9kZSgpLmhhc1RhZ05hbWUoZmllbGRz
ZXRUYWcpKTsKICAgICBpZiAoaXNIVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKQotICAgICAg
ICByZXR1cm4gdG9IVE1MRm9ybUVsZW1lbnQob3duZXJOb2RlKCkpLmFzc29jaWF0ZWRFbGVtZW50
cygpOwotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQob3duZXJOb2RlKCkpLmFzc29j
aWF0ZWRFbGVtZW50cygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50
Pihvd25lck5vZGUoKSkuYXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG93bmVyTm9kZSgpKS5hc3NvY2lhdGVkRWxlbWVudHMoKTsK
IH0KIAogY29uc3QgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiYgSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb246OmZvcm1JbWFnZUVsZW1lbnRzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNIVE1M
Rm9ybUVsZW1lbnQob3duZXJOb2RlKCkpKTsKLSAgICByZXR1cm4gdG9IVE1MRm9ybUVsZW1lbnQo
b3duZXJOb2RlKCkpLmltYWdlRWxlbWVudHMoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZv
cm1FbGVtZW50Pihvd25lck5vZGUoKSkuaW1hZ2VFbGVtZW50cygpOwogfQogCiBzdGF0aWMgdW5z
aWduZWQgZmluZEZvcm1Bc3NvY2lhdGVkRWxlbWVudChjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGM4OGVhYzk1MWRlMDI5M2E1NzE5Nzdh
YWNhYjIwZjcyN2Y5ZGMzMGEuLjQ1ODliNDc3NzU3ZjZkYjJhM2IwM2M4MmI1ZjYzNWE1OWM0OWQ4
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTMxOCw3ICsz
MTgsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0VGV4dEZpZWxkVmFsdWVzKFN0cmluZ1Bh
aXJWZWN0b3ImIGZpZWxkTmFtZXNBbmRWYWx1ZXMpCiAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVt
ZW50ID0gY29udHJvbC5hc0hUTUxFbGVtZW50KCk7CiAgICAgICAgIGlmICghaXNIVE1MSW5wdXRF
bGVtZW50KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQmIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOworICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1l
bnQpOwogICAgICAgICBpZiAoIWlucHV0LmlzVGV4dEZpZWxkKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgZmllbGROYW1lc0FuZFZhbHVlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
aW5wdXQubmFtZSgpLnN0cmluZygpLCBpbnB1dC52YWx1ZSgpKSk7CkBAIC03NDUsNyArNzQ1LDcg
QEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVzTWFwKEZv
cm1OYW1lZEl0ZW0qIGl0ZW0pIGNvbnN0CiAgICAgfQogCiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oZWxlbWVudC5oYXNUYWdOYW1lKGltZ1RhZykpOwotICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1faW1hZ2VFbGVtZW50cy5maW5kKCZ0b0hUTUxJbWFn
ZUVsZW1lbnQoZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihtX2ltYWdlRWxlbWVudHMuZmluZCgmZG93bmNhc3Q8SFRNTEltYWdlRWxl
bWVudD4oZWxlbWVudCkpICE9IG5vdEZvdW5kKTsKIH0KICNlbHNlCiBpbmxpbmUgdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVzTWFwKEZvcm1OYW1lZEl0ZW0q
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggNzM4
YTkxOThlNzkxZjc5MWUyNGYyN2VmNmIwZGRmZDA0MmM1OWEzZi4uMjhjZjMwMjdiMWM2YTI4OWVj
YTBhNjQ5ZGQ2MDA1YTBiNGRkMzE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuY3BwCkBAIC0xODMsMTMgKzE4MywxMyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cgog
ICAgICAgICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICAgICAgYm9vbCB3aWxsSGF2
ZU5hbWUgPSAhdmFsdWUuaXNOdWxsKCk7CiAgICAgICAgICAgICBpZiAoaGFzTmFtZSgpICE9IHdp
bGxIYXZlTmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHRvSFRNTERvY3Vt
ZW50KCZ0aGlzLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQmIGRv
Y3VtZW50ID0gZG93bmNhc3Q8SFRNTERvY3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKICAgICAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0cmlidXRl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvY3VtZW50LT5hZGREb2N1bWVudE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAq
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGREb2N1bWVudE5hbWVk
SXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqaWQu
aW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVE
b2N1bWVudE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRl
ci5jcHAKaW5kZXggMTg3OWRiYzI5NTA0ZWMyMzEzNDc5MmY3MzViNjUwMTgxMmE2YThkMi4uZmIz
NGM4Y2NkOTIwNjZmNGUwZjAzMzZhODFlNzVkMzIxMmNkNWM1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxJbWFnZUxv
YWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQogICAgIH0KIAogICAgIGlmIChs
b2FkRXJyb3IgJiYgaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KCkpKQotICAgICAgICB0b0hU
TUxPYmplY3RFbGVtZW50KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CisgICAg
ICAgIGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZhbGxiYWNr
Q29udGVudCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAppbmRleCBhOGViYWE5ZDM2ZDYyYTU2ZjA3OTJhMzhlZWFjNWRkM2I5MzgxOTU4Li5lMmQ1NWUz
MzUxNDViYTI5OWNiNzIxZjdkOGRhNzdkNmNiZGU2NTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTE1MTUsMTggKzE1MTUsMTYgQEAgSFRNTEVsZW1lbnQq
IEhUTUxJbnB1dEVsZW1lbnQ6Omxpc3QoKSBjb25zdAogSFRNTERhdGFMaXN0RWxlbWVudCogSFRN
TElucHV0RWxlbWVudDo6ZGF0YUxpc3QoKSBjb25zdAogewogICAgIGlmICghbV9oYXNOb25FbXB0
eUxpc3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGxpc3RBdHRy
KSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWVsZW1l
bnQtPmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAo
IWVsZW1lbnQgfHwgIWlzSFRNTERhdGFMaXN0RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50KGVsZW1lbnQp
OworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50KTsKIH0K
IAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZXNldExpc3RBdHRyaWJ1dGVUYXJnZXRPYnNlcnZl
cigpCkBAIC0xODU1LDcgKzE4NTMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNldHVwRGF0
ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyhEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzJgogI2lmIEVO
QUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGlmIChIVE1MRGF0YUxpc3RFbGVtZW50KiBkYXRh
TGlzdCA9IHRoaXMtPmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQob3B0
aW9ucy0+aXRlbShpKSk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBIVE1M
T3B0aW9uRWxlbWVudCogb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KG9wdGlv
bnMtPml0ZW0oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghaXNWYWxpZFZhbHVlKG9wdGlv
bi0+dmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBwYXJh
bWV0ZXJzLnN1Z2dlc3Rpb25WYWx1ZXMuYXBwZW5kKHNhbml0aXplVmFsdWUob3B0aW9uLT52YWx1
ZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCmluZGV4IDcx
NGJkYjJlMWJkOGNhYjNhOGY1YmUxYmNjNzFjZDE0MzI0N2JkODQuLjFmNWQ2N2ZjOTQwYzU5M2Uy
ZGI2ZTg2ODk5MWFkNDMzMjZiNmIyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEtleWdlbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdl
bkVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxlbWVudDo6
c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIEhUTUxTZWxlY3RF
bGVtZW50KiBIVE1MS2V5Z2VuRWxlbWVudDo6c2hhZG93U2VsZWN0KCkgY29uc3QKIHsKICAgICBT
aGFkb3dSb290KiByb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHJldHVybiByb290
ID8gdG9IVE1MU2VsZWN0RWxlbWVudChyb290LT5maXJzdENoaWxkKCkpIDogMDsKKyAgICByZXR1
cm4gcm9vdCA/IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihyb290LT5maXJzdENoaWxkKCkp
IDogbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TGVnZW5kRWxlbWVudC5jcHAKaW5kZXggNTk3M2JjMjA3MzlkYWFlMmRkNDQyMzRhMGNjZTE2MWI5
YmUzMGZjYi4uMmZiNGQyNTBmMjUxYjBmZjk1MjlmODdhOGU4ODc4MzFhZDdlZTQyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKQEAgLTc5LDEwICs3OSwxMCBA
QCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0
CiAgICAgLy8gaXRzIHBhcmVudCwgdGhlbiB0aGUgZm9ybSBhdHRyaWJ1dGUgbXVzdCByZXR1cm4g
dGhlIHNhbWUgdmFsdWUgYXMgdGhlCiAgICAgLy8gZm9ybSBhdHRyaWJ1dGUgb24gdGhhdCBmaWVs
ZHNldCBlbGVtZW50LiBPdGhlcndpc2UsIGl0IG11c3QgcmV0dXJuIG51bGwuCiAgICAgQ29udGFp
bmVyTm9kZSogZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFmaWVsZHNldCB8fCAh
ZmllbGRzZXQtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIWZpZWxkc2V0IHx8ICFpc0hUTUxGaWVsZFNldEVsZW1lbnQoZmllbGRzZXQpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQo
ZmllbGRzZXQpLT5mb3JtKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1l
bnQ+KCpmaWVsZHNldCkuZm9ybSgpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDNkMjFjNTJhZmE4M2IzMjY0Nzhl
MTZjNGQ5YTJiYzU3YWNkODI4NmEuLmQzNjhiYWRhNWRhMGJhNjJjNjUxYTQ4MTY3NDkzZWI3OTJm
MjU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMzg3
Niw3ICszODc2LDcgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGls
ZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyoga2UKICAgICB9CiAKICAgICBVUkwg
bWVkaWFVUkw7Ci0gICAgSFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSA9IDA7CisgICAgSFRNTFNv
dXJjZUVsZW1lbnQqIHNvdXJjZSA9IG51bGxwdHI7CiAgICAgU3RyaW5nIHR5cGU7CiAgICAgU3Ry
aW5nIHN5c3RlbTsKICAgICBib29sIGxvb2tpbmdGb3JTdGFydE5vZGUgPSBtX25leHRDaGlsZE5v
ZGVUb0NvbnNpZGVyOwpAQCAtMzg5Nyw3ICszODk3LDcgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6
OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyog
a2UKICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpICE9IHRoaXMpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBzb3VyY2UgPSB0b0hUTUxTb3VyY2VFbGVtZW50KCZub2RlKTsK
KyAgICAgICAgc291cmNlID0gZG93bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+KCZub2RlKTsKIAog
ICAgICAgICAvLyBJZiBjYW5kaWRhdGUgZG9lcyBub3QgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUsIG9y
IGlmIGl0cyBzcmMgYXR0cmlidXRlJ3MgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZyAuLi4ganVt
cCBkb3duIHRvIHRoZSBmYWlsZWQgc3RlcCBiZWxvdwogICAgICAgICBtZWRpYVVSTCA9IHNvdXJj
ZS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0cik7CkBAIC00ODgzLDkgKzQ4ODMsOSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5lbnRlcmVkRnVsbHNjcmVl
bigpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpc0hUTUxWaWRlb0VsZW1lbnQodGhp
cykpIHsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogYXNWaWRlbyA9IHRvSFRNTFZpZGVvRWxl
bWVudCh0aGlzKTsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgYXNWaWRlbyA9IGRvd25jYXN0
PEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7Ci0gICAgICAg
ICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQoYXNWaWRlbyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnBh
Z2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQoJmFzVmlkZW8pOwogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Vi
a2l0YmVnaW5mdWxsc2NyZWVuRXZlbnQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4IDY2MDE3NDYwYmNhZTI5M2E1ZTQ2
MmQ3YWI4NjdkMTA5M2FiNTU5ZDkuLmZlZjQxZmRkZTNlY2ZkZTlhNDhjNGFjMTRlZWJiOTUyZTE5
YzA2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKQEAg
LTY2LDE0ICs2NiwxNCBAQCBib29sIFdpbmRvd05hbWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hl
cyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdAogYm9vbCBEb2N1bWVudE5h
bWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hlc0lmSWRBdHRyaWJ1dGVNYXRjaChjb25zdCBFbGVt
ZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGZpeCBIVE1MSW1hZ2VF
bGVtZW50IHRvIHVwZGF0ZSB0aGUgaGFzaCBtYXAgZm9yIHVzIHdoZW4gbmFtZSBhdHRyaWJ1dGUg
aGFzIGJlZW4gcmVtb3ZlZC4KLSAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKGFwcGxldFRh
ZykgfHwgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIHRvSFRNTE9iamVjdEVsZW1l
bnQoZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0oKSkKKyAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgKGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNh
c3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCkpCiAgICAgICAg
IHx8IChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5oYXNOYW1lKCkpOwog
fQogCiBib29sIERvY3VtZW50TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZOYW1lQXR0
cmlidXRlTWF0Y2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gaXNIVE1M
Rm9ybUVsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05h
bWUoYXBwbGV0VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYgdG9IVE1M
T2JqZWN0RWxlbWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpKQorICAgICAgICB8fCBlbGVt
ZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50
KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0o
KSkKICAgICAgICAgfHwgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwogfQogCkBAIC04NSw4
ICs4NSw4IEBAIGJvb2wgRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXMoY29u
c3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljCiAgICAgICAgIHJldHVybiBlbGVtZW50
LmdldE5hbWVBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZTsKICAgICBpZiAoZWxlbWVudC5oYXNU
YWdOYW1lKGFwcGxldFRhZykpCiAgICAgICAgIHJldHVybiBlbGVtZW50LmdldE5hbWVBdHRyaWJ1
dGUoKS5pbXBsKCkgPT0gbmFtZSB8fCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkuaW1wbCgpID09
IG5hbWU7Ci0gICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICBy
ZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8IGVsZW1l
bnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSkgJiYgdG9IVE1MT2JqZWN0RWxlbWVu
dChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpOworICAgIGlmIChpc0hUTUxPYmplY3RFbGVtZW50
KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmlt
cGwoKSA9PSBuYW1lIHx8IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSkg
JiYgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCk7
CiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8IChlbGVtZW50LmdldElk
QXR0cmlidXRlKCkuaW1wbCgpID09IG5hbWUgJiYgZWxlbWVudC5oYXNOYW1lKCkpOwogICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKaW5k
ZXggOTE3N2VhYTMwZGFmOWM5NThhYTcwNGZlN2JhY2ZhZmZmZDg2ZDVhMS4uYzA1YTQwNWZmMDJh
YjI4YWZlNDI0Y2NmMTFmZGZjNmI5ZmZiMWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHAKQEAgLTQzNiwyMiArNDM2LDIyIEBAIHZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7CiAgICAgfQogICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0ZW0gJiYg
aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBI
VE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9IVE1MRG9jdW1lbnQoJnRoaXMtPmRvY3VtZW50KCkp
OworICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERvY3VtZW50
Pih0aGlzLT5kb2N1bWVudCgpKTsKIAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0g
Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIGlmIChpc05hbWVkSXRlbSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+YWRkRG9jdW1l
bnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50
LmFkZERvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW0oKmlk
LmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZURvY3VtZW50
TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFu
YW1lLmlzRW1wdHkoKSAmJiBpZCAhPSBuYW1lKSB7CiAgICAgICAgICAgICBpZiAoaXNOYW1lZEl0
ZW0pCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmFkZERvY3VtZW50TmFtZWRJdGVtKCpuYW1l
LmltcGwoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZERvY3VtZW50TmFt
ZWRJdGVtKCpuYW1lLmltcGwoKSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCksICp0
aGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgq
bmFtZS5pbXBsKCksICp0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2RvY05hbWVkSXRl
bSA9IGlzTmFtZWRJdGVtOwpAQCAtNDY2LDcgKzQ2Niw3IEBAIGJvb2wgSFRNTE9iamVjdEVsZW1l
bnQ6OmNvbnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0CiAgICAgICAgIGlmIChjaGlsZC5oYXNUYWdO
YW1lKHBhcmFtVGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC5nZXROYW1lQXR0cmlidXRl
KCksICJ0eXBlIikKICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxl
dE1JTUVUeXBlKGNoaWxkLmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShvYmplY3RU
YWcpICYmIHRvSFRNTE9iamVjdEVsZW1lbnQoY2hpbGQpLmNvbnRhaW5zSmF2YUFwcGxldCgpKQor
ICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShvYmplY3RUYWcpICYmIGRvd25jYXN0PEhUTUxP
YmplY3RFbGVtZW50PihjaGlsZCkuY29udGFpbnNKYXZhQXBwbGV0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGNoaWxkLmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT3B0R3JvdXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3Vw
RWxlbWVudC5jcHAKaW5kZXggYzBhYjcwZDhlZTY5OTQ3Y2U0YTk5MmM4MTMzYmFjZThlMzEwMzBm
YS4uOTVkNmFiYzFmZWU2M2JlOTA4NzJhMjUwYzBlMzc2NGUwOGMxZTIxOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC04NiwxMCArODYsMTAgQEAg
dm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWMKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6cmVjYWxj
U2VsZWN0T3B0aW9ucygpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9k
ZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxlY3RUYWcp
KQorICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KSkKICAg
ICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVjdCkKLSAg
ICAgICAgdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRlbXMoKTsK
KyAgICAgICAgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3QpLnNldFJlY2FsY0xp
c3RJdGVtcygpOwogfQogCiBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRl
eHQoKSBjb25zdApAQCAtMTA3LDEzICsxMDcsMTMgQEAgU3RyaW5nIEhUTUxPcHRHcm91cEVsZW1l
bnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29uc3QKIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1MT3B0R3Jv
dXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRhaW5lck5v
ZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3Qt
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFpc0hUTUxTZWxl
Y3RFbGVtZW50KHNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgp
OwogICAgIAogICAgIGlmICghc2VsZWN0KQotICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3Qp
OworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KTsKIH0KIAog
dm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggYTZiMTQ3MDU5NjRhNTRmYjE4
ODQwN2ZiNzczMDAwY2Q2N2M2NDg3Ny4uMWFiN2EwNDA4YmY0ZjhhYmNkZGFjZTdjMjFiMWFlNzk5
ZGQwMjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAg
LTI1NywyMyArMjU3LDIzIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdl
ZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogSFRNTERhdGFMaXN0RWxlbWVudCogSFRNTE9w
dGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBmb3IgKENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50IDsgcGFyZW50ID0gcGFy
ZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShkYXRh
bGlzdFRhZykpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MRGF0YUxpc3RFbGVtZW50KHBhcmVu
dCk7CisgICAgICAgIGlmIChpc0hUTUxEYXRhTGlzdEVsZW1lbnQocGFyZW50KSkKKyAgICAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihwYXJlbnQpOwogICAgIH0K
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KICNlbmRpZgogCiBIVE1MU2Vs
ZWN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0
CiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxl
IChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgIHdoaWxlIChz
ZWxlY3QgJiYgIWlzSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KSkKICAgICAgICAgc2VsZWN0ID0g
c2VsZWN0LT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIXNlbGVjdCkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvSFRNTFNlbGVjdEVs
ZW1lbnQoc2VsZWN0KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KHNl
bGVjdCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCmluZGV4IGYxZGY0
YzQxZWYwZGJiNjEyMjBlNTQxOWVjZDAyODE4Yjg1MmYwYWYuLmYyOTIxMmQ1YjZmOWE0NTkyMDBj
MjFiNTllMzM0MDk3ZmYxMjNiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRp
b25zQ29sbGVjdGlvbi5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgdm9pZCBIVE1MT3B0aW9uc0NvbGxl
Y3Rpb246OmFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50LCBpbnQgaW5k
ZXgKICAgICBlYyA9IDA7CiAKICAgICBpZiAoaW5kZXggPT0gLTEgfHwgdW5zaWduZWQoaW5kZXgp
ID49IGxlbmd0aCgpKQotICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlvbiwgMCwg
ZWMpOworICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlvbiwgbnVsbHB0ciwgZWMp
OwogICAgIGVsc2UKLSAgICAgICAgc2VsZWN0RWxlbWVudCgpLmFkZChuZXdPcHRpb24sIHRvSFRN
TE9wdGlvbkVsZW1lbnQoaXRlbShpbmRleCkpLCBlYyk7CisgICAgICAgIHNlbGVjdEVsZW1lbnQo
KS5hZGQobmV3T3B0aW9uLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbShpbmRleCkp
LCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25zQ29sbGVjdGlvbi5oCmluZGV4IDFjNWU2ODg5YmY4NTlhYzk1OTlmZTBmNzM4MDEyMWRl
YTQ1MThkNmMuLjljNzkyNTY1ZTE0YWE1MzJhODZjOTkzOTBlYzA0NTRlYjQ3OGE4ODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApAQCAtMzcsOCArMzcs
OCBAQCBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgSFRNTENvbGxl
Y3Rpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPEhUTUxPcHRpb25zQ29sbGVjdGlv
bj4gY3JlYXRlKEhUTUxTZWxlY3RFbGVtZW50JiwgQ29sbGVjdGlvblR5cGUpOwogCi0gICAgSFRN
TFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQoKSB7IHJldHVybiB0b0hUTUxTZWxlY3RFbGVt
ZW50KG93bmVyTm9kZSgpKTsgfQotICAgIGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChvd25lck5vZGUoKSk7
IH0KKyAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIHsgcmV0dXJuIGRvd25j
YXN0PEhUTUxTZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KKyAgICBjb25zdCBIVE1MU2Vs
ZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KIAogICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8
SFRNTE9wdGlvbkVsZW1lbnQ+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhZGQoUGFzc1Jl
ZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggNDk2
ZWQ1YjAwYTBiYzRiODYxZjFlZjVmM2ZlYTM2YTlkMWIyNDgzMC4uOThmNWM4NWMyNmZhYTIzMGM5
MzNhZDg2OTM2M2ZkM2Q4NWJmMTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC00MTcsMTEgKzQxNywxMSBAQCBzdGF0aWMgdm9pZCBh
ZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oSFRNTFBsdWdJbkltYWdl
RWxlbWVudExpcwogICAgICAgICBpZiAobm9kZS0+aXNQbHVnaW5FbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luRWxl
bWVudChub2RlKTsKICAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJbkltYWdl
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1
Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5vZGUpOwotICAgICAg
ICAgICAgICAgIGNvbnN0IFVSTCYgbG9hZGVkVVJMID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2Fk
ZWRVcmwoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3RoZXJNaW1lVHlwZSA9IHBsdWdJbklt
YWdlRWxlbWVudC0+bG9hZGVkTWltZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICAgICAgY29uc3QgVVJMJiBsb2FkZWRVUkwg
PSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCk7CisgICAgICAgICAgICAgICAgU3RyaW5n
IG90aGVyTWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkTWltZVR5cGUoKTsKICAg
ICAgICAgICAgICAgICBpZiAocGx1Z0luT3JpZ2luID09IGxvYWRlZFVSTC5ob3N0KCkgJiYgbWlt
ZVR5cGUgPT0gb3RoZXJNaW1lVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcGx1Z0luTGlzdC5h
cHBlbmQocGx1Z0luSW1hZ2VFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcGx1Z0luTGlz
dC5hcHBlbmQoJnBsdWdJbkltYWdlRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IDQx
NDI3NTk3ODBmMGRiYmI5MjI3OTc2NDUxMTQxMzUzNDMyNWEyNjAuLjQ4MmI4MmY4NWFjNjIyMGUz
OTliZTI4Y2IzNGQyNGMxYzFhMzJkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCkBAIC0xNDksOCArMTQ5LDggQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6
aGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpIGNvbnN0CiAgICAgQVNTRVJUKGxpc3RJbmRleCA+
PSAwKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVt
cygpW2xpc3RJbmRleF0pOwotICAgIHJldHVybiAhbGlzdEluZGV4ICYmIG9wdGlvbi0+dmFsdWUo
KS5pc0VtcHR5KCk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zKClbbGlzdEluZGV4XSk7CisgICAgcmV0dXJuICFs
aXN0SW5kZXggJiYgb3B0aW9uLnZhbHVlKCkuaXNFbXB0eSgpOwogfQogCiBTdHJpbmcgSFRNTFNl
bGVjdEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKQEAgLTI1MSw3ICsyNTEsNyBA
QCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKICAgICBmb3IgKGF1
dG8qIGl0ZW0gOiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVu
dCgqaXRlbSkpIHsKLSAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSB0b0hU
TUxPcHRpb25FbGVtZW50KCppdGVtKTsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBv
cHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOwogICAgICAgICAgICAg
aWYgKG9wdGlvbi5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFs
dWUoKTsKICAgICAgICAgfQpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAgdW5zaWduZWQgb3B0aW9uSW5k
ZXggPSAwOwogICAgIGZvciAoYXV0byogaXRlbSA6IGxpc3RJdGVtcygpKSB7CiAgICAgICAgIGlm
IChpc0hUTUxPcHRpb25FbGVtZW50KCppdGVtKSkgewotICAgICAgICAgICAgaWYgKHRvSFRNTE9w
dGlvbkVsZW1lbnQoKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pLnZhbHVlKCkgPT0gdmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG9wdGlvbkluZGV4KTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC02MDUsNyArNjA1LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IGl0ZW1zW2ldOwotICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQoaXNIVE1M
T3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5z
ZWxlY3RlZCgpKTsKKyAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlzSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVs
ZW1lbnQpLT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTYyMCw3ICs2MjAsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChpbnQgaW5k
ZXgpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fY2FjaGVkU3Rh
dGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkg
JiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSk7CisgICAgICAgIG1f
Y2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLT5zZWxlY3Rl
ZCgpKTsKICAgICB9CiB9CiAKQEAgLTY0NCwxNSArNjQ0LDE1IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVjdE90aGVyT3B0aW9ucykK
ICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFpc0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpIHx8IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVk
Rm9ybUNvbnRyb2woKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChpID49
IHN0YXJ0ICYmIGkgPD0gZW5kKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVt
ZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0
ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAoZGVzZWxlY3RPdGhl
ck9wdGlvbnMgfHwgaSA+PSBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLnNpemUoKSkK
LSAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3Rh
dGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShtX2NhY2hlZFN0
YXRlRm9yQWN0aXZlU2VsZWN0aW9uW2ldKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRp
b25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShtX2NhY2hlZFN0YXRlRm9yQWN0
aXZlU2VsZWN0aW9uW2ldKTsKICAgICB9CiAKICAgICBzY3JvbGxUb1NlbGVjdGlvbigpOwpAQCAt
Njc2LDcgKzY3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgp
CiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSBpdGVtc1tpXTsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKTsKKyAg
ICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOwogICAgICAgICBp
ZiAoc2VsZWN0ZWQgIT0gbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb25baV0pCiAgICAgICAgICAgICBm
aXJlT25DaGFuZ2UgPSB0cnVlOwogICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbltpXSA9
IHNlbGVjdGVkOwpAQCAtODAyLDE1ICs4MDIsMTUgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMpIGNvbnN0CiAgICAgICAg
ICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlmICh1cGRh
dGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewotICAgICAgICAgICAgICAgIEhUTUxP
cHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGN1cnJlbnQpOworICAg
ICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmICghZmlyc3RPcHRpb24p
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gb3B0aW9uOwotICAgICAgICAgICAg
ICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RP
cHRpb24gPSAmb3B0aW9uOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQoKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTZWxlY3RlZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kU2VsZWN0ZWQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwotICAgICAg
ICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gb3B0aW9uOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9zaXplIDw9IDEgJiYgIWZvdW5kU2VsZWN0ZWQgJiYgIW9wdGlvbi0+aXNEaXNh
YmxlZEZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZCA9
IG9wdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZCA9ICZvcHRpb247Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3NpemUgPD0gMSAmJiAhZm91bmRTZWxlY3RlZCAm
JiAhb3B0aW9uLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kU2VsZWN0ZWQgPSAmb3B0aW9uOwogICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVj
dGVkLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KQEAgLTg0MSw3ICs4NDEsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVk
SW5kZXgoKSBjb25zdAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKICAgICAgICAg
aWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmICh0b0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgaWYgKGRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9CkBA
IC04NzMsNyArODczLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0T3B0aW9uKGlu
dCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJbmRleCA9
IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKIAotICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gMDsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IG51bGxwdHI7CiAgICAgaWYgKGxp
c3RJbmRleCA+PSAwKSB7CiAgICAgICAgIGVsZW1lbnQgPSBpdGVtc1tsaXN0SW5kZXhdOwogICAg
ICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkgewpAQCAtODgxLDcgKzg4MSw3
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdE9wdGlvbihpbnQgb3B0aW9uSW5kZXgs
IFNlbGVjdE9wdGlvbkZsYWdzIGZsYWdzKQogICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9hY3RpdmVTZWxl
Y3Rpb25FbmRJbmRleCA8IDAgfHwgc2hvdWxkRGVzZWxlY3QpCiAgICAgICAgICAgICAgICAgc2V0
QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKLSAgICAgICAgICAgIHRvSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgICAgICAg
ICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUo
dHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVsZW1lbnQq
IGV4Y2x1ZGVFbGVtZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7
ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwogICAgICAg
ICBpZiAoZWxlbWVudCAhPSBleGNsdWRlRWxlbWVudCAmJiBpc0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2Vs
ZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgIH0KIH0KIApAQCAtOTgx
LDEwICs5ODEsMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUZv
cm1Db250cm9sU3RhdGUoKSBjb25zdAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24g
PSB0b0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKLSAgICAgICAgaWYgKCFvcHRpb24tPnNl
bGVjdGVkKCkpCisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKTsKKyAgICAgICAgaWYgKCFvcHRpb24uc2VsZWN0
ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGF0ZS5hcHBlbmQob3B0aW9u
LT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKG9wdGlvbi52YWx1ZSgpKTsKICAgICAg
ICAgaWYgKCFtdWx0aXBsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTk4LDcg
Kzk5OCw3IEBAIHNpemVfdCBIVE1MU2VsZWN0RWxlbWVudDo6c2VhcmNoT3B0aW9uc0ZvclZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUsIHNpemVfdCBsaXN0CiAgICAgZm9yIChzaXplX3QgaSA9IGxp
c3RJbmRleFN0YXJ0OyBpIDwgbG9vcEVuZEluZGV4OyArK2kpIHsKICAgICAgICAgaWYgKCFpc0hU
TUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAodG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFsdWUpCisg
ICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKS52YWx1ZSgp
ID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIHJldHVybiBub3RG
b3VuZDsKQEAgLTEwMTYsMTMgKzEwMTYsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVz
dG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtc1NpemU7ICsraSkgewogICAgICAgICBpZiAoIWlz
SFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pLT5zZXRTZWxlY3RlZFN0YXRlKGZhbHNl
KTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkuc2V0U2Vs
ZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKCFtdWx0aXBsZSgpKSB7CiAgICAg
ICAgIHNpemVfdCBmb3VuZEluZGV4ID0gc2VhcmNoT3B0aW9uc0ZvclZhbHVlKHN0YXRlWzBdLCAw
LCBpdGVtc1NpemUpOwogICAgICAgICBpZiAoZm91bmRJbmRleCAhPSBub3RGb3VuZCkKLSAgICAg
ICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRTZWxlY3Rl
ZFN0YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpp
dGVtc1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBzaXplX3Qgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RhdGUudmFsdWVTaXplKCk7ICsraSkgewpAQCAtMTAzMiw3ICsxMDMyLDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNv
bnRyb2xTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IHNlYXJjaE9w
dGlvbnNGb3JWYWx1ZSh2YWx1ZSwgMCwgc3RhcnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoZm91
bmRJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbZm91bmRJbmRleF0pLT5zZXRTZWxlY3RlZFN0
YXRlKHRydWUpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVt
c1tmb3VuZEluZGV4XSkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBmb3VuZEluZGV4ICsgMTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNjEsOCArMTA2
MSw4IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlz
dCYgbGlzdCwgYm9vbCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwotICAg
ICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpICYmICF0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQp
LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewotICAgICAgICAgICAgbGlzdC5hcHBlbmREYXRh
KG5hbWUsIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnZhbHVlKCkpOworICAgICAgICBp
ZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKKyAgICAgICAgICAgIGxpc3Qu
YXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnZh
bHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMDc1LDggKzEwNzUsOCBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3Jt
RGF0YShGb3JtRGF0YUxpc3QmIGxpc3QsIGJvb2wpCiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
OnJlc2V0KCkKIHsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAg
IEhUTUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CisgICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIGZpcnN0T3B0aW9uID0gbnVsbHB0cjsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogc2Vs
ZWN0ZWRPcHRpb24gPSBudWxscHRyOwogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgKytpKSB7CkBAIC0xMDg0LDE2ICsxMDg0LDE3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5mYXN0SGFz
QXR0cmlidXRlKHNlbGVjdGVkQXR0cikpIHsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9w
dGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCk7CisgICAgICAgIGlm
IChvcHRpb24uZmFzdEhhc0F0dHJpYnV0ZShzZWxlY3RlZEF0dHIpKSB7CiAgICAgICAgICAgICBp
ZiAoc2VsZWN0ZWRPcHRpb24gJiYgIW1fbXVsdGlwbGUpCiAgICAgICAgICAgICAgICAgc2VsZWN0
ZWRPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwotICAgICAgICAgICAgdG9IVE1MT3B0
aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKLSAgICAgICAgICAg
IHNlbGVjdGVkT3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAg
ICAgIG9wdGlvbi5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOworICAgICAgICAgICAgc2VsZWN0ZWRP
cHRpb24gPSAmb3B0aW9uOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRvSFRNTE9wdGlv
bkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAg
b3B0aW9uLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogCiAgICAgICAgIGlmICghZmlyc3RPcHRp
b24pCi0gICAgICAgICAgICBmaXJzdE9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVu
dCk7CisgICAgICAgICAgICBmaXJzdE9wdGlvbiA9ICZvcHRpb247CiAgICAgfQogCiAgICAgaWYg
KCFzZWxlY3RlZE9wdGlvbiAmJiBmaXJzdE9wdGlvbiAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUg
PD0gMSkKQEAgLTEyOTksMTAgKzEzMDAsMTAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBk
YXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdEluZGV4LCBib29sIG11bHRpLCBib29sIHNoaWYKICAg
ICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCkpIHsKICAgICAgICAgLy8g
S2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2UgZHVyaW5nIGRy
YWcKICAgICAgICAgLy8gc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVjdC4KLSAg
ICAgICAgaWYgKHRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5zZWxlY3RlZCgp
ICYmIG11bHRpU2VsZWN0KQorICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCpjbGlja2VkRWxlbWVudCkuc2VsZWN0ZWQoKSAmJiBtdWx0aVNlbGVjdCkKICAgICAgICAgICAg
IG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSBmYWxzZTsKICAgICAgICAgaWYgKCFtX2FjdGl2ZVNl
bGVjdGlvblN0YXRlKQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxl
bWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7
CiAgICAgfQogCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGFueSBzcGVjaWFsIG11bHRpcGxlIHNl
bGVjdGlvbiBtb2RlLCB0aGVuIGRlc2VsZWN0IGFsbApAQCAtMTMxNyw4ICsxMzE4LDggQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdEluZGV4LCBi
b29sIG11bHRpLCBib29sIHNoaWYKICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgoc2VsZWN0ZWRJbmRleCgpKTsKIAogICAgIC8vIFNldCB0aGUgc2VsZWN0aW9uIHN0YXRlIG9m
IHRoZSBjbGlja2VkIG9wdGlvbi4KLSAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChjbGlja2Vk
RWxlbWVudCkgJiYgIXRvSFRNTE9wdGlvbkVsZW1lbnQoY2xpY2tlZEVsZW1lbnQpLT5pc0Rpc2Fi
bGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxl
bWVudCktPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1l
bnQoY2xpY2tlZEVsZW1lbnQpICYmICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmNsaWNr
ZWRFbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsK
IAogICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3RlZEluZGV4KCkgZm9yIHRoZSBwcmV2aW91
cyBpbml0aWFsaXphdGlvbiwgb3IgSWYKICAgICAvLyB3ZSdyZSBkb2luZyBhIHNpbmdsZSBzZWxl
Y3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IKQEAgLTE1MzgsNyAr
MTUzOSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdEluZGV4KCkg
Y29uc3QKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gaXRlbXMuc2l6ZSgpOyBpOykgewogICAgICAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IGl0ZW1zWy0taV07Ci0gICAgICAgIGlmIChpc0hUTUxPcHRpb25F
bGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVk
KCkpCisgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIGRvd25jYXN0
PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiBpOwogICAgIH0KICAgICByZXR1cm4gLTE7CkBAIC0xNTU5LDkgKzE1NjAsOSBAQCBTdHJp
bmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50IGluZGV4KSBjb25zdAogICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIAog
ICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaW5kZXhdOwotICAgIGlmICghaXNIVE1M
T3B0aW9uRWxlbWVudChlbGVtZW50KSB8fCB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVk
Rm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiB0b0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4
dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtMTU5Niw4ICsxNTk3
LDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleChp
bnQgaW5kZXgpCiAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYgKGlzSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIGlmICh0b0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpLT5zZWxlY3RlZCgpKQotICAgICAgICAgICAgICAgIHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOworICAgICAgICAgICAgaWYgKGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3Rh
dGUoZmFsc2UpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlv
bihpbmRleCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggZjY1Y2IwMDgx
OTY2ZTNjOWI3NTY1OTg3NzFhYzE1ZmQ0ZWJjYzFjNy4uYjFlNGVlZWIyYzYwNTdmZjJmMmNmMzQz
YzcxYzM3NzkyYzZhMWU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3Vt
bWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcApAQCAtODcsOCArODcsOCBAQCBIVE1MRGV0YWlsc0VsZW1lbnQqIEhUTUxTdW1tYXJ5
RWxlbWVudDo6ZGV0YWlsc0VsZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG1heURldGFpbHMg
PSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQodGhpcyk7CiAgICAgaWYgKCFtYXlEZXRh
aWxzIHx8ICFtYXlEZXRhaWxzLT5oYXNUYWdOYW1lKGRldGFpbHNUYWcpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gdG9IVE1MRGV0YWlsc0VsZW1lbnQobWF5RGV0YWlscyk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGV0YWlsc0VsZW1l
bnQ+KG1heURldGFpbHMpOwogfQogCiBib29sIEhUTUxTdW1tYXJ5RWxlbWVudDo6aXNNYWluU3Vt
bWFyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAppbmRl
eCA1OWZlZWJlNTM1ZTRlZGM4MjZhM2M0ZmRhNmMzNTA2ZjhmZmI1MWI5Li5hYjcwMWYzMjRjZjI2
ZWM0MmVlNjFlYmQ5MDllOTc3YmYyMTllYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlRWxlbWVudC5jcHAKQEAgLTcwLDEwICs3MCwxMCBAQCBQYXNzUmVmUHRyPEhUTUxUYWJsZUVs
ZW1lbnQ+IEhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YQogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIEhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRpb24oKSBj
b25zdAogewogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFt
ZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZUNhcHRpb25FbGVt
ZW50KGNoaWxkKTsKKyAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoY2hpbGQp
KQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Pihj
aGlsZCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB2
b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnNldENhcHRpb24oUGFzc1JlZlB0cjxIVE1MVGFibGVDYXB0
aW9uRWxlbWVudD4gbmV3Q2FwdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCmluZGV4IGZjN2U4NWE5YzgyZjQyMDQw
MzVjNzc2MjVmMzVmMDFjMGE4OWI2YTAuLmY1MTA4MjRlZGJhNWFhYTdkZTA0NDYzN2ViZDNmNDU1
MDA5Nzc0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQu
Y3BwCkBAIC04OCw3ICs4OCw3IEBAIEhUTUxUYWJsZUVsZW1lbnQqIEhUTUxUYWJsZVBhcnRFbGVt
ZW50OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAocGFyZW50ICYmICFpc0hUTUxUYWJsZUVsZW1lbnQo
cGFyZW50KSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0
dXJuIHRvSFRNTFRhYmxlRWxlbWVudChwYXJlbnQpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1M
VGFibGVFbGVtZW50PihwYXJlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVSb3dFbGVtZW50LmNwcAppbmRleCA0YzRkOTc5MmNjMTBkMjVmZDg2ZWNjZDBiMWUyZDJk
MWUzZmI3MDgwLi40N2ZmMzNiZDc1M2RiNDkzZTY5NDU5M2NiNjUwN2IzNDIzNzhiNDU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKQEAgLTcwLDcgKzcw
LDcgQEAgaW50IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KCkgY29uc3QKIAogICAgIGlu
dCBySW5kZXggPSAwOwogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBoZWFkID0g
dG9IVE1MVGFibGVFbGVtZW50KHRhYmxlKS0+dEhlYWQoKSkgeworICAgIGlmIChIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudCogaGVhZCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSku
dEhlYWQoKSkgewogICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGhlYWQtPmZpcnN0Q2hpbGQoKTsg
cm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChyb3cgPT0g
dGhpcykKICAgICAgICAgICAgICAgICByZXR1cm4gckluZGV4OwpAQCAtOTEsNyArOTEsNyBAQCBp
bnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25zdAogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBmb290ID0gdG9IVE1MVGFibGVF
bGVtZW50KHRhYmxlKS0+dEZvb3QoKSkgeworICAgIGlmIChIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCogZm9vdCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSkudEZvb3QoKSkgewog
ICAgICAgICBmb3IgKE5vZGUgKnJvdyA9IGZvb3QtPmZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSBy
b3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChyb3cgPT0gdGhpcykKICAgICAg
ICAgICAgICAgICByZXR1cm4gckluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uLmNwcAppbmRleCA3ZTVmNjY0MDZmYTY0YTBjYWFkNTBlZGE2NTA5
ZGRkMDE5MWE5ZmUxLi4wNGE5NjA0MzZlMTA1NzYxODQzOTdkODk2YTMxNjVkNTg5YzFjMTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcApA
QCAtOTgsNyArOTgsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVj
dGlvbjo6cm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCogdGFibGUsCiAgICAgICAgIGNoaWxkID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocHJldmlvdXMtPnBhcmVudE5vZGUoKSk7CiAg
ICAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNo
aWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVtZW50KGNoaWxkKSkKLSAgICAg
ICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hpbGQpOworICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAgICAgICAgaWYg
KGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gcm93
ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKmNoaWxkKS5maXJzdCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xMzEsNyArMTMxLDcgQEAgSFRNTFRhYmxl
Um93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Omxhc3RSb3coSFRNTFRhYmxlRWxl
bWVudCogdGFibGUpCiAKICAgICBmb3IgKGF1dG8qIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6
bGFzdENoaWxkKHRhYmxlKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoaXNIVE1MVGFibGVSb3dFbGVtZW50KGNo
aWxkKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hpbGQpOwor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsK
ICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAgICAgICAg
aWYgKGF1dG8qIHJvdyA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KCpjaGls
ZCkubGFzdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xNjEsNyArMTYxLDcg
QEAgUGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b246OmNyZWF0ZShIVE1MVGFibGVFbGVtZW4KIAogRWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QKIHsKLSAg
ICByZXR1cm4gcm93QWZ0ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oJnRhYmxlRWxl
bWVudCgpKSwgdG9IVE1MVGFibGVSb3dFbGVtZW50KHByZXZpb3VzKSk7CisgICAgcmV0dXJuIHJv
d0FmdGVyKGNvbnN0X2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KCZ0YWJsZUVsZW1lbnQoKSksIGRv
d25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KHByZXZpb3VzKSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaAppbmRleCA2MzIyYzM1OWIy
Mjg4NjQ0N2M1YWNhZTI1YmY2YzdiMTQ0YmVhZjNjLi5mN2NhNjA0NDUxZTk3OGI2MjYwOWFhNmZk
Y2ZkYWQyZWM2MDhhMGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dz
Q29sbGVjdGlvbi5oCkBAIC00MCw4ICs0MCw4IEBAIGNsYXNzIEhUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uIGZpbmFsIDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gY3JlYXRlKEhUTUxUYWJsZUVsZW1lbnQm
LCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBIVE1MVGFibGVFbGVtZW50JiB0YWJsZUVsZW1lbnQo
KSB7IHJldHVybiB0b0hUTUxUYWJsZUVsZW1lbnQob3duZXJOb2RlKCkpOyB9Ci0gICAgY29uc3Qg
SFRNTFRhYmxlRWxlbWVudCYgdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9IVE1MVGFi
bGVFbGVtZW50KG93bmVyTm9kZSgpKTsgfQorICAgIEhUTUxUYWJsZUVsZW1lbnQmIHRhYmxlRWxl
bWVudCgpIHsgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9kZSgpKTsg
fQorICAgIGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQmIHRhYmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQogCiAgICAgc3Rh
dGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQqLCBIVE1M
VGFibGVSb3dFbGVtZW50Kik7CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIGxhc3RS
b3coSFRNTFRhYmxlRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGVtcGxhdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRl
RWxlbWVudC5jcHAKaW5kZXggMTdlNGMwODA3NjIyOWNiNzJmMWIwMTI1MmJkM2FkZTQzOTUwN2Iz
OC4uNmY0MjE4OWNiODc4ZTBkOWQ0MzRkYTVhMDZiY2JlMGViMzUzMjVlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC03NSw3ICs3NSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZT4gSFRNTFRlbXBsYXRlRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkK
IAogICAgIFJlZlB0cjxOb2RlPiBjbG9uZSA9IGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbigpOwog
ICAgIGlmIChtX2NvbnRlbnQpCi0gICAgICAgIGNvbnRlbnQoKS0+Y2xvbmVDaGlsZE5vZGVzKHRv
SFRNTFRlbXBsYXRlRWxlbWVudChjbG9uZS5nZXQoKSktPmNvbnRlbnQoKSk7CisgICAgICAgIGNv
bnRlbnQoKS0+Y2xvbmVDaGlsZE5vZGVzKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KGNs
b25lLmdldCgpKS0+Y29udGVudCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCmluZGV4IDhjYjE1MWJhMjlmY2M3ZTk5OWRiNGEzZDQ2MjAyYWQ1ZjVhZmZjMDEuLjM1Zjhl
YWQ1ZjNiYWNiOTU3NzlkNzY0OTNiNDU1OWY3MThkYmUzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC03MTcsNyArNzE3
LDcgQEAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRGb3JtQ29udHJv
bChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIEVsZW1lbnQqIGFuY2VzdG9yID0gY29udGFpbmVyLT5zaGFk
b3dIb3N0KCk7Ci0gICAgcmV0dXJuIGFuY2VzdG9yICYmIGlzSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQoKmFuY2VzdG9yKSA/IHRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoYW5jZXN0b3Ip
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gYW5jZXN0b3IgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgqYW5jZXN0b3IpID8gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KGFuY2VzdG9yKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBjb25zdCBFbGVtZW50KiBwYXJlbnRI
VE1MRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VE
b2N1bWVudC5jcHAKaW5kZXggOGQ2M2FmMzgxZDY4YTFlNzAxNmMzY2QwYzE3ODNiMWQ4YjU3ZGUy
MC4uNWJhYmIwNWI0MjI4ZjVlNzJhMDdjZDNjMjhkOWFiZDRkZGYyOWU3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lkIEltYWdl
RG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsKICAgICBSZWZQdHI8RWxlbWVu
dD4gcm9vdEVsZW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7
CiAgICAgYXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQpOwotICAgIHRvSFRNTEh0bWxFbGVtZW50KHJv
b3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIGRvd25jYXN0PEhUTUxI
dG1sRWxlbWVudD4oKnJvb3RFbGVtZW50KS5pbnNlcnRlZEJ5UGFyc2VyKCk7CiAKICAgICBmcmFt
ZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwogCiAgICAgUmVm
UHRyPEVsZW1lbnQ+IGJvZHkgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChib2R5VGFnLCBmYWxz
ZSk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIm1hcmdpbjogMHB4Iik7CiAg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUoZG9jdW1lbnQoKS5sb2FkZXIo
KS0+cmVzcG9uc2VNSU1FVHlwZSgpKSkKLSAgICAgICAgdG9IVE1MQm9keUVsZW1lbnQoYm9keS5n
ZXQoKSktPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Is
ICJ3aGl0ZSIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOworICAgICAgICBkb3duY2Fz
dDxIVE1MQm9keUVsZW1lbnQ+KCpib2R5KS5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yLCAid2hpdGUiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
KTsKICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSk7CiAgICAgCiAgICAgUmVmUHRy
PEltYWdlRG9jdW1lbnRFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBJbWFnZURvY3VtZW50RWxlbWVu
dDo6Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxz
Tm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKaW5k
ZXggMzFmNjc1ZTE5YjgwZThmMThjM2E1NTk4ZGQxMTcxMWM1YzZhNzkwYy4uOGMyOTYyMDYwZjJi
ZDA4ZWRhNjc4YjBhMGIxNGNlYWE0YTQ1NDQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNO
b2RlTGlzdC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgTGFiZWxzTm9kZUxpc3Q6On5MYWJlbHNOb2Rl
TGlzdCgpCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0OjplbGVtZW50TWF0Y2hlcyhFbGVtZW50
JiB0ZXN0Tm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50KHRlc3RO
b2RlKSAmJiB0b0hUTUxMYWJlbEVsZW1lbnQodGVzdE5vZGUpLmNvbnRyb2woKSA9PSAmb3duZXJO
b2RlKCk7CisgICAgcmV0dXJuIGlzSFRNTExhYmVsRWxlbWVudCh0ZXN0Tm9kZSkgJiYgZG93bmNh
c3Q8SFRNTExhYmVsRWxlbWVudD4odGVzdE5vZGUpLmNvbnRyb2woKSA9PSAmb3duZXJOb2RlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1l
bnQuY3BwCmluZGV4IGM5Yjc3M2I0YWRhN2JlZTdiOTJhOGZjMmU5NzkxNTUwYjY3NjFkZDcuLjZi
ZmQwNDA4YzVlODMzNmZjMmVjOGNiYWViNWFmZGIxMzU0YmQwMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9NZWRpYURvY3VtZW50LmNwcApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIE1lZGlhRG9jdW1lbnRQ
YXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKICAgICBSZWZQdHI8RWxlbWVudD4gcm9v
dEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKICAg
ICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7
CiAgICAgZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KHJvb3RFbGVtZW50LmdldCgpKTsKLSAgICB0
b0hUTUxIdG1sRWxlbWVudChyb290RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsK
KyAgICBkb3duY2FzdDxIVE1MSHRtbEVsZW1lbnQ+KCpyb290RWxlbWVudCkuaW5zZXJ0ZWRCeVBh
cnNlcigpOwogCiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRvY3VtZW50
KCktPmZyYW1lKCktPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRTdGFydCk7CkBA
IC05OCw3ICs5OCw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRT
dHJ1Y3R1cmUoKQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IGRvY3VtZW50
KCktPmNyZWF0ZUVsZW1lbnQodmlkZW9UYWcsIGZhbHNlKTsKIAotICAgIG1fbWVkaWFFbGVtZW50
ID0gdG9IVE1MVmlkZW9FbGVtZW50KG1lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgbV9tZWRpYUVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsZW1lbnQuZ2V0KCkpOwog
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCAiIik7CiAgICAg
bV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdXRvcGxheUF0dHIsICIiKTsKIApAQCAtMTEy
LDcgKzExMiw3IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1
Y3R1cmUoKQogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBlbGVt
ZW50U3R5bGUudG9TdHJpbmcoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gc291cmNlRWxlbWVu
dCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc291cmNlVGFnLCBmYWxzZSk7Ci0gICAgSFRN
TFNvdXJjZUVsZW1lbnQmIHNvdXJjZSA9IHRvSFRNTFNvdXJjZUVsZW1lbnQoKnNvdXJjZUVsZW1l
bnQpOworICAgIEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UgPSBkb3duY2FzdDxIVE1MU291cmNl
RWxlbWVudD4oKnNvdXJjZUVsZW1lbnQpOwogICAgIHNvdXJjZS5zZXRTcmMoZG9jdW1lbnQoKS0+
dXJsKCkpOwogCiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudCgpLT5s
b2FkZXIoKSkKQEAgLTE2MSwyMiArMTYxLDIyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRQYXJzZXI+
IE1lZGlhRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiBzdGF0aWMgaW5saW5lIEhUTUxWaWRlb0Vs
ZW1lbnQqIGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoQ29udGFpbmVyTm9kZSYgbm9kZSkKIHsKICAg
ICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gdG9IVE1MVmlk
ZW9FbGVtZW50KCZub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRlb0VsZW1l
bnQ+KCZub2RlKTsKIAogICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZUxpc3QgPSBub2RlLmdldEVs
ZW1lbnRzQnlUYWdOYW1lTlModmlkZW9UYWcubmFtZXNwYWNlVVJJKCksIHZpZGVvVGFnLmxvY2Fs
TmFtZSgpKTsKICAgIAotICAgIGlmIChub2RlTGlzdC5nZXQoKS0+bGVuZ3RoKCkgPiAwKQotICAg
ICAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGVMaXN0LmdldCgpLT5pdGVtKDApKTsK
KyAgICBpZiAobm9kZUxpc3QtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGVMaXN0LT5pdGVtKDApKTsKIAotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxWaWRlb0VsZW1lbnQq
IGFuY2VzdG9yVmlkZW9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgd2hpbGUgKG5vZGUgJiYg
IW5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpKQorICAgIHdoaWxlIChub2RlICYmICFpc0hUTUxW
aWRlb0VsZW1lbnQobm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hv
c3ROb2RlKCk7CiAKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KG5vZGUpOworICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pihub2RlKTsKIH0KIAogdm9pZCBNZWRpYURv
Y3VtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKQEAgLTI0MywxOSArMjQz
LDE5IEBAIHZvaWQgTWVkaWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVyRmlyZWQo
VGltZXI8TWVkaWFEb2N1bWVudD4mKQogCiAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVv
RWxlbWVudCA9IGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQoKmh0bWxCb2R5KSkgewogICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGVtYmVkVGFn
LCBmYWxzZSk7Ci0gICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkRWxlbWVudCA9IHRvSFRN
TEVtYmVkRWxlbWVudChlbGVtZW50LmdldCgpKTsKKyAgICAgICAgSFRNTEVtYmVkRWxlbWVudCYg
ZW1iZWRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVtYmVkRWxlbWVudD4oKmVsZW1lbnQpOwogCi0g
ICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEwMCUiKTsKLSAg
ICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKLSAg
ICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4iKTsKLSAg
ICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3RyaW5nKCkp
OworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEwMCUiKTsK
KyAgICAgICAgZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAwJSIpOwor
ICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7Cisg
ICAgICAgIGVtYmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3RyaW5nKCkp
OwogCiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGxvYWRlcigpOwog
ICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwogICAgICAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIpCi0gICAgICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9j
dW1lbnRMb2FkZXItPndyaXRlcigpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgZW1iZWRFbGVt
ZW50LnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLm1pbWVU
eXBlKCkpOwogCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZXBsYWNlQ2hp
bGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAg
ICB2aWRlb0VsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKCZlbWJlZEVsZW1lbnQs
IHZpZGVvRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCmluZGV4IGY3MTZiMjc5OTQ3NWQxOTgwZTNmY2VjODdk
ODQ5OTU5ZWVkMjk4ZDUuLjhiMGY1MmVmNDQzOTNmMTQ0OTM3OWNmNzJmM2NlZDA0Mzc5MDUwYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCkBAIC02OSw3ICs2OSw3IEBA
IHZvaWQgUGx1Z2luRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsK
ICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVt
ZW50KGh0bWxUYWcsIGZhbHNlKTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChyb290RWxl
bWVudCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgdG9IVE1MSHRtbEVsZW1lbnQocm9vdEVsZW1l
bnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVt
ZW50Pigqcm9vdEVsZW1lbnQpLmluc2VydGVkQnlQYXJzZXIoKTsKIAogICAgIGlmIChkb2N1bWVu
dCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5pbmplY3RVc2VyU2Ny
aXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFBsdWdp
bkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAgICAgICAgIAogICAg
IFJlZlB0cjxFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50
KGVtYmVkVGFnLCBmYWxzZSk7CiAgICAgICAgIAotICAgIG1fZW1iZWRFbGVtZW50ID0gdG9IVE1M
RW1iZWRFbGVtZW50KGVtYmVkRWxlbWVudC5nZXQoKSk7CisgICAgbV9lbWJlZEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MRW1iZWRFbGVtZW50PihlbWJlZEVsZW1lbnQuZ2V0KCkpOwogICAgIG1fZW1i
ZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOwogICAgIG1fZW1iZWRF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggMjM5YTljZTYwYWNmZGM3MjYwZjlkNjA4
OWZkNjEzNzU0NWRhY2VkMy4uNmVkYzBlOTVmNTgzODNlZGFhMTY2YzllNjZkOWU5MGRjZTZlZTdm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTg2LDcgKzg2LDcg
QEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQogICAgICAgICAvLyBMb29rIGZvciBtb3JlIHJhZGlvIGJ1dHRvbnMuCiAgICAgICAg
IGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1
dEVsZW1lbnQobm9kZSk7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dEVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKICAgICAgICAgaWYgKGlu
cHV0RWxlbWVudC0+Zm9ybSgpICE9IGVsZW1lbnQoKS5mb3JtKCkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmIGlucHV0RWxl
bWVudC0+bmFtZSgpID09IGVsZW1lbnQoKS5uYW1lKCkgJiYgaW5wdXRFbGVtZW50LT5pc0ZvY3Vz
YWJsZSgpKSB7CkBAIC0xMjMsOCArMTIzLDggQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6aXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKICAgICAvLyBza2lwIGFu
eSBvdGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCiAgICAgRWxlbWVudCogY3VycmVudEZvY3Vz
ZWROb2RlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAo
Y3VycmVudEZvY3VzZWROb2RlICYmIGlzSFRNTElucHV0RWxlbWVudChjdXJyZW50Rm9jdXNlZE5v
ZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGZvY3VzZWRJbnB1dCA9IHRvSFRNTElu
cHV0RWxlbWVudChjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAgICBpZiAoZm9jdXNlZElucHV0
LT5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LT5mb3JtKCkgPT0gZWxlbWVudCgpLmZv
cm0oKSAmJiBmb2N1c2VkSW5wdXQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpKQorICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50JiBmb2N1c2VkSW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqY3VycmVudEZvY3VzZWROb2RlKTsKKyAgICAgICAgaWYgKGZvY3VzZWRJbnB1dC5pc1Jh
ZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LmZvcm0oKSA9PSBlbGVtZW50KCkuZm9ybSgpICYm
IGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFk
aW9Ob2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCmlu
ZGV4IGIyMDQ0ZjY3OGQ2NGI2YzcxZGNmY2E1MjBjMzFjYTc4ZmM3ZmFkMTMuLjcwMmYyMWI1YzEy
MTE3YmVkODU3ZGYxNDk5ZTdjNDRhYjk2MDIyNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05v
ZGVMaXN0LmNwcApAQCAtODcsOSArODcsOSBAQCBib29sIFJhZGlvTm9kZUxpc3Q6OmNoZWNrRWxl
bWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVyKGNvbnN0IEVsZW1lbnQmIHRlc3RFbAogewog
ICAgIEFTU0VSVCh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgdGVzdEVsZW1l
bnQuaXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiAgICAgaWYgKGlzSFRNTEZvcm1FbGVtZW50KG93
bmVyTm9kZSgpKSkgewotICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50ID0gMDsK
KyAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IG51bGxwdHI7CiAgICAgICAg
IGlmICh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICBmb3Jt
RWxlbWVudCA9IHRvSFRNTE9iamVjdEVsZW1lbnQodGVzdEVsZW1lbnQpLmZvcm0oKTsKKyAgICAg
ICAgICAgIGZvcm1FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KHRlc3RFbGVt
ZW50KS5mb3JtKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1FbGVtZW50ID0gdG9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50KHRlc3RFbGVtZW50KS5mb3JtKCk7CiAgICAgICAgIGlmICgh
Zm9ybUVsZW1lbnQgfHwgZm9ybUVsZW1lbnQgIT0gJm93bmVyTm9kZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1JhbmdlSW5wdXRUeXBlLmNwcAppbmRleCAwMDIzOTg0NWQzZWQ0NDNmMDUzYzI0YzcwODFl
NzdkMzNjMTI4ODczLi42OGYwMGY1YWU0YWM1MGFlOGJkNmRiNGEyMTU3YzcwMWI5ZTNmMjNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcApAQCAtMzcyLDggKzM3Miw4IEBA
IHZvaWQgUmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKCkKICAgICBtX3RpY2tN
YXJrVmFsdWVzLnJlc2VydmVDYXBhY2l0eShvcHRpb25zLT5sZW5ndGgoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG9wdGlvbnMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgTm9k
ZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAgU3RyaW5n
IG9wdGlvblZhbHVlID0gb3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnQmIG9wdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5v
ZGUpOworICAgICAgICBTdHJpbmcgb3B0aW9uVmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7
CiAgICAgICAgIGlmICghZWxlbWVudCgpLmlzVmFsaWRWYWx1ZShvcHRpb25WYWx1ZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV90aWNrTWFya1ZhbHVlcy5hcHBlbmQocGFyc2VU
b051bWJlcihvcHRpb25WYWx1ZSwgRGVjaW1hbDo6bmFuKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBmZTIwNGVj
M2Q4MDBhZmJiMDE4NjQwYmIwODFjNmExZDgwOTU3ZTdlLi45MzkwNTU3MDg2MjViZDZjZDc5YWE3
ZjQwMzZiZjAyM2UwZTE2ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC04NSw4ICs4NSw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FsbFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiBzdGF0aWMgaW5s
aW5lIHZvaWQgaW5zZXJ0KEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykKIHsKICNpZiBF
TkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAodGFzay5wYXJlbnQtPmhhc1RhZ05hbWUo
dGVtcGxhdGVUYWcpKQotICAgICAgICB0YXNrLnBhcmVudCA9IHRvSFRNTFRlbXBsYXRlRWxlbWVu
dCh0YXNrLnBhcmVudC5nZXQoKSktPmNvbnRlbnQoKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVF
bGVtZW50KCp0YXNrLnBhcmVudCkpCisgICAgICAgIHRhc2sucGFyZW50ID0gZG93bmNhc3Q8SFRN
TFRlbXBsYXRlRWxlbWVudD4oKnRhc2sucGFyZW50KS5jb250ZW50KCk7CiAjZW5kaWYKIAogICAg
IGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSB0YXNrLmNoaWxkLT5wYXJlbnROb2RlKCkpCkBA
IC01MzEsOCArNTMxLDggQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5v
ZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW8KICAgICAgICAgZmluZEZv
c3RlclNpdGUodGFzayk7CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAo
dGFzay5wYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICB0YXNrLnBhcmVu
dCA9IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXNrLnBhcmVudC5nZXQoKSktPmNvbnRlbnQoKTsK
KyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCp0YXNrLnBhcmVudCkpCisgICAgICAgIHRh
c2sucGFyZW50ID0gZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKnRhc2sucGFyZW50KS5j
b250ZW50KCk7CiAjZW5kaWYKIAogICAgIC8vIFN0cmluZ3MgY29tcG9zZWQgZW50aXJlbHkgb2Yg
d2hpdGVzcGFjZSBhcmUgbGlrZWx5IHRvIGJlIHJlcGVhdGVkLgpAQCAtNjE4LDggKzYxOCw4IEBA
IFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQo
QXRvbWljSFRNTFRva2VuKiB0b2tlbiwKIGlubGluZSBEb2N1bWVudCYgSFRNTENvbnN0cnVjdGlv
blNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgpCiB7CiAjaWYgRU5BQkxFKFRFTVBM
QVRFX0VMRU1FTlQpCi0gICAgaWYgKGN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUodGVtcGxhdGVU
YWcpKQotICAgICAgICByZXR1cm4gdG9IVE1MVGVtcGxhdGVFbGVtZW50KGN1cnJlbnRFbGVtZW50
KCkpLT5jb250ZW50KCktPmRvY3VtZW50KCk7CisgICAgaWYgKGlzSFRNTFRlbXBsYXRlRWxlbWVu
dChjdXJyZW50Tm9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVs
ZW1lbnQ+KCpjdXJyZW50RWxlbWVudCgpKS5jb250ZW50KCktPmRvY3VtZW50KCk7CiAjZW5kaWYK
ICAgICByZXR1cm4gY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDMxZjU0OTIzNDgzZDk0
YzY3NmY0OTY4MmIwNmJmY2MzYWE4YjJhNjUuLmI5MzY4ZGY4MDM3NjM2ZGIyZGQ2NTdkOGE5YTM4
MDU3NDc3ZmIyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVC
dWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50JiBmCiAj
ZW5kaWYKIAogICAgICAgICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7Ci0gICAg
ICAgIG1fdHJlZS5zZXRGb3JtKCFjb250ZXh0RWxlbWVudCB8fCBpc0hUTUxGb3JtRWxlbWVudChj
b250ZXh0RWxlbWVudCkgPyB0b0hUTUxGb3JtRWxlbWVudChjb250ZXh0RWxlbWVudCkgOiBIVE1M
Rm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVudCkpOwor
ICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQgfHwgaXNIVE1MRm9ybUVsZW1l
bnQoY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50Pihjb250ZXh0RWxl
bWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpjb250ZXh0
RWxlbWVudCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwCmluZGV4IGEyNmZmNGRiYWYwMWFmOTUwZWU1OTNi
OTRhZmQ3NTNkMTdjMWYxOTAuLjVlM2FiZDIwMTNkMTQ5N2FkM2U5NDIyNjJlYjMyMTBjZmJjOTA2
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJD
b250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EZXRhaWxzTWFya2Vy
Q29udHJvbC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IERl
dGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUGFzc1JlZjxSZW4KIAog
Ym9vbCBEZXRhaWxzTWFya2VyQ29udHJvbDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIHRvSFRNTFN1bW1hcnlFbGVtZW50KHNoYWRvd0hv
c3QoKSktPmlzTWFpblN1bW1hcnkoKSAmJiBIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXJJc05lZWRl
ZChzdHlsZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdW1tYXJ5RWxlbWVudD4oc2hhZG93
SG9zdCgpKS0+aXNNYWluU3VtbWFyeSgpICYmIEhUTUxEaXZFbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKHN0eWxlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IGE5MmI4NzIyMGQ4ZTA5YjllZDVjMjg5YzRi
NzQ2MWExMTlkNzMzODYuLmQ0MmQ1YTQ3OTU4YzdhZmJiNGU5ZmUyYzBjNDY1OWYwNGZhMzAzM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIDIuIExldCB2aWRlbyBiZSB0aGUgbWVkaWEgZWxlbWVudCBvciBvdGhlciBwbGF5YmFjayBt
ZWNoYW5pc20uCi0gICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8gPSB0b0hUTUxWaWRlb0VsZW1l
bnQobWVkaWFFbGVtZW50KTsKKyAgICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0
PEhUTUxWaWRlb0VsZW1lbnQ+KCptZWRpYUVsZW1lbnQpOwogCiAgICAgLy8gMy4gTGV0IG91dHB1
dCBiZSBhbiBlbXB0eSBsaXN0IG9mIGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94
ZXMuCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1MRGl2RWxlbWVudD4+IG91dHB1dDsKQEAgLTExMzUs
NyArMTEzNSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
dXBkYXRlRGlzcGxheSgpCiAgICAgLy8gNy4gTGV0IGN1ZXMgYmUgYW4gZW1wdHkgbGlzdCBvZiB0
ZXh0IHRyYWNrIGN1ZXMuCiAgICAgLy8gOC4gRm9yIGVhY2ggdHJhY2sgdHJhY2sgaW4gdHJhY2tz
LCBhcHBlbmQgdG8gY3VlcyBhbGwgdGhlIGN1ZXMgZnJvbQogICAgIC8vIHRyYWNrJ3MgbGlzdCBv
ZiBjdWVzIHRoYXQgaGF2ZSB0aGVpciB0ZXh0IHRyYWNrIGN1ZSBhY3RpdmUgZmxhZyBzZXQuCi0g
ICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gdmlkZW8tPmN1cnJlbnRseUFjdGl2ZUN1ZXMoKTsKKyAg
ICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJyZW50bHlBY3RpdmVDdWVzKCk7CiAKICAg
ICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwgZm9yIGVhY2ggdGV4dCB0cmFjayBjdWUg
Y3VlIGluIGN1ZXM6IGlmIGN1ZSdzCiAgICAgLy8gdGV4dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0
ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFkZCB0aG9zZSBib3hlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5jcHAKaW5kZXggYTU3
NjMzNGRlODM5MWFmNDE2M2UwMWM2NTZhZmE0ZTg1ZWZiNTIxMi4uNmVjNGU1NTEyZjkyMTlmMjMw
MmU3MjcyZWRjNjFlOWVhMDY0ODY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIE1ldGVyU2hhZG93
RWxlbWVudDo6TWV0ZXJTaGFkb3dFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAogSFRNTE1l
dGVyRWxlbWVudCogTWV0ZXJTaGFkb3dFbGVtZW50OjptZXRlckVsZW1lbnQoKSBjb25zdAogewot
ICAgIHJldHVybiB0b0hUTUxNZXRlckVsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTE1ldGVyRWxlbWVudD4oc2hhZG93SG9zdCgpKTsKIH0KIAogYm9vbCBNZXRl
clNoYWRvd0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxl
bWVudC5jcHAKaW5kZXggZGNkMjI4YmI2ZmRjZGYzZGEzZTFkNTYyZjViNmMyYWQ4NTVhZDNiYi4u
OTA0MTdmMTFhYjVkZjIxYjNhMDk5OGE5YTdlNTI2NGZkNmJiYzFkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwCkBAIC00
Niw3ICs0Niw3IEBAIFByb2dyZXNzU2hhZG93RWxlbWVudDo6UHJvZ3Jlc3NTaGFkb3dFbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKIAogSFRNTFByb2dyZXNzRWxlbWVudCogUHJvZ3Jlc3NTaGFk
b3dFbGVtZW50Ojpwcm9ncmVzc0VsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxQ
cm9ncmVzc0VsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFBy
b2dyZXNzRWxlbWVudD4oc2hhZG93SG9zdCgpKTsKIH0KIAogYm9vbCBQcm9ncmVzc1NoYWRvd0Vs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAKaW5kZXggMjA2MjhjNzIzMDI4ZTNmYjYyY2ZkZmI3MGJiMmM1MDM2ZDBjOTQ2MC4uMTky
ZjhlMDA2M2ZhNWEwOGU4ZjQ4MjFmZGVkZTAzZmZlMjBhZDAxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBA
IC0xNDEsNyArMTQxLDcgQEAgUGFzc1JlZlB0cjxTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVt
ZW50PiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpjcmUKIHZvaWQgU2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiB7CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRlZAotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KHNoYWRvd0hvc3Qo
KSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PihzaGFkb3dIb3N0KCkpOwogICAgIGlmIChpbnB1dCAmJiBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9N
b3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpbnB1
dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwpAQCAtMTkyLDcgKzE5Miw3IEBA
IHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsRGV0YWNoUmVuZGVyZXJz
KCkKIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlLCBv
biBtb3VzZXVwLCBjbGVhciB0aGUgdmFsdWUsIGFuZCBzZXQgc2VsZWN0aW9uCi0gICAgUmVmUHRy
PEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHRvSFRNTElucHV0RWxlbWVudChzaGFkb3dIb3N0KCkp
KTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oc2hhZG93SG9zdCgpKSk7CiAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dC0+aXNEaXNh
YmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICNpZiAhUExBVEZPUk0oSU9TKQog
Ym9vbCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNs
aWNrRXZlbnRzKCkKIHsKLSAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRN
TElucHV0RWxlbWVudChzaGFkb3dIb3N0KCkpOworICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKTsKICAgICBp
ZiAoaW5wdXQgJiYgIWlucHV0LT5pc0Rpc2FibGVkT3JSZWFkT25seSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKaW5kZXggZmJlODhkNWUxNTlkZTU5OGE5NTkyZWIzZWZlNDRhNzFlNTljZGMwYi4uMmM3
M2RiOWZkNGJlY2RhNDQ0ZGU5ZjNiODAzNzg3NmFhMjhhNzM3YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC05NzUsNyArOTc1LDcgQEAg
SW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OnZpYUluc3BlY3RvclN0eWxl
U2hlZXQoRG9jdW1lbnQqIGRvY3VtZW4KIAogICAgIENTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hl
ZXQgPSBudWxscHRyOwogICAgIGlmIChzdHlsZUVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAg
ICAgICAgY3NzU3R5bGVTaGVldCA9IHRvSFRNTFN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQuZ2V0
KCkpLT5zaGVldCgpOworICAgICAgICBjc3NTdHlsZVNoZWV0ID0gZG93bmNhc3Q8SFRNTFN0eWxl
RWxlbWVudD4oKnN0eWxlRWxlbWVudCkuc2hlZXQoKTsKICAgICBlbHNlIGlmIChzdHlsZUVsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICBjc3NTdHlsZVNoZWV0ID0gZG93bmNhc3Q8U1ZH
U3R5bGVFbGVtZW50Pigqc3R5bGVFbGVtZW50KS5zaGVldCgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBkMmRmNGE4N2E0ZTBlN2Q2
Y2QxOTc4ZDRmY2M4NTUxZjlkNDljMmNiLi5iYmEzOWY2NmYxNTFiNTkyNmE0ZjBmM2E2NTAwZWRh
YWY4ZTVmZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTEyOTcsOCArMTI5Nyw4IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlCiAg
ICAgICAgIH0KIAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRlVGFnKSkKLSAgICAgICAgICAgIHZh
bHVlLT5zZXRUZW1wbGF0ZUNvbnRlbnQoYnVpbGRPYmplY3RGb3JOb2RlKHRvSFRNTFRlbXBsYXRl
RWxlbWVudChlbGVtZW50KS0+Y29udGVudCgpLCAwLCBub2Rlc01hcCkpOworICAgICAgICBpZiAo
aXNIVE1MVGVtcGxhdGVFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICAgICAgdmFsdWUtPnNldFRl
bXBsYXRlQ29udGVudChidWlsZE9iamVjdEZvck5vZGUoZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKmVsZW1lbnQpLmNvbnRlbnQoKSwgMCwgbm9kZXNNYXApKTsKICNlbmRpZgogCiAgICAg
fSBlbHNlIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCA1Mjc4ZjRhYzUwNmM4OTYzMTQyZTk3OGEzNjgyMWYx
NTAxMTU1MWVhLi5lMDZiNTZkNzA3MTE2NzE2NzRmNGZhYTNmOGJkODAyM2QwOWVlNGY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE5MCw3ICsxOTAsNyBA
QCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxG
b3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgICAgICBpZiAoIWVsZW1lbnQuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICBjb250cm9sLmFwcGVuZEZvcm1EYXRhKCpkb21G
b3JtRGF0YSwgaXNNdWx0aVBhcnRGb3JtKTsKICAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVu
dChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBp
bnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKGlucHV0LmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgICAgICAgICBmb3JtVmFsdWVzLmFw
cGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0Lm5hbWUoKS5zdHJpbmcoKSwgaW5w
dXQudmFsdWUoKSkpOwogICAgICAgICAgICAgICAgIGlucHV0LmFkZFNlYXJjaFJlc3VsdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggY2Q3MTZkOTU3ZTIwZWZkYjE3
ODRiOTVkZDUxZjBkMDUzMTVhOThlYi4uY2M0MDM3YTdlOTE3ZjRjYTlkZjVkMmY1ZWE4Mzk2YWQz
ODk0ZWU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xMDMzLDkg
KzEwMzMsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRPcGVuZXIoRnJhbWUqIG9wZW5lcikKIHZv
aWQgRnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNrQ29udGVudCgpCiB7CiAgICAgSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFv
d25lciB8fCAhb3duZXItPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICBpZiAoIW93bmVyIHx8
ICFpc0hUTUxPYmplY3RFbGVtZW50KG93bmVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIHRvSFRN
TE9iamVjdEVsZW1lbnQob3duZXIpLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKKyAgICBkb3du
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oKm93bmVyKS5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAppbmRleCA5YmFkOWI0N2U0YzZmZjVlYjk2ZjhhYmFl
ZjkyYTcyZjU2ZjQyNTQxLi45NzU0OTdhZGM1YTFiZDJhY2U0MmRhODAxMmQxNWUyNGM0ZTEwOWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKQEAgLTQwNiwxNCArNDA2LDE0
IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudCgpCiAg
ICAgfQogICAgIGlmIChtX2ltYWdlKSB7CiAgICAgICAgIG1faW1hZ2UtPnJlbW92ZUNsaWVudCh0
aGlzKTsKLSAgICAgICAgbV9pbWFnZSA9IDA7CisgICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIGxvYWRFdmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KCp0aGlzKTsKICAgICBt
X2hhc1BlbmRpbmdMb2FkRXZlbnQgPSBmYWxzZTsKICAgICAKICAgICBpZiAoaXNIVE1MT2JqZWN0
RWxlbWVudChlbGVtZW50KCkpKQotICAgICAgICB0b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQo
KSkucmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CisgICAgICAgIGRvd25jYXN0PEhUTUxPYmplY3RF
bGVtZW50PihlbGVtZW50KCkpLnJlbmRlckZhbGxiYWNrQ29udGVudCgpOwogCiAgICAgLy8gT25s
eSBjb25zaWRlciB1cGRhdGluZyB0aGUgcHJvdGVjdGlvbiByZWYtY291bnQgb2YgdGhlIEVsZW1l
bnQgaW1tZWRpYXRlbHkgYmVmb3JlIHJldHVybmluZwogICAgIC8vIGZyb20gdGhpcyBmdW5jdGlv
biBhcyBkb2luZyBzbyBtaWdodCByZXN1bHQgaW4gdGhlIGRlc3RydWN0aW9uIG9mIHRoaXMgSW1h
Z2VMb2FkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAppbmRleCBm
OWFkZjZjZTdiN2IyZTEzNWEyMTJlNDg4N2M2YTU4NmQ1OGRjM2U4Li45N2JkYWMxNzRjNmZiMTZk
Y2RlYjVlNTAxYTk4ZTNlMzBlN2YxZTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFt
ZUxvYWRlci5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1
ZXN0T2JqZWN0KEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIG93bmVyRWxlbWVudCwgY29uc3QgUwog
ICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgY29tcGxldGVkVVJMID0gY29tcGxldGVV
UkwodXJsKTsKIAotICAgIGJvb2wgaGFzRmFsbGJhY2tDb250ZW50ID0gaXNIVE1MT2JqZWN0RWxl
bWVudChvd25lckVsZW1lbnQpICYmIHRvSFRNTE9iamVjdEVsZW1lbnQob3duZXJFbGVtZW50KS5o
YXNGYWxsYmFja0NvbnRlbnQoKTsKKyAgICBib29sIGhhc0ZhbGxiYWNrQ29udGVudCA9IGlzSFRN
TE9iamVjdEVsZW1lbnQob3duZXJFbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVu
dD4ob3duZXJFbGVtZW50KS5oYXNGYWxsYmFja0NvbnRlbnQoKTsKIAogICAgIGJvb2wgdXNlRmFs
bGJhY2s7CiAgICAgaWYgKHNob3VsZFVzZVBsdWdpbihjb21wbGV0ZWRVUkwsIG1pbWVUeXBlLCBv
d25lckVsZW1lbnQuc2hvdWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcygpLCBoYXNGYWxsYmFja0Nv
bnRlbnQsIHVzZUZhbGxiYWNrKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGVhNDA3OWM2
NzRmZTVlM2ZkMmY2ODBhYzY1MzM0ZDg1NDUwNWY3NWEuLmQzMmQzNjlkYmM5MTk0NDVhYTAzZDRk
NmM1MDU5ZjVmM2YyNzcyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQwOSw5ICs0MDks
OSBAQCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQp
CiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkRWxl
bWVudCgpKSB7CiAgICAgICAgICAgICAvLyBHZXQgdG9vbHRpcCByZXByZXNlbnRpbmcgZm9ybSBh
Y3Rpb24sIGlmIHJlbGV2YW50CiAgICAgICAgICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KGVs
ZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0LT5pc1N1
Ym1pdEJ1dHRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChIVE1MRm9ybUVsZW1lbnQq
IGZvcm0gPSBpbnB1dC0+Zm9ybSgpKSB7CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgaWYgKGlucHV0LmlzU3VibWl0QnV0dG9uKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGlucHV0LmZvcm0oKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgdG9vbFRpcCA9IGZvcm0tPmFjdGlvbigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvcm0tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9vbFRpcERpcmVjdGlvbiA9IGZvcm0tPnJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9u
KCk7CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSkgewogICAgICAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkgewotICAgICAg
ICAgICAgICAgIHRvb2xUaXAgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCktPmRlZmF1bHRU
b29sVGlwKCk7CisgICAgICAgICAgICAgICAgdG9vbFRpcCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCplbGVtZW50KS5kZWZhdWx0VG9vbFRpcCgpOwogCiAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBvYnRhaW4gdGV4dCBkaXJlY3Rpb24gb2YgdG9vbHRpcCBmcm9tCiAg
ICAgICAgICAgICAgICAgLy8gQ2hyb21lQ2xpZW50IG9yIHBsYXRmb3JtLiBBcyBvZiBPY3RvYmVy
IDIwMTEsIGFsbCBjbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5k
ZXggNTE1OTYyNDZlN2Y4ZGRlYWM2YTYyZGI5NTFjMWVlMDFlMjE5ODQxMy4uNWFkMzNiYzE2OGUx
OGNkZmI0MmE5NGZmMzIyZDNlNjQwOWY5MjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKQEAgLTYyMyw3ICs2MjMsNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQog
ewogICAgIHN0YXRlLnR5cGUgPSAoc291cmNlRnJhbWUtPnNlbGVjdGlvbigpLmNvbnRhaW5zKGRy
YWdPcmlnaW4pKSA/IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24gOiBEcmFnU291cmNlQWN0aW9u
Tm9uZTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvIHJlbmRlcmVyID0gc3RhcnRFbGVtZW50
LT5yZW5kZXJlcigpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCkpIHsK
ICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLT5ub25Qc2V1ZG9FbGVtZW50KCk7
CkBAIC02NDYsNyArNjQ2LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVs
ZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICgobV9kcmFnU291cmNlQWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlv
bkxpbmspCiAgICAgICAgICAgICAgICAgJiYgaXNIVE1MQW5jaG9yRWxlbWVudChlbGVtZW50KQot
ICAgICAgICAgICAgICAgICYmIHRvSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVudCktPmlzTGl2ZUxp
bmsoKSkgeworICAgICAgICAgICAgICAgICYmIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50Pigq
ZWxlbWVudCkuaXNMaXZlTGluaygpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUudHlwZSA9IHN0
YXRpY19jYXN0PERyYWdTb3VyY2VBY3Rpb24+KHN0YXRlLnR5cGUgfCBEcmFnU291cmNlQWN0aW9u
TGluayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICB9CkBA
IC02NTQsNyArNjU0LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICB9CiAKICAgICAv
LyBXZSBlaXRoZXIgaGF2ZSBub3RoaW5nIHRvIGRyYWcgb3Igd2UgaGF2ZSBhIHNlbGVjdGlvbiBh
bmQgd2UncmUgbm90IG92ZXIgYSBkcmFnZ2FibGUgZWxlbWVudC4KLSAgICByZXR1cm4gKHN0YXRl
LnR5cGUgJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSA/IHN0YXJ0RWxlbWVudCA6IDA7Cisg
ICAgcmV0dXJuIChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikgPyBzdGFy
dEVsZW1lbnQgOiBudWxscHRyOwogfQogCiBzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZElt
YWdlKEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5k
ZXggNTQ5NDllZTM1NTBjYjcyM2U5YTA0Y2RjZTI2ZThhMTFhNGJhOWI0MC4uY2VmMTgxZjgyM2Qw
ODZkOGYwM2NmNDg2NjYzYjg4YTljNzQ1OTc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcApAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgRnJhbWUqIEV2ZW50SGFuZGxlcjo6c3ViZnJh
bWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAjaWYgRU5BQkxFKENVUlNPUl9TVVBQT1JUKQog
c3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiBub2Rl
ICYmIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSkt
PmlzSW1hZ2VCdXR0b24oKTsKKyAgICByZXR1cm4gbm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQo
bm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmlzSW1hZ2VCdXR0b24o
KTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBub2RlJ3MgZWRpdGFibGUgYmxvY2sgaXMg
bm90IGN1cnJlbnQgZm9jdXNlZCBmb3IgZWRpdGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCmluZGV4IDc1ZDhjNWRmMjE1YWEzNGRiZjJiYTU2OWJkODE5NDU1Njg3YzQx
YWQuLmEwM2FhMGQ2ZmVkZDg0ZGI3MTk2ODljZjc4YjFmYjgxNTRiZDE4ZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTg4NSw5ICs4ODUsOSBAQCBib29sIEZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24sIEtleWJvYQogICAgICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmb2N1c2Vk
RWxlbWVudCk7CiAgICAgICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVD
b29yZGluYXRlcyhmb2N1c2VkRWxlbWVudCwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKICAg
ICAgICAgfSBlbHNlIGlmIChpc0hUTUxBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IHRvSFRNTEFyZWFFbGVtZW50KGZvY3Vz
ZWRFbGVtZW50KTsKLSAgICAgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVFbmNsb3NpbmdC
b3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlvbiwgYXJlYS0+aW1hZ2VF
bGVtZW50KCkpOwotICAgICAgICAgICAgc3RhcnRpbmdSZWN0ID0gdmlydHVhbFJlY3RGb3JBcmVh
RWxlbWVudEFuZERpcmVjdGlvbihhcmVhLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgSFRNTEFy
ZWFFbGVtZW50JiBhcmVhID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1l
bnQpOworICAgICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFy
ZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBhcmVhLmltYWdlRWxlbWVudCgp
KTsKKyAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IHZpcnR1YWxSZWN0Rm9yQXJlYUVsZW1lbnRB
bmREaXJlY3Rpb24oJmFyZWEsIGRpcmVjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBmNWEwZGRlYmQyNGNjNmJiOGQ5ZWVhMDcyMTMwZTI0
ZTFhZGQyOGYzLi5hODZlNDBjNTcwM2YxY2U0ZmIwYjU1OGU0ZjE3YjFhZjBkOTQ4MGIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNDE2LDcgKzE0MTYsNyBAQCB2b2lkIEZyYW1l
Vmlldzo6YWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShSZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1i
ZWRkZWRPYmplY3QpCiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50ID0gZW1iZWRk
ZWRPYmplY3QuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBpZiAoaXNIVE1MT2JqZWN0RWxlbWVu
dChlbGVtZW50KSB8fCBpc0hUTUxFbWJlZEVsZW1lbnQoZWxlbWVudCkpIHsKICAgICAgICAgLy8g
VGVsbCB0aGUgRE9NIGVsZW1lbnQgdGhhdCBpdCBuZWVkcyBhIHdpZGdldCB1cGRhdGUuCi0gICAg
ICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBs
dWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsK
ICAgICAgICAgaWYgKCFwbHVnaW5FbGVtZW50Lm5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCkpCiAg
ICAgICAgICAgICBwbHVnaW5FbGVtZW50LnNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwogICAg
IH0KQEAgLTI3ODksNyArMjc4OSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9i
amVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiAKICAgICBpZiAoZW1i
ZWRkZWRPYmplY3QuaXNTbmFwc2hvdHRlZFBsdWdJbigpKSB7CiAgICAgICAgIGlmIChpc0hUTUxP
YmplY3RFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVkRWxlbWVudChlbGVtZW50KSkgewot
ICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z2luRWxlbWVudCA9IHRvSFRN
TFBsdWdJbkltYWdlRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
PihlbGVtZW50KTsKICAgICAgICAgICAgIHBsdWdpbkVsZW1lbnQuY2hlY2tTbmFwc2hvdFN0YXR1
cygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTI4MDAsNyArMjgwMCw3IEBAIHZv
aWQgRnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCYg
ZW1iZWRkZWRPYmplY3QpCiAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdHVybiBpbnRvIGEgcmVh
bCB2aXJ0dWFsIGRpc3BhdGNoIGlmIHdlIGRlZmluZWQKICAgICAvLyB1cGRhdGVXaWRnZXQoUGx1
Z2luQ3JlYXRpb25PcHRpb24pIG9uIEhUTUxFbGVtZW50LgogICAgIGlmIChpc0hUTUxPYmplY3RF
bGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTEVtYmVkRWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxB
cHBsZXRFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQm
IHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAg
ICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgaWYgKHBsdWdpbkVsZW1lbnQu
bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkgewogICAgICAgICAgICAgcGx1Z2luRWxlbWVudC5j
aGVja1NuYXBzaG90U3RhdHVzKCk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDZlYTBjZGFhMDljZWU2ZTY1MDJiMmM5OGMzMTBj
MTY4NmRkY2VjYTEuLjg5MDkzOGMzNzRlZmExMjNhNzFiZjg3NDNjN2U4ZjhkYzRjMGYxNmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0yMzEsMTkgKzIzMSwxOSBA
QCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAgICAg
ICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXModG9TdHlsZWRFbGVtZW50KGVs
ZW1lbnQpLT5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CiAKICAgICAgICAgaWYgKGlzSFRNTElt
YWdlRWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2VFbGVtZW50ID0gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgVVJM
IHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7Ci0gICAgICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7Ci0gICAgICAgICAgICBhZGRJbWFn
ZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHVybCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtU
YWcpKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmtFbGVtZW50ID0gdG9IVE1M
TGlua0VsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc2hl
ZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKSkgewotICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBk
b2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmhyZWZBdHRyKSk7CisgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50JiBpbWFnZUVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCk7CisgICAgICAgICAgICBVUkwg
dXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC5mYXN0R2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlID0gaW1hZ2VFbGVtZW50LmNhY2hlZEltYWdlKCk7CisgICAgICAgICAgICBhZGRJbWFnZVRv
UmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFnZUVsZW1lbnQucmVuZGVyZXIoKSwgdXJsKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpc0hUTUxMaW5rRWxlbWVudChlbGVtZW50KSkgeworICAgICAgICAg
ICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVu
dD4oKmVsZW1lbnQpOworICAgICAgICAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHNoZWV0ID0gbGlu
a0VsZW1lbnQuc2hlZXQoKSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+
Y29tcGxldGVVUkwobGlua0VsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIp
KTsKICAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KHNoZWV0LCB1cmwpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxTdHlsZUVsZW1lbnQoZWxlbWVu
dCkpIHsKLSAgICAgICAgICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IHRvSFRNTFN0eWxl
RWxlbWVudChlbGVtZW50KS0+c2hlZXQoKSkKKyAgICAgICAgICAgIGlmIChDU1NTdHlsZVNoZWV0
KiBzaGVldCA9IGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KCplbGVtZW50KS5zaGVldCgpKQog
ICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoc2hlZXQsIFVSTCgpKTsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAK
aW5kZXggYjhjODg1MTk2NWE5MTQ0NmM2ZmVmNDk1OGJmMzFiM2JlYWZjZDgzZC4uOWQ2MjNhMTZk
MjljOGU5ZDg0MDRjMGZjODlkN2VhNWYzMjNhMDI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTY3LDEzICs2NywxMyBAQCBGb2N1c0NhbmRpZGF0ZTo6
Rm9jdXNDYW5kaWRhdGUoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAg
IEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwogCiAgICAgaWYgKGlzSFRNTEFyZWFFbGVt
ZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IHRvSFRNTEFyZWFF
bGVtZW50KG5vZGUpOwotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGFyZWEtPmlt
YWdlRWxlbWVudCgpOworICAgICAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWEgPSBkb3duY2FzdDxI
VE1MQXJlYUVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Ug
PSBhcmVhLmltYWdlRWxlbWVudCgpOwogICAgICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+cmVu
ZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2aXNpYmxlTm9kZSA9IGlt
YWdlOwotICAgICAgICByZWN0ID0gdmlydHVhbFJlY3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlv
bihhcmVhLCBkaXJlY3Rpb24pOworICAgICAgICByZWN0ID0gdmlydHVhbFJlY3RGb3JBcmVhRWxl
bWVudEFuZERpcmVjdGlvbigmYXJlYSwgZGlyZWN0aW9uKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDUxNDgwN2I5MDA2NmVlODgwMzQ1MTEyMjFjYzQxMDRk
NTdiZDUwYzYuLmI4MmY5ZWIyNGI4NzM2YmFmZTU1MzVkZTExZTNiNjY5MjA0MjlhNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC0zNTEsOCArMzUxLDggQEAgc3RhdGljIE5v
ZGUqIGFuY2VzdG9yUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMoY29uc3QgSGl0VGVzdFJlc3VsdCYg
aGl0VGVzdFJlc3VsdCwKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbnRlcmVzdGVkIGFib3V0
IHRoZSBmcmFtZSwgdXNlIGl0LgogICAgICAgICAgICAgaWYgKG5vZGVCb3VuZHMpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhpcyBub2RlIGlz
IGFuIGFyZWEgZWxlbWVudC4gIFRoZSBvbmx5IHdheSB0aGlzIGNhbiBoYXBwZW4gaXMgaWYgdGhp
cyBpcyB0aGUgZmlyc3QgY2hlY2suCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWFUYWcpKQotICAgICAg
ICAgICAgICAgICAgICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJbnRSZWN0KHRvSFRNTEFyZWFFbGVt
ZW50KG5vZGUpLT5jb21wdXRlUmVjdChoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5yZW5kZXJlcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gaGl0VGVzdFJlc3Vs
dC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCkgJiYgaXNIVE1MQXJlYUVsZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICpub2Rl
Qm91bmRzID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pigqbm9kZSku
Y29tcHV0ZVJlY3QoaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+cmVuZGVyZXIo
KSkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgKm5vZGVCb3VuZHMgPSBub2RlLT5yZW5kZXJlcigpLT5hYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA5NTkzYjc2MDQxOTk1MmQwYmMyMGEx
NGJmN2UyNjQxODA1NGQwODlmLi5hYTRiYTlmZDljOWRiYTI1MzNmYWNkZWM0ZTA2Mzc3M2JhY2Ix
NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC00
NCwxMCArNDQsMTEgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTVkdBRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUg
IlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogCkBAIC0y
NzIsMTQgKzI3MywxNCBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6YWx0RGlzcGxheVN0cmluZygp
IGNvbnN0CiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogICAgIAotICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQobV9pbm5lck5vblNoYXJl
ZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlID0gdG9IVE1M
SW1hZ2VFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
IGRpc3BsYXlTdHJpbmcoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0ciksIG1faW5uZXJO
b25TaGFyZWROb2RlLmdldCgpKTsKKyAgICBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50KCptX2lubmVy
Tm9uU2hhcmVkTm9kZSkpIHsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2UgPSBkb3du
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5vZGUpOworICAgICAgICBy
ZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpLCBtX2lu
bmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChpc0hUTUxJbnB1
dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2Rl
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW5wdXQtPmFsdCgpLCBtX2lu
bmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudCgqbV9p
bm5lck5vblNoYXJlZE5vZGUpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1faW5uZXJOb25TaGFyZWROb2RlKTsKKyAgICAg
ICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW5wdXQuYWx0KCksIG1faW5uZXJOb25TaGFyZWROb2Rl
LmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0zMzUsMTUgKzMzNiwx
NSBAQCBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwoKSBjb25zdAogICAgIGlmICgh
bV9pbm5lck5vblNoYXJlZE5vZGUpCiAgICAgICAgIHJldHVybiBVUkwoKTsKIAotICAgIGlmICgh
bV9pbm5lck5vblNoYXJlZE5vZGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpICYmICFtX2lubmVyTm9u
U2hhcmVkTm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgIGlmICghaXNIVE1MRW1iZWRF
bGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkgJiYgIWlzSFRNTE9iamVjdEVsZW1lbnQoKm1f
aW5uZXJOb25TaGFyZWROb2RlKSkKICAgICAgICAgcmV0dXJuIFVSTCgpOwogCi0gICAgSFRNTFBs
dWdJbkltYWdlRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChtX2lu
bmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7Ci0gICAgVVJMIHVybCA9IG1faW5uZXJOb25TaGFyZWRO
b2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhlbGVtZW50LT51cmwoKSkpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIGVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5v
ZGUpOworICAgIFVSTCB1cmwgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS5jb21w
bGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoZWxlbWVudC51cmwoKSkp
OwogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIFVSTCgpOwogCi0gICAg
aWYgKGVsZW1lbnQtPnNlcnZpY2VUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwgKGVsZW1l
bnQtPnNlcnZpY2VUeXBlKCkuaXNFbXB0eSgpICYmIHVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0
aCgiLnBkZiIpKSkKKyAgICBpZiAoZWxlbWVudC5zZXJ2aWNlVHlwZSgpID09ICJhcHBsaWNhdGlv
bi9wZGYiIHx8IChlbGVtZW50LnNlcnZpY2VUeXBlKCkuaXNFbXB0eSgpICYmIHVybC5wYXRoKCku
bG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKICAgICAgICAgcmV0dXJuIHVybDsKICAgICByZXR1
cm4gVVJMKCk7CiB9CkBAIC00MjQsMTIgKzQyNSwxMiBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OnRv
Z2dsZU1lZGlhRnVsbHNjcmVlblN0YXRlKCkgY29uc3QKIHZvaWQgSGl0VGVzdFJlc3VsdDo6ZW50
ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdChtZWRpYUVsZW1lbnQoKSk7Ci0gICAgaWYgKG1lZGlh
RWx0ICYmIGlzSFRNTFZpZGVvRWxlbWVudChtZWRpYUVsdCkpIHsKLSAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCogdmlkZW9FbHQgPSB0b0hUTUxWaWRlb0VsZW1lbnQobWVkaWFFbHQpOwotICAgICAg
ICBpZiAoIXZpZGVvRWx0LT5pc0Z1bGxzY3JlZW4oKSAmJiBtZWRpYUVsdC0+c3VwcG9ydHNGdWxs
c2NyZWVuKCkpIHsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQodGhpcy0+bWVk
aWFFbGVtZW50KCkpOworICAgIGlmIChtZWRpYUVsZW1lbnQgJiYgaXNIVE1MVmlkZW9FbGVtZW50
KG1lZGlhRWxlbWVudCkpIHsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50
ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlhRWxlbWVudCk7CisgICAgICAgIGlm
ICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1lZGlhRWxlbWVudC0+c3VwcG9ydHNG
dWxsc2NyZWVuKCkpIHsKICAgICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRv
cihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICAgICAgICAgIHZpZGVvRWx0
LT5lbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIHZpZGVvRWxlbWVudC5lbnRlckZ1bGxz
Y3JlZW4oKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtNDM4LDggKzQzOSw4IEBAIHZv
aWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAogYm9vbCBI
aXRUZXN0UmVzdWx0OjptZWRpYUNvbnRyb2xzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxF
KFZJREVPKQotICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdCA9IG1lZGlhRWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gbWVkaWFFbHQtPmNvbnRyb2xzKCk7CisgICAgaWYgKEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRoaXMtPm1lZGlhRWxlbWVudCgpKQorICAgICAg
ICByZXR1cm4gbWVkaWFFbGVtZW50LT5jb250cm9scygpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtNTE3LDEwICs1MTgsMTAgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0xpdmVM
aW5rKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJVUkxFbGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVudChtX2lubmVyVVJMRWxlbWVudC5n
ZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KG1faW5uZXJVUkxFbGVt
ZW50LmdldCgpKS0+aXNMaXZlTGluaygpOworICAgIGlmIChpc0hUTUxBbmNob3JFbGVtZW50KCpt
X2lubmVyVVJMRWxlbWVudCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxl
bWVudD4oKm1faW5uZXJVUkxFbGVtZW50KS5pc0xpdmVMaW5rKCk7CiAKLSAgICBpZiAobV9pbm5l
clVSTEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFUYWcpKQorICAgIGlmIChpc1NWR0FF
bGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBtX2lubmVyVVJMRWxl
bWVudC0+aXNMaW5rKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTUsMTEgKzU1NiwxMSBA
QCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKICAgICBpZiAo
IW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
aXNIVE1MVGV4dEFyZWFFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKSkKKyAgICBp
ZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2lubmVyTm9uU2hh
cmVkTm9kZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1lbnQobV9pbm5l
ck5vblNoYXJlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgpOworICAgIGlmIChpc0hUTUxJbnB1
dEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVkTm9kZSkuaXNUZXh0RmllbGQoKTsK
IAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCBmNGRhY2Zh
ZTNjMGYzYTEzZjQ5OWFhMTA5MGM4OTE0MDQyMzE0ZjY5Li4xMzljYjk3MmY1N2EwMDAwOGYxMTEw
YjkyOTRhNDBmZjgyOTFkMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjp1cGRhdGVGcm9t
RWxlbWVudCgpCiB7CiAgICAgLy8gSWYgd2UncmUgYW4gaW5wdXQgZWxlbWVudCwgd2UgbWF5IG5l
ZWQgdG8gY2hhbmdlIG91ciBidXR0b24gdGV4dC4KICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50
KGZvcm1Db250cm9sRWxlbWVudCgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dCA9IHRvSFRNTElucHV0RWxlbWVudChmb3JtQ29udHJvbEVsZW1lbnQoKSk7CisgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZm9ybUNv
bnRyb2xFbGVtZW50KCkpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC52YWx1ZVdpdGhE
ZWZhdWx0KCk7CiAgICAgICAgIHNldFRleHQodmFsdWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBiZWRkMWM3NDZkM2RiZDU4MDZhYmJh
ZDdiMTU4Mzg0NjJlNDViOWJjLi40OTcwYzA0ZWI4NTcwYzA5ODllOTU5NGRhY2QwNTFmNGY4M2Uy
Y2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCkBAIC0x
NDIsOCArMTQyLDggQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVy
ZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvbFRh
ZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSFRNTE9MaXN0RWxlbWVudChlbGVtZW50
KS0+c3RhcnQoKTsKKyAgICAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxlbWVudCkp
IHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KCpl
bGVtZW50KS5zdGFydCgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggY2I5MjBhZjYyNjdh
YzI5OTZlOWNhNzdkZjFhZWQxYjdmYmM4MDE5OS4uMzE4ZDczZGExOTcxYjNlYTE5OWZiNjc5ZDA1
NjhiZDMxYmQ2OWM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuY3BwCkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRl
ZE9iamVjdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQuaXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIHNuYXBzaG90ID0gdG9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50KHBsdWdJbkVsZW1lbnQpLnNuYXBzaG90SW1hZ2UoKTsKKyAgICBJbWFnZSogc25hcHNo
b3QgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihwbHVnSW5FbGVtZW50KS5zbmFw
c2hvdEltYWdlKCk7CiAgICAgaWYgKHNuYXBzaG90KQogICAgICAgICBwYWludFNuYXBzaG90SW1h
Z2UocGFpbnRJbmZvLCBwYWludE9mZnNldCwgc25hcHNob3QpOwogfQpAQCAtNDk1LDcgKzQ5NSw3
IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAgaWYgKCF3YXNNaXNz
aW5nV2lkZ2V0ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRTaXplLndpZHRoKCkgJiYgbmV3U2l6
ZS5oZWlnaHQoKSA+PSBvbGRTaXplLmhlaWdodCgpKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCYgZWxlbWVudCA9IGZyYW1lT3duZXJFbGVtZW50KCk7CiAgICAgICAgIGlmIChlbGVt
ZW50LmlzUGx1Z2luRWxlbWVudCgpICYmIHRvSFRNTFBsdWdJbkVsZW1lbnQoZWxlbWVudCkuaXNQ
bHVnSW5JbWFnZUVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGVsZW1lbnQp
OworICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAg
ICBpZiAocGx1Z0luSW1hZ2VFbGVtZW50LmRpc3BsYXlTdGF0ZSgpID4gSFRNTFBsdWdJbkVsZW1l
bnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCAmJiBwbHVnSW5JbWFnZUVsZW1lbnQuc25hcHNob3REZWNp
c2lvbigpID09IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6Ok1heVNuYXBzaG90V2hlblJlc2l6ZWQp
IHsKICAgICAgICAgICAgICAgICBwbHVnSW5JbWFnZUVsZW1lbnQuc2V0TmVlZHNDaGVja0ZvclNp
emVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkuYWRkRW1iZWRk
ZWRPYmplY3RUb1VwZGF0ZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWVsZHNldC5oCmluZGV4IGE0MDVhYTRkNmQ4NjZlNWVhMzEyNjQwMTM3Yzk0YmY1MGM3ZWU1MWQu
LjlmNjcyZDdhNjE4ZDBjYTBlOGFkNjIwNmQwNGEzZTkxNTkxMGMyMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoK
ICAgICBlbnVtIEZpbmRMZWdlbmRPcHRpb24geyBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93LCBJ
bmNsdWRlRmxvYXRpbmdPck91dE9mRmxvdyB9OwogICAgIFJlbmRlckJveCogZmluZExlZ2VuZChG
aW5kTGVnZW5kT3B0aW9uID0gSWdub3JlRmxvYXRpbmdPck91dE9mRmxvdykgY29uc3Q7CiAKLSAg
ICBIVE1MRmllbGRTZXRFbGVtZW50JiBmaWVsZFNldEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
b0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsgfQorICAgIEhUTUxG
aWVsZFNldEVsZW1lbnQmIGZpZWxkU2V0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogcHJpdmF0
ZToKICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IDUwMWM1
MWVhNGMzOGM0NTJjZTU3MWY5MGU0YWZjYzdiODc0NzQ0MWEuLjI5NTFjZmE5ZGI2ZTA4YTRmMmQ2
ZTJiMzg0ZjliODc2MDM0YzJlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAtNzAsNyArNzAsNyBAQCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZpbGVVcGxvYWRDb250cm9sKCkKIAogSFRNTElucHV0
RWxlbWVudCYgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkpOwor
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3Vz
KCkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVu
dCgpCkBAIC0yNTUsNyArMjU1LDcgQEAgSFRNTElucHV0RWxlbWVudCogUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlucHV0RWxlbWVu
dCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlucHV0RWxlbWVudCgp
LnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBidXR0b25Ob2RlICYmIGJ1
dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9k
ZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgOiAwOworICAgIHJldHVybiBidXR0
b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJbnB1dEVsZW1l
bnQoYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihidXR0b25Ob2RlKSA6
IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0dG9uVmFs
dWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKaW5kZXggZDhiYTMx
YTBmZjVlN2Y3M2RkYjA3ZGVjMjEzZTllMzljYTM0NjA2Mi4uNDM5MzhjZjQwYTMyOTJiYzJmZWNj
ZjU0NjEyNTZjMDIyZWEzNDQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWUuY3BwCkBAIC0zNSw3ICszNSw3IEBAIFJlbmRlckZyYW1lOjpSZW5kZXJGcmFtZShIVE1MRnJh
bWVFbGVtZW50JiBmcmFtZSwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAKIEhUTUxGcmFt
ZUVsZW1lbnQmIFJlbmRlckZyYW1lOjpmcmFtZUVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVy
biB0b0hUTUxGcmFtZUVsZW1lbnQoUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgp
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudD4oUmVuZGVyRnJhbWVCYXNl
OjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogRnJhbWVFZGdlSW5mbyBSZW5kZXJGcmFtZTo6
ZWRnZUluZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAKaW5kZXggNDQ4NTEzN2NkMGMzYWQ4YTZlNWE0ZDFhMTAyZTZjNzFmOWQzMWE5Ny4uMTc3
MTdkODBlYmRhM2RkY2E0NzA5MzU2ODJjYjNiZTdmYjFkZmNjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIFJlbmRlckZy
YW1lU2V0Ojp+UmVuZGVyRnJhbWVTZXQoKQogCiBIVE1MRnJhbWVTZXRFbGVtZW50JiBSZW5kZXJG
cmFtZVNldDo6ZnJhbWVTZXRFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MRnJh
bWVTZXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxGcmFtZVNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIFJlbmRl
ckZyYW1lU2V0OjpHcmlkQXhpczo6R3JpZEF4aXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCmluZGV4IGU0MmZlOGQyMjhlMmExNDRmZTQ1ZTQwYmQ2
ZjFiZDA1MDgyOGI0N2YuLjYyMWNmMjhjMGYwOTRlNzc2MzJmOGRhOWE0MGFiMDE1OTEwZDMzZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKQEAg
LTUwLDcgKzUwLDcgQEAgUmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENhbnZhcyhIVE1MQ2Fu
dmFzRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHkKIAogSFRNTENhbnZhc0VsZW1l
bnQmIFJlbmRlckhUTUxDYW52YXM6OmNhbnZhc0VsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVy
biB0b0hUTUxDYW52YXNFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQog
CiBib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAppbmRleCAwZWRjZTJkYmQ2ZTg5NWExNjMw
Y2NhYzJjZDYzOWNhOWEzZDk3OTlhLi45MGM2MzU3YmU5MTdmMjQ2M2FkYTA5NDJiZDYwODUzNTRi
NjdlZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcApAQCAt
NDYsNyArNDYsNyBAQCBSZW5kZXJJRnJhbWU6OlJlbmRlcklGcmFtZShIVE1MSUZyYW1lRWxlbWVu
dCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bAogCiBIVE1MSUZyYW1lRWxlbWVu
dCYgUmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9I
VE1MSUZyYW1lRWxlbWVudChSZW5kZXJGcmFtZUJhc2U6OmZyYW1lT3duZXJFbGVtZW50KCkpOwor
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oUmVuZGVyRnJhbWVCYXNlOjpm
cmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogYm9vbCBSZW5kZXJJRnJhbWU6OnNob3VsZENvbXB1
dGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAppbmRleCBkNjE1NWZjNmQ2ZTQ4NjYwNTc3NDA2OWFiYmYzNzNiZDZlNGZhOGVmLi5l
ODU4NTgyYWM3NGJkYTgyMzQwZTI4NTEwNTA2Mjc2ZTQ0NjM5NmNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCBSZW5kZXJJbWFn
ZTo6UmVuZGVySW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5
bGUsIFN0eWxlSW1hZwogICAgIGltYWdlUmVzb3VyY2UoKS5pbml0aWFsaXplKHRoaXMpOwogCiAg
ICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgbV9oYXNTaGFkb3dD
b250cm9scyA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5oYXNTaGFkb3dDb250cm9scygp
OworICAgICAgICBtX2hhc1NoYWRvd0NvbnRyb2xzID0gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVu
dD4oZWxlbWVudCkuaGFzU2hhZG93Q29udHJvbHMoKTsKIH0KIAogUmVuZGVySW1hZ2U6OlJlbmRl
ckltYWdlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUsIFN0
eWxlSW1hZ2UqIHN0eWxlSW1hZ2UpCkBAIC01MTcsMjAgKzUxNywyMCBAQCB2b2lkIFJlbmRlcklt
YWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50SW5mbyYgcGFpbnRJbmZvKQogICAg
IGlmICghZm9jdXNlZEVsZW1lbnQgfHwgIWlzSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEFyZWFFbGVtZW50KiBhcmVhRWxlbWVudCA9
IHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsKLSAgICBpZiAoYXJlYUVsZW1lbnQt
PmltYWdlRWxlbWVudCgpICE9IGVsZW1lbnQoKSkKKyAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWFF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOworICAg
IGlmIChhcmVhRWxlbWVudC5pbWFnZUVsZW1lbnQoKSAhPSBlbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEV2ZW4gaWYgdGhlIHRoZW1lIGhhbmRsZXMgZm9jdXMgcmluZyBkcmF3
aW5nIGZvciBlbnRpcmUgZWxlbWVudHMsIGl0IHdvbid0IGRvIGl0IGZvcgogICAgIC8vIGFuIGFy
ZWEgd2l0aGluIGFuIGltYWdlLCBzbyB3ZSBkb24ndCBjYWxsIFJlbmRlclRoZW1lOjpzdXBwb3J0
c0ZvY3VzUmluZyBoZXJlLgogCi0gICAgUGF0aCBwYXRoID0gYXJlYUVsZW1lbnQtPmNvbXB1dGVQ
YXRoKHRoaXMpOworICAgIFBhdGggcGF0aCA9IGFyZWFFbGVtZW50LmNvbXB1dGVQYXRoKHRoaXMp
OwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgYWRkaXRpb25hbCBjb2RlIHRvIGNsaXAgdGhlIHBhdGggdG8gdGhlIGlt
YWdlJ3MgYm91bmRpbmcgYm94PwogCi0gICAgUmVuZGVyU3R5bGUqIGFyZWFFbGVtZW50U3R5bGUg
PSBhcmVhRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBhcmVhRWxl
bWVudFN0eWxlID0gYXJlYUVsZW1lbnQuY29tcHV0ZWRTdHlsZSgpOwogICAgIHVuc2lnbmVkIHNo
b3J0IG91dGxpbmVXaWR0aCA9IGFyZWFFbGVtZW50U3R5bGUtPm91dGxpbmVXaWR0aCgpOwogICAg
IGlmICghb3V0bGluZVdpZHRoKQogICAgICAgICByZXR1cm47CkBAIC01NjAsOCArNTYwLDggQEAg
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsdCA9IChlbGVt
ZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkpID8gdG9IVE1MSW1hZ2VFbGVt
ZW50KGVsZW1lbnQoKSkgOiAwOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0
ZVNvdXJjZU92ZXI7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gKGVsZW1l
bnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKSkgPyBkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWxlbWVudCA/IGltYWdlRWxlbWVudC0+Y29tcG9zaXRl
T3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgSW1hZ2UqIGltYWdlID0gaW1h
Z2VSZXNvdXJjZSgpLmltYWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGlu
ZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBpbWFnZSwgTGF5b3V0
U2l6ZShyZWN0LnNpemUoKSkpOwogICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBvcmll
bnRhdGlvbkRlc2NyaXB0aW9uKHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkpOwpAQCAt
NjIyLDggKzYyMiw4IEBAIExheW91dFVuaXQgUmVuZGVySW1hZ2U6Om1pbmltdW1SZXBsYWNlZEhl
aWdodCgpIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBj
b25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBlbGVtZW50KCkgJiYgaXNIVE1MSW1h
Z2VFbGVtZW50KGVsZW1lbnQoKSkgPyB0b0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKSA6IDA7
Ci0gICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChpLT5mYXN0R2V0QXR0
cmlidXRlKHVzZW1hcEF0dHIpKSA6IDA7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UgPSBl
bGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1M
SW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaW1hZ2UgPyBp
bWFnZS0+dHJlZVNjb3BlKCkuZ2V0SW1hZ2VNYXAoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1dGUodXNl
bWFwQXR0cikpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKQEAgLTY1
NSwxMCArNjU1LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRleHQoKQogICAgIGlm
ICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTElucHV0RWxlbWVudChl
bGVtZW50KCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50KGVs
ZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50
KCkpLT5hbHRUZXh0KCk7CisgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudCgqZWxlbWVudCgpKSkK
KyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQo
KSkuYWx0VGV4dCgpOworICAgIGVsc2UgaWYgKGlzSFRNTEltYWdlRWxlbWVudCgqZWxlbWVudCgp
KSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKmVsZW1l
bnQoKSkuYWx0VGV4dCgpOwogfQogCiBib29sIFJlbmRlckltYWdlOjpjYW5IYXZlQ2hpbGRyZW4o
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAppbmRleCAyMWEwMTAzYzRhNTdmMjk1MGMzYWFkZTdhYzhmM2FiNGI5MDEyNTAzLi4zNzFk
ZjQwZWFmNjAzMTY5ZmIzZDI4OTNlNzljNTc2NjUwY2M3MDA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNzQsNyArNzQsNyBAQCBD
YW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3koY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlcgogewogICAgIEFTU0VSVChyZW5kZXJlci5pc0NhbnZhcygp
KTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gdG9IVE1MQ2Fu
dmFzRWxlbWVudChyZW5kZXJlci5ub2RlKCkpOworICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIubm9kZSgpKTsK
ICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdD
b250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkp
CiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFzOwpAQCAtMzAwLDcgKzMwMCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcigpCiAK
ICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKENBKQogICAgIGlmICghY29tcG9zaXRvcigpLmFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSAmJiByZW5kZXJlcigpLmlzQ2FudmFzKCkpIHsKLSAg
ICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRNTENhbnZhc0VsZW1l
bnQocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVu
dCgpKTsKICAgICAgICAgaWYgKGNhbnZhcy0+c2hvdWxkQWNjZWxlcmF0ZShjYW52YXMtPnNpemUo
KSkpCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyh0
cnVlKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52
YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0Fz
TGF5ZXJDb250ZW50cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAgICAgIGNv
bnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQogICAgICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjb250ZXh0LT5wbGF0
Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJGb3JDYW52YXMpOwogICAg
ICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxNTUzODIyNDhmMjZhNjUw
NjU2ZDg3MDRkOGZiNmIzYWQwY2Q2ODkwLi40YmU0NjkxZDAzYWIyNTAwNmQ0Y2UyNjMxYzk1NWU4
NzQxZTBjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcApAQCAtMjQzNSw3ICsyNDM1LDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYKICNpZiBVU0UoQ09NUE9TSVRJTkdfRk9SX1NNQUxMX0NBTlZBU0VTKQogICAgICAgICBi
b29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcgPSB0cnVlOwogI2Vsc2UK
LSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRNTENhbnZhc0VsZW1lbnQo
cmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9
IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpOwogICAgICAg
ICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcgPSBjYW52YXMtPnNp
emUoKS5hcmVhKCkgPj0gY2FudmFzQXJlYVRocmVzaG9sZFJlcXVpcmluZ0NvbXBvc2l0aW5nOwog
I2VuZGlmCiAgICAgICAgIENhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kgY29tcG9zaXRpbmdTdHJh
dGVneSA9IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDU3NTlhYmMzNzhmNDAzZjA5NTBi
NWE1YmM3ZGJjNGU4OGQzOWZjNGYuLjYyYWVkYzNhNzFjYzQ2YzIzZmViZTIxODhhODQ3M2Q0ZDg2
ZmQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAg
LTEwMCw3ICsxMDAsNyBAQCBSZW5kZXJMaXN0Qm94Ojp+UmVuZGVyTGlzdEJveCgpCiAKIEhUTUxT
ZWxlY3RFbGVtZW50JiBSZW5kZXJMaXN0Qm94OjpzZWxlY3RFbGVtZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkpOworICAg
IHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygp
KTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCkBAIC0xMTcs
OSArMTE3LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAg
ICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgp
LmZvbnQoKTsKICAgICAgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKQot
ICAgICAgICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0
SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgICAgICAgICAgdGV4dCA9IGRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXNIVE1MT3B0R3JvdXBFbGVtZW50
KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9IHRvSFRNTE9wdEdyb3VwRWxlbWVu
dChlbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gZG93
bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAg
ICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKICAg
ICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygp
LCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKQEAgLTM4NywxMyArMzg3LDEzIEBAIHZvaWQgUmVu
ZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmCiAgICAgU3RyaW5nIGl0ZW1UZXh0OwogICAgIGJvb2wgaXNPcHRpb25F
bGVtZW50ID0gaXNIVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpOwogICAgIGlmIChp
c09wdGlvbkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChs
aXN0SXRlbUVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAg
ICAgIGl0ZW1UZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1l
bnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICBlbHNlIGlmIChpc0hU
TUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSkKLSAgICAgICAgaXRlbVRleHQgPSB0
b0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsK
KyAgICAgICAgaXRlbVRleHQgPSBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqbGlzdEl0
ZW1FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIGFwcGx5VGV4dFRyYW5zZm9ybShzdHls
ZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRleHRDb2xvciA9IGxpc3RJdGVtRWxl
bWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKGlzT3B0aW9uRWxlbWVudCAm
JiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCktPnNlbGVjdGVkKCkpIHsKKyAg
ICBpZiAoaXNPcHRpb25FbGVtZW50ICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlz
dEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChmcmFtZSgpLnNlbGVjdGlv
bigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSA9
PSAmc2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0gdGhlbWUoKS5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiAgICAgICAgIC8vIEhvbm9yIHRo
ZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBkaXNhYmxlZCBpdGVtcwpAQCAtNDI2LDcgKzQyNiw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgSFRNTEVsZW1lbnQqIGxpc3RJdGVtRWxlbWVu
dCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29sb3IgYmFja0NvbG9yOwotICAgIGlm
IChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxl
bWVudChsaXN0SXRlbUVsZW1lbnQpLT5zZWxlY3RlZCgpKSB7CisgICAgaWYgKGlzSFRNTE9wdGlv
bkVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
Kmxpc3RJdGVtRWxlbWVudCkuc2VsZWN0ZWQoKSkgewogICAgICAgICBpZiAoZnJhbWUoKS5zZWxl
Y3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50
KCkgPT0gJnNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgICAgIGJhY2tDb2xvciA9IHRoZW1lKCku
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogICAgICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCAzNjhlZDll
MmJlZWIxZjg4YjU1NDZiN2ZkNjgzNGJlNjFlNmJhMjdhLi5mYTAxMmM5ZThiYmMzYTY3MzczYjIw
NDAzYmU1MWUwMDE5NmQzM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBpbmxpbmUgaW50IFJlbmRlckxpc3RJdGVt
OjpjYWxjVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9leHBsaWNpdFZhbHVlOwogCiAg
ICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QodGhpcyk7Ci0gICAgSFRNTE9MaXN0RWxl
bWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlzdC0+aGFzVGFnTmFtZShvbFRhZykpID8g
dG9IVE1MT0xpc3RFbGVtZW50KGxpc3QpIDogbnVsbHB0cjsKKyAgICBIVE1MT0xpc3RFbGVtZW50
KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNUYWdOYW1lKG9sVGFnKSkgPyBkb3du
Y2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxwdHI7CiAgICAgaW50IHZhbHVlU3Rl
cCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQo
KSkKICAgICAgICAgdmFsdWVTdGVwID0gLTE7CkBAIC01MDEsNyArNTAxLDcgQEAgdm9pZCBSZW5k
ZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBib29sIGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0gICAgSFRNTE9MaXN0RWxlbWVudCog
b0xpc3RFbGVtZW50ID0gKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5oYXNUYWdOYW1lKG9sVGFnKSkg
PyB0b0hUTUxPTGlzdEVsZW1lbnQobGlzdE5vZGUpIDogbnVsbHB0cjsKKyAgICBIVE1MT0xpc3RF
bGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUo
b2xUYWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3ROb2RlKSA6IG51bGxwdHI7
CiAgICAgaWYgKG9MaXN0RWxlbWVudCkgewogICAgICAgICBvTGlzdEVsZW1lbnQtPml0ZW1Db3Vu
dENoYW5nZWQoKTsKICAgICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVsZW1lbnQtPmlzUmV2
ZXJzZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJx
dWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRl
eCBiZGVhOTc5MjkyOTZkZDBhNTZiMzZhY2I5M2JiYjlhYThkY2I5Y2IyLi4yNWE5N2U2YjNhNThl
OTg4ZDZhYTQ2NTEzODlkZjc2ODNhMDAyNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03Myw4ICs3Myw4IEBAIGludCBSZW5kZXJNYXJxdWVlOjpt
YXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1bHQgPSBtX2xheWVyLT5yZW5kZXJl
cigpLnN0eWxlKCkubWFycXVlZVNwZWVkKCk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fbGF5
ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhh
c1RhZ05hbWUobWFycXVlZVRhZykpCi0gICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwg
dG9IVE1MTWFycXVlZUVsZW1lbnQoZWxlbWVudCktPm1pbmltdW1EZWxheSgpKTsKKyAgICBpZiAo
ZWxlbWVudCAmJiBpc0hUTUxNYXJxdWVlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgcmVzdWx0
ID0gc3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxIVE1MTWFycXVlZUVsZW1lbnQ+KCplbGVtZW50
KS5taW5pbXVtRGVsYXkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggMTM0Y2Y5NDBmOGM5MzFiYTM0
MTdkZDBmMmMxMjA5YjgwZjlkZmVjOS4uMzdlZWE1ZWU3MjNiZGY4ZGQ1ZTU5MDUxZTU5OGM5OWI4
OWM0NDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBzaXplX3Qgc2VsZWN0ZWRPcHRpb25Db3VudChjb25z
dCBSZW5kZXJNZW51TGlzdCYgcmVuZGVyTWVudUxpc3QpCiAKICAgICBzaXplX3QgY291bnQgPSAw
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKSB7Ci0gICAg
ICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hUTUxPcHRp
b25FbGVtZW50KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmIChpc0hUTUxP
cHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICArK2NvdW50OwogICAgIH0K
ICAgICByZXR1cm4gY291bnQ7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAKIEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJNZW51TGlz
dDo6c2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTFNlbGVjdEVsZW1l
bnQobm9kZUZvck5vbkFub255bW91cygpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxp
c3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0
aW9uc1dpZHRoKCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSB0b0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7Cisg
ICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgIGFwcGx5VGV4dFRy
YW5zZm9ybShzdHlsZSgpLCB0ZXh0LCAnICcpOwogICAgICAgICBpZiAodGhlbWUoKS5wb3B1cE9w
dGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgaW4gdGhlIG9w
dGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVz
IGZvciBub3cuCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4
dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAgIGlmIChpID49IDAgJiYgaSA8IHNpemUp
IHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKICAgICAgICAgaWYg
KGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIHRleHQgPSB0b0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CisgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgICAgICBtX29w
dGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAgICB9CiAgICAgfQpA
QCAtNDUxLDkgKzQ1MSw5IEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdAogICAgIFN0cmluZyBpdGVtU3RyaW5nOwogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoaXNIVE1MT3B0R3JvdXBF
bGVtZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtU3RyaW5nID0gdG9IVE1MT3B0R3JvdXBFbGVt
ZW50KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOworICAgICAgICBpdGVtU3RyaW5nID0gZG93
bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAg
ICAgZWxzZSBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgaXRlbVN0
cmluZyA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnRleHRJbmRlbnRlZFRvUmVzcGVj
dEdyb3VwTGFiZWwoKTsKKyAgICAgICAgaXRlbVN0cmluZyA9IGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogCiAg
ICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1TdHJpbmcsICcgJyk7CiAgICAgcmV0
dXJuIGl0ZW1TdHJpbmc7CkBAIC02NTQsNyArNjU0LDcgQEAgYm9vbCBSZW5kZXJNZW51TGlzdDo6
aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIGlmIChsaXN0SW5k
ZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgcmV0dXJuIGlzSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+
c2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CiB9CiAKIHZv
aWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAppbmRleCBlNjI0Njg2YzVhNDRj
YjA0NzAxOGJhMTJjMTUzZWFlM2Y2YmFkNzMzLi45ZWRiYmQ5OWI1MGZmZDBhOTRmNzY4ODY5MzQ4
YjlmYWEzNzhiYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWV0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAK
QEAgLTQ0LDEwICs0NCwxMCBAQCBIVE1MTWV0ZXJFbGVtZW50KiBSZW5kZXJNZXRlcjo6bWV0ZXJF
bGVtZW50KCkgY29uc3QKICAgICBBU1NFUlQoZWxlbWVudCgpKTsKIAogICAgIGlmIChpc0hUTUxN
ZXRlckVsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTE1ldGVyRWxlbWVu
dChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1ldGVyRWxlbWVudD4o
ZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7Ci0gICAg
cmV0dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1lbnQ+KGVsZW1lbnQoKS0+c2hhZG93SG9zdCgp
KTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCmluZGV4IDI0MjVmMDYyMzFmZTg5
MTViZTg5MTZkZTkyMTI3YWMxZGUxMDIxYjYuLjJiNGYwNTdhYTEzZTdjZjMzNzYyN2NiMjcwZjMy
NzIyNDJiZDY2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
cm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNz
LmNwcApAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBSZW5kZXJQcm9ncmVzczo6dXBkYXRlQW5p
bWF0aW9uU3RhdGUoKQogSFRNTFByb2dyZXNzRWxlbWVudCogUmVuZGVyUHJvZ3Jlc3M6OnByb2dy
ZXNzRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hUTUxQcm9ncmVzc0Vs
ZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChl
bGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFByb2dyZXNzRWxlbWVudD4o
ZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7Ci0gICAg
cmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQ+KGVsZW1lbnQoKS0+c2hhZG93
SG9zdCgpKTsKIH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggYWViODhiZTE4YWNkOWRiOWE2MzgxZTNm
NmMwMGQ2NjliYTNhZTk3MS4uMTA3OTc5ZTFlZjlmZTNiMDAzNWMzZjc2N2Y3ZDc5YjA3M2RjMGJm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKQEAgLTYwLDcg
KzYwLDcgQEAgUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVyKCkKIAogSFRNTElucHV0RWxlbWVu
dCYgUmVuZGVyU2xpZGVyOjplbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MSW5w
dXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIGludCBSZW5kZXJT
bGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIC8qZmlyc3RMaW5lKi8s
IExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAKaW5kZXgg
Nzk3OGZlMjFlNGRjZDZkNzlmYjRiNGZiNDAwOTJlOTIxZmFiY2YxNi4uZGUzNzI2ZDJjMzZlZDNi
NWE1YWJiY2Q4YmRlMzBmYjY2YjllNmRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCkBAIC02NCw3ICs2NCw3IEBAIFJl
bmRlclNuYXBzaG90dGVkUGx1Z0luOjp+UmVuZGVyU25hcHNob3R0ZWRQbHVnSW4oKQogCiBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50JiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6cGx1Z0luSW1hZ2VF
bGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpmcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmZyYW1l
T3duZXJFbGVtZW50KCkpOwogfQogCiB2b2lkIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjpsYXlv
dXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
aW5kZXggOGIwZDBlZmJiM2Q1ZmI2MGVjNWE4MjE3OGEyMzMxNDRmOGI1MjlkNC4uNDAzNWY2NjA0
MTllYWY1MDgzYWRiM2QzZWI4MWMyZDlhMTk4Nzc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00OCw3ICs0OCw3IEBAIFJlbmRlclRl
eHRDb250cm9sOjp+UmVuZGVyVGV4dENvbnRyb2woKQogCiBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCYgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdAog
ewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1l
bnQqIFJlbmRlclRleHRDb250cm9sOjppbm5lclRleHRFbGVtZW50KCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwCmluZGV4IDkxZGI1M2Q5MDU1NzkwMWJjOWVjY2VmZThmY2Q2M2EwNzBlY2QyY2UuLjUyNzE4
ZGEzYjE1MDU2ZTczYzgyYzViNzA2NWJkNDZhNTQ5OTFjYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcApAQCAt
NDUsNyArNDUsNyBAQCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6flJlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lKCkKIAogSFRNTFRleHRBcmVhRWxlbWVudCYgUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmU6OnRleHRBcmVhRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTFRl
eHRBcmVhRWxlbWVudChSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEZvcm1Db250cm9sRWxlbWVudCgp
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oUmVuZGVyVGV4dENv
bnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25J
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDU5NTdlZTdhNjhiOTJi
ZGJjMjZkMDJjYWIwMGJmYzlkYjkyYWQ2MmQuLmMyZWM3ZDY3NDYwNTAzZTliZmNjZWEwMTQ4ZGI3
M2FkYmZmYmU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiBkaXJlY3Rpb24KIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxJbnB1
dEVsZW1lbnQoUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KFJlbmRlclRleHRDb250cm9sOjp0
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAppbmRleCBhMTUwOGI4OGJiODk5ZGYwNTgxZTJkNDYwZDRjODgwYWM1
M2Q4MzBkLi5mYjVlZTVjZTNmMmFkZTA4ZGRiNzMwYTQzMzczODNmMjc3MzAwMGRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTk4MCw3ICs5ODAsNyBAQCB2
b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghaW5wdXQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gdG9IVE1MRGF0YUxpc3RFbGVt
ZW50KGlucHV0LT5saXN0KCkpOworICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0g
ZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQtPmxpc3QoKSk7CiAgICAgaWYgKCFk
YXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDM2LDggKzEwMzYsOCBAQCB2b2lkIFJl
bmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogbm9kZSA9IG9wdGlv
bnMtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBBU1NFUlQoaXNIVE1MT3B0aW9uRWxlbWVudChu
b2RlKSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1M
T3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gb3B0aW9uRWxlbWVu
dC0+dmFsdWUoKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbkVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOworICAgICAgICBTdHJpbmcgdmFsdWUg
PSBvcHRpb25FbGVtZW50LnZhbHVlKCk7CiAgICAgICAgIGlmICghaW5wdXQtPmlzVmFsaWRWYWx1
ZSh2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZG91YmxlIHBhcnNlZFZh
bHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5wdXQtPnNhbml0aXplVmFsdWUodmFs
dWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCA5
NGUxYmRiM2ZhYWZmY2Q4YzgxOTI0Yjg0YTJhYTRlMWMwYzM5ZjhkLi43ODliZWY1NjFiNTJjNTI1
OWQ1NjdkMzJkZjAyN2YxZTFhZDc2ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCkBAIC02NzIsNyArNjcyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBj
b24KIAogICAgIC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAgICBpZiAoYm94LmlzTWVudUxpc3Qo
KSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CisgICAg
aWYgKGJveC5pc01lbnVMaXN0KCkgJiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KGJveC5u
b2RlKCkpLT5tdWx0aXBsZSgpKSB7CiAgICAgICAgIGludCBzaXplID0gMjsKICAgICAgICAgaW50
IGNvdW50ID0gMzsKICAgICAgICAgaW50IHBhZGRpbmcgPSAzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IGQ0Y2FiMmIyYzk3NjVhOGQ0YmU5ZTg1NTFl
ZTBjNmJiMzVhOTY2NzQuLmM1YWZlYmQzMWMyYjVlMTg3NTU3YjI4MGEwNGY2ZmU1ZjQ2MjQ2M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE2Nzgs
NyArMTY3OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQCiAKICAgICBOU1NlYXJjaEZpZWxk
Q2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAgICBpZiAoIWlucHV0LT5pc0Rpc2Fi
bGVkRm9ybUNvbnRyb2woKSAmJiAoaW5wdXQtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgIXRvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQoaW5wdXQpLT5pc1JlYWRPbmx5KCkpKQorICAgIGlmICgh
aW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIChpbnB1dC0+aXNUZXh0Rm9ybUNvbnRy
b2woKSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCppbnB1dCkuaXNS
ZWFkT25seSgpKSkKICAgICAgICAgdXBkYXRlUHJlc3NlZFN0YXRlKFtzZWFyY2ggY2FuY2VsQnV0
dG9uQ2VsbF0sIG8pOwogICAgIGVsc2UgaWYgKFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIGlz
SGlnaGxpZ2h0ZWRdKQogICAgICAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBzZXRIaWdo
bGlnaHRlZDpOT107CkBAIC0xODYxLDEzICsxODYxLDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1hZ2VFbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1h
Z2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHBsdWdJbkVsZW1lbnQpOworICAg
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCpwbHVnSW5FbGVtZW50KTsKIAotICAgIEltYWdlKiBzbmFw
c2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC0+c25hcHNob3RJbWFnZSgpOworICAgIEltYWdlKiBz
bmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC5zbmFwc2hvdEltYWdlKCk7CiAgICAgaWYgKCFz
bmFwc2hvdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbiogcGx1Z0luUmVuZGVyZXIgPSB0b1JlbmRlclNuYXBzaG90dGVkUGx1Z0luKHBsdWdJbklt
YWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4qIHBs
dWdJblJlbmRlcmVyID0gdG9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbihwbHVnSW5JbWFnZUVsZW1l
bnQucmVuZGVyZXIoKSk7CiAgICAgRmxvYXRQb2ludCBzbmFwc2hvdEFic1BvcyA9IHBsdWdJblJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICBzbmFwc2hvdEFic1Bvcy5tb3ZlKHBsdWdJ
blJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBwbHVnSW5SZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwg
cGx1Z0luUmVuZGVyZXItPmJvcmRlclRvcCgpICsgcGx1Z0luUmVuZGVyZXItPnBhZGRpbmdUb3Ao
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCmluZGV4IDVjOTYw
NmZiNjhjNGVhZmVhNzY4ZTcwMWZhMzZjOWIzNDUwY2IwNTIuLjZlYWZmMzNiYjUxZjUwNTRhNWJm
ZGU0YzFiNTBlNzk3MjYyYzMwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZGVvLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgUmVuZGVyVmlkZW86OmxheW91dCgpCiAg
ICAgCiBIVE1MVmlkZW9FbGVtZW50JiBSZW5kZXJWaWRlbzo6dmlkZW9FbGVtZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KFJlbmRlck1lZGlhOjptZWRpYUVsZW1l
bnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KFJlbmRlck1lZGlh
OjptZWRpYUVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyVmlkZW86OnVwZGF0ZUZyb21FbGVt
ZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcApp
bmRleCA3NDg2NjBmYzQ5MmIzNjEzM2VlZTM1ZjIzOTA5ODZkOTdjNDc2MWQ5Li4zZjIxMTFmNTNk
NGVlYjdhZDA1Y2IzNjA0NzU5YTY0OGM1OGIyNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC05Myw3ICs5Myw3IEBAIEltYWdlKiBTVkdJ
bWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKG5vZGUg
JiYgaXNIVE1MSW1hZ2VFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdXJsU3RyaW5nID0gdG9IVE1MSW1hZ2VFbGVtZW50KG5vZGUpLT5pbWFnZVNvdXJjZVVSTCgp
OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVybFN0cmluZyA9IGRvd25jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQ+KCpub2RlKS5pbWFnZVNvdXJjZVVSTCgpOwogICAgICAgICBVUkwgdXJsID0g
bm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwogICAgICAgICBpbWFnZUZv
ckNvbnRhaW5lci0+c2V0VVJMKHVybCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL3N2Z3RhZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5pbgppbmRleCA2
N2Y3MmQ4NDQ2MzVmYTIxMDdkM2UzNjE5ZmM3M2Q5ZGE3NTgwZWI4Li5iNzcwOGMxMTFjYmZiMDJh
NzA4M2RkZmYwZGRmNTI5NjhkYWY3MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
c3ZndGFncy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5pbgpAQCAtMyw3ICsz
LDcgQEAgbmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKIGZhbGxiYWNr
SW50ZXJmYWNlTmFtZT0iU1ZHVW5rbm93bkVsZW1lbnQiCiBmYWxsYmFja0pTSW50ZXJmYWNlTmFt
ZT0iU1ZHRWxlbWVudCIKIAotYQorYSBnZW5lcmF0ZVR5cGVIZWxwZXJzCiAjaWYgRU5BQkxFX1NW
R19GT05UUwogYWx0R2x5cGggZ2VuZXJhdGVUeXBlSGVscGVycwogYWx0R2x5cGhEZWYgZ2VuZXJh
dGVUeXBlSGVscGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDBhMDI2
N2FjZDQ3NTQ3NWE3MDA4M2JiMWU4Yjg3NzVkOGU3ZWEyMWUuLjA2NDg5NmRkNmY4ZWQ3MjVkMWM4
YTAwNjNiZjc1OGE1YjRjZmMyNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEludGVybmFsczo6c2V0U2hhZG93UHNldWRvSWQoRWxl
bWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQwogU3RyaW5nIEludGVy
bmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkpIHsKLSAgICAg
ICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRGb3JtQ29udHJvbEVsZW1l
bnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KTsKKyAgICAgICAgY29u
c3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRGb3JtQ29udHJvbEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpOwogICAgICAgICBp
ZiAoIXRleHRGb3JtQ29udHJvbEVsZW1lbnQuaXNQbGFjZWhvbGRlclZpc2libGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgaWYgKEhUTUxFbGVtZW50KiBwbGFjZWhv
bGRlckVsZW1lbnQgPSB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LnBsYWNlaG9sZGVyRWxlbWVudCgp
KQpAQCAtOTEyLDkgKzkxMiw4IEBAIGJvb2wgSW50ZXJuYWxzOjp3YXNMYXN0Q2hhbmdlVXNlckVk
aXQoRWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0RWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIAot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgaGFzVGFnTmFtZSBpbnN0ZWFkIGJ1dCBX
aW5kb3dzIHBvcnQgZG9lc24ndCBsaW5rIFF1YWxpZmllZE5hbWVzIHByb3Blcmx5LgotICAgIGlm
ICh0ZXh0RmllbGQtPnRhZ05hbWUoKSA9PSAiVEVYVEFSRUEiKQotICAgICAgICByZXR1cm4gdG9I
VE1MVGV4dEFyZWFFbGVtZW50KHRleHRGaWVsZCktPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwor
ICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQodGV4dEZpZWxkKSkKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNV
c2VyRWRpdCgpOwogCiAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTkxOSw4ICsxOTE4LDggQEAgdm9pZCBJbnRlcm5hbHM6OnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhOb2RlKgogICAg
ICAgICBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGVsc2UgaWYgKG5vZGUtPmlz
RG9jdW1lbnROb2RlKCkpCiAgICAgICAgIGRvY3VtZW50ID0gdG9Eb2N1bWVudChub2RlKTsKLSAg
ICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSkKLSAgICAg
ICAgZG9jdW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG5vZGUpLT5jb250ZW50RG9jdW1lbnQo
KTsKKyAgICBlbHNlIGlmIChpc0hUTUxJRnJhbWVFbGVtZW50KG5vZGUpKQorICAgICAgICBkb2N1
bWVudCA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pigqbm9kZSkuY29udGVudERvY3VtZW50
KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGVjID0gVHlwZUVycm9yOwogICAgICAgICByZXR1cm47
CkBAIC0yMDg3LDkgKzIwODYsOSBAQCBib29sIEludGVybmFsczo6aXNTZWxlY3RQb3B1cFZpc2li
bGUoTm9kZSogbm9kZSkKICAgICBpZiAoIWlzSFRNTFNlbGVjdEVsZW1lbnQobm9kZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hU
TUxTZWxlY3RFbGVtZW50KG5vZGUpOworICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3QgPSBk
b3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOwogCi0gICAgYXV0byByZW5kZXJlciA9
IHNlbGVjdC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gc2VsZWN0LnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNNZW51TGlzdCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcAppbmRleCBkMmZlN2MwZDkzN2Q4YTRjMjlhYmY2Y2I4OWMzY2M2NjRl
YjM2YmNiLi45YTFmOGY1MGE4Mjc2NGJlY2E1NWIxYmRlZTM2ZTdmNzBhNDljNThiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwCkBAIC04NTAsMTYgKzg1MCwxNiBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFy
dEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYQogICAg
ICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAobmV3
RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRlVGFnKSkKLSAgICAgICAgcHVz
aEN1cnJlbnROb2RlKHRvSFRNTFRlbXBsYXRlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKS0+Y29u
dGVudCgpKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCpuZXdFbGVtZW50KSkKKyAg
ICAgICAgcHVzaEN1cnJlbnROb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCpuZXdF
bGVtZW50KS5jb250ZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgcHVzaEN1cnJlbnROb2RlKG5l
d0VsZW1lbnQuZ2V0KCkpOwogI2Vsc2UKICAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxlbWVudC5n
ZXQoKSk7CiAjZW5kaWYKIAotICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aHRtbFRhZykpCi0gICAgICAgIHRvSFRNTEh0bWxFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkp
LT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgaWYgKGlzSFRNTEh0bWxFbGVtZW50KCpuZXdFbGVt
ZW50KSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVtZW50PigqbmV3RWxlbWVudCkuaW5z
ZXJ0ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCAmJiBpc0ZpcnN0
RWxlbWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
IGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
CmluZGV4IGY2NjRmOTViZTkxNjEyMDVlZjBmNzg0ZjVhNzZlZTE4M2E3ZmU5ODkuLjJiNjViYjBh
YjY3NGZlNzU3ZjUyMDgyMTliMzBkMDcwYjdkYzk1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MubW0KQEAgLTMxNCwx
MSArMzE0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpmb2N1c2VkRWxlbWVudENoYW5n
ZWQoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmICghaW5wdXRFbGVtZW50LT5p
c1RleHQoKSkKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQuaXNUZXh0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhbGxGb3JtRGVsZWdhdGUod2ViVmlldygpLCBA
c2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTopLCBraXQoaW5wdXRFbGVtZW50KSwg
a2l0KGlucHV0RWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CisgICAgQ2FsbEZvcm1EZWxl
Z2F0ZSh3ZWJWaWV3KCksIEBzZWxlY3RvcihkaWRGb2N1c1RleHRGaWVsZDppbkZyYW1lOiksIGtp
dCgmaW5wdXRFbGVtZW50KSwga2l0KGlucHV0RWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCkpKTsK
IH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihi
b29sIGhhc1ZpZGVvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9w
ZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpp
bmRleCA1MGE5ZDhmZGJjZTJkYmIyNGU0ODY1MTVlZmUwZWE3Njc0OGJjZjkxLi5iMWMyMDM1NTEy
M2MwNjk0MmY3NDYzZGZlMWRjNjUwYWUxZWFjZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00v
V2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIEBpbXBsZW1lbnRhdGlvbiBE
T01IVE1MSW5wdXRFbGVtZW50IChXZWJET01IVE1MSW5wdXRFbGVtZW50T3BlcmF0aW9uc1ByaXZh
dGUpCiAKIC0gKHZvaWQpX3NldEF1dG9maWxsZWQ6KEJPT0wpYXV0b2ZpbGxlZAogewotICAgIHRv
SFRNTElucHV0RWxlbWVudChjb3JlKChET01FbGVtZW50ICopc2VsZikpLT5zZXRBdXRvZmlsbGVk
KGF1dG9maWxsZWQpOworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGNvcmUoKERPTUVs
ZW1lbnQgKilzZWxmKSktPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7CiB9CiAKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQppbmRleCAyMjU0ZTJlZjc5NWMxMDk2MzM1Yzk2YzEzZjFjYmIyNTY5NWUxYzdkLi4yNGRlNjdh
NzIzNTgxM2JhNWUyMjJlM2M2ZGM4ZmFhMGMwZTc1YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC0yMjMsMTEgKzIy
MywxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1l
bnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRN
TElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0KCkp
CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKmVsZW1lbnQpOworICAgIGlmICghaW5wdXRFbGVtZW50LmlzVGV4dCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9y
KGRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6KSwga2l0KGlucHV0RWxlbWVudCksIGtpdChpbnB1
dEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOworICAgIENhbGxGb3JtRGVsZWdhdGUobV93
ZWJWaWV3LCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTopLCBraXQoJmlucHV0
RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKSk7CiB9CiAKIHZv
aWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRl
eCA3YjYyOTZlNzgyY2Y1ZGEyMTM0NzYyMzFmZWQzMTZkODdiM2M5MGU3Li5hNjk0OTJjOTYwODQ0
ZThkMTJjYzZiMzM2MGRmNDVlYjIyYTVhNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC03MDgsNyArNzA4LDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBl
bGVtZW50KQogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQodG9I
VE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKTsKKyAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpOwogICAg
IEZvcm1EZWxlZ2F0ZUxvZyhpbnB1dEVsZW1lbnQpOwogICAgIENhbGxGb3JtRGVsZWdhdGUobV93
ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nOmluRnJhbWU6KSwgaW5w
dXRFbGVtZW50LCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CiB9CkBAIC03MTgs
NyArNzE4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmco
RWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1l
bnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAgICBDYWxsRm9ybURl
bGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHRleHRGaWVsZERpZEVuZEVkaXRpbmc6aW5GcmFt
ZTopLCBpbnB1dEVsZW1lbnQsIGtpdChlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpKTsKIH0K
QEAgLTczMyw3ICs3MzMsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUlu
VGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0g
ICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxl
bWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
a2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdh
dGVMb2coaW5wdXRFbGVtZW50KTsKICAgICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNl
bGVjdG9yKHRleHREaWRDaGFuZ2VJblRleHRGaWVsZDppbkZyYW1lOiksIGlucHV0RWxlbWVudCwg
a2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwogfQpAQCAtNzY2LDcgKzc2Niw3IEBA
IGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVu
dCogZWxlbWVudCwgS2V5Ym9hcmRFdmVuCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxl
bWVudCkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpOworICAgIERPTUhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKGlucHV0RWxlbWVudCk7CiAgICAg
aWYgKFNFTCBjb21tYW5kU2VsZWN0b3IgPSBzZWxlY3RvckZvcktleUV2ZW50KGV2ZW50KSkKICAg
ICAgICAgcmV0dXJuIENhbGxGb3JtRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKE5PLCBtX3dlYlZp
ZXcsIEBzZWxlY3Rvcih0ZXh0RmllbGQ6ZG9Db21tYW5kQnlTZWxlY3RvcjppbkZyYW1lOiksIGlu
cHV0RWxlbWVudCwgY29tbWFuZFNlbGVjdG9yLCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFt
ZSgpKSk7CkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxs
QmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElu
cHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7
CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVt
ZW50KTsKICAgICAvLyBXZSdyZSB1c2luZyB0aGUgZGVsZXRlQmFja3dhcmQgc2VsZWN0b3IgZm9y
IGFsbCBkZWxldGlvbiBvcGVyYXRpb25zIHNpbmNlIHRoZSBhdXRvZmlsbCBjb2RlIHRyZWF0cyBh
bGwgZGVsZXRpb25zIHRoZSBzYW1lIHdheS4KICAgICBDYWxsRm9ybURlbGVnYXRlUmV0dXJuaW5n
Qm9vbGVhbihOTywgbV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkOmRvQ29tbWFuZEJ5U2Vs
ZWN0b3I6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIEBzZWxlY3RvcihkZWxldGVCYWNrd2FyZDop
LCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CkBAIC03ODksNyArNzg5LDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhRWxlbWVudCA9
IGtpdCh0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkpOworICAgIERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQqIHRleHRBcmVhRWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKHRleHRBcmVhRWxlbWVudCk7CiAg
ICAgQ2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYTppbkZyYW1lOiksIHRleHRBcmVhRWxlbWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50
KCkuZnJhbWUoKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAwOWRkYzFkODVjMzNlZTkwOTBjYzU0NTgwYzQxNTYz
NzI0NWI2ZDFhLi4wOTJlNThkN2I0M2ZjYzk0NjA2ZDM4OWMwZjY0N2JkNGU3ODQyOGFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bQpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0aE5hbWU6KE5T
U3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCiBzdGF0aWMgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICBFbGVtZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICByZXR1cm4gbm9kZSAm
JiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgOiAw
OworICAgIHJldHVybiBub2RlICYmIGlzSFRNTElucHV0RWxlbWVudChub2RlKSA/IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cjsKIH0KIAogLSAoQk9PTCllbGVtZW50
RG9lc0F1dG9Db21wbGV0ZTooRE9NRWxlbWVudCAqKWVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhU
TUxDbGFzc2VzLmNwcAppbmRleCBiMzhjNzdhNmU2ZjYzMzAzNWE2ZDU5MzBkOWI3MTgyMDc2YTA5
Nzk2Li41OWUwZmI1MzVlNzU3NmNkODRkOTk0ZWEzYzMwMDk2MzA1OWU3YWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCkBAIC0yNTAsNyArMjUwLDcgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OlVSTCgKICAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpyZXN1bHQgPSBCU3RyaW5nKHRvSFRNTERv
Y3VtZW50KG1fZG9jdW1lbnQpLT51cmwoKSkucmVsZWFzZSgpOworICAgICpyZXN1bHQgPSBCU3Ry
aW5nKGRvd25jYXN0PEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCktPnVybCgpKS5yZWxlYXNlKCk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0yNjEsOSArMjYxLDkgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmJvZHkoCiAgICAgaWYgKCFtX2RvY3Vt
ZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gRV9G
QUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jID0gdG9IVE1MRG9jdW1lbnQobV9kb2N1
bWVudCk7CisgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gZG93bmNhc3Q8SFRNTERvY3VtZW50
PigqbV9kb2N1bWVudCk7CiAgICAgQ09NUHRyPElET01FbGVtZW50PiBkb21FbGVtZW50OwotICAg
IGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGh0bWxE
b2MtPmJvZHkoKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNy
ZWF0ZUluc3RhbmNlKGh0bWxEb2MuYm9keSgpKSk7CiAgICAgaWYgKGRvbUVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBkb21FbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUhUTUxFbGVtZW50
LCAodm9pZCoqKSBib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTMwNCw4ICsz
MDQsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxEb2N1bWVudDo6Zm9ybXMo
CiAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jID0gdG9I
VE1MRG9jdW1lbnQobV9kb2N1bWVudCk7Ci0gICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBmb3Jt
cyA9IGh0bWxEb2MtPmZvcm1zKCk7CisgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gZG93bmNh
c3Q8SFRNTERvY3VtZW50PigqbV9kb2N1bWVudCk7CisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBmb3JtcyA9IGh0bWxEb2MuZm9ybXMoKTsKICAgICAqY29sbGVjdGlvbiA9IERPTUhUTUxDb2xs
ZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShmb3Jtcy5nZXQoKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CkBAIC01NjAsNyArNTYwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRm9y
bUVsZW1lbnQ6OmFjdGlvbigKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1
bHQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxGb3JtRWxlbWVudChtX2VsZW1l
bnQpKTsKLSAgICBXVEY6OlN0cmluZyBhY3Rpb25TdHJpbmcgPSB0b0hUTUxGb3JtRWxlbWVudCht
X2VsZW1lbnQpLT5hY3Rpb24oKTsKKyAgICBXVEY6OlN0cmluZyBhY3Rpb25TdHJpbmcgPSBkb3du
Y2FzdDxIVE1MRm9ybUVsZW1lbnQ+KCptX2VsZW1lbnQpLmFjdGlvbigpOwogICAgICpyZXN1bHQg
PSBCU3RyaW5nKGFjdGlvblN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwogfQpA
QCAtNTkwLDcgKzU5MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEZvcm1F
bGVtZW50OjptZXRob2QoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0
KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MRm9ybUVsZW1lbnQobV9lbGVtZW50
KSk7Ci0gICAgV1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0gdG9IVE1MRm9ybUVsZW1lbnQobV9l
bGVtZW50KS0+bWV0aG9kKCk7CisgICAgV1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0gZG93bmNh
c3Q8SFRNTEZvcm1FbGVtZW50PigqbV9lbGVtZW50KS5tZXRob2QoKTsKICAgICAqcmVzdWx0ID0g
QlN0cmluZyhtZXRob2RTdHJpbmcpLnJlbGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAg
LTcwMiwxMyArNzAyLDEzIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFNlbGVj
dEVsZW1lbnQ6Om9wdGlvbnMoCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKICAgICBBU1NF
UlQobV9lbGVtZW50KTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCA9IHRv
SFRNTFNlbGVjdEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2Vs
ZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9lbGVtZW50KTsKIAot
ICAgIGlmICghc2VsZWN0RWxlbWVudC0+b3B0aW9ucygpKQorICAgIGlmICghc2VsZWN0RWxlbWVu
dC5vcHRpb25zKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICAqcmVzdWx0ID0gMDsK
LSAgICBSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBvcHRpb25zID0gc2VsZWN0RWxlbWVu
dC0+b3B0aW9ucygpOworICAgICpyZXN1bHQgPSBudWxscHRyOworICAgIFJlZlB0cjxIVE1MT3B0
aW9uc0NvbGxlY3Rpb24+IG9wdGlvbnMgPSBzZWxlY3RFbGVtZW50Lm9wdGlvbnMoKTsKICAgICAq
cmVzdWx0ID0gRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShvcHRpb25z
LmdldCgpKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTgwNCwxMiArODA0LDEyIEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFNlbGVjdEVsZW1lbnQ6OmFjdGl2YXRlSXRlbUF0
SW5kZXgoCiAgICAgLyogW2luXSAqLyBpbnQgaW5kZXgpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RF
bGVtZW50KG1fZWxlbWVudCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAKLSAgICBpZiAoaW5k
ZXggPj0gc2VsZWN0RWxlbWVudC0+bGVuZ3RoKCkpCisgICAgaWYgKGluZGV4ID49IHNlbGVjdEVs
ZW1lbnQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBzZWxlY3RFbGVt
ZW50LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KTsKKyAgICBzZWxlY3RFbGVtZW50LnNldFNlbGVj
dGVkSW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC04NjAsOSArODYwLDkg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCgK
IAogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxPcHRpb25FbGVtZW50
KG1fZWxlbWVudCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9I
VE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRp
b25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpOwogCi0g
ICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+dGV4dCgpKS5yZWxlYXNlKCk7Cisg
ICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC50ZXh0KCkpLnJlbGVhc2UoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTg5Nyw5ICs4OTcsOSBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTUhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCgKIAogICAgIEFTU0VSVCht
X2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxPcHRpb25FbGVtZW50KG1fZWxlbWVudCkpOwot
ICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVu
dChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb25FbGVtZW50ID0gZG93
bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpOwogCi0gICAgKnJlc3VsdCA9IEJT
dHJpbmcob3B0aW9uRWxlbWVudC0+bGFiZWwoKSkucmVsZWFzZSgpOworICAgICpyZXN1bHQgPSBC
U3RyaW5nKG9wdGlvbkVsZW1lbnQubGFiZWwoKSkucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09L
OwogfQogICAgIApAQCAtOTkxLDExICs5OTEsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKAogewogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpyZXN1bHQgPSAwOworICAgICpyZXN1bHQgPSBudWxs
cHRyOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVu
dCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxl
bWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxl
bWVudD4gZG9tRWxlbWVudDsKLSAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50
OjpjcmVhdGVJbnN0YW5jZShpbnB1dEVsZW1lbnQtPmZvcm0oKSkpOworICAgIGRvbUVsZW1lbnQu
YWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGlucHV0RWxlbWVudC5mb3Jt
KCkpKTsKICAgICBpZiAoZG9tRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnQtPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JRE9NSFRNTEVsZW1lbnQsICh2b2lkKiopIHJlc3VsdCk7CiAgICAg
cmV0dXJuIEVfRkFJTDsKQEAgLTEwNzUsOCArMTA3NSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6ZGlzYWJsZWQoCiAgICAgICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQk9PTCogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1M
SW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQgPSBpbnB1
dEVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gVFJVRSA6IEZBTFNFOworICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCptX2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNEaXNhYmxlZEZvcm1D
b250cm9sKCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0x
MTE5LDggKzExMTksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVs
ZW1lbnQ6OnJlYWRPbmx5KAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3Vs
dCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1l
bnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVs
ZW1lbnQobV9lbGVtZW50KTsKLSAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50LT5pc1JlYWRPbmx5
KCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKnJlc3VsdCA9IGlu
cHV0RWxlbWVudC5pc1JlYWRPbmx5KCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAgICAgCkBAIC0xMTg0LDkgKzExODQsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUoCiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB0
eXBlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxl
bWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0
RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIFdURjo6U3RyaW5n
IHR5cGVTdHJpbmcodHlwZSwgU3lzU3RyaW5nTGVuKHR5cGUpKTsKLSAgICBpbnB1dEVsZW1lbnQt
PnNldFR5cGUodHlwZVN0cmluZyk7CisgICAgaW5wdXRFbGVtZW50LnNldFR5cGUodHlwZVN0cmlu
Zyk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0xMjA4LDggKzEyMDgsOCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKAogICAgICAg
ICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9lbGVt
ZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBX
VEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
bV9lbGVtZW50KTsKKyAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlucHV0RWxlbWVudC52
YWx1ZSgpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKHZhbHVlU3RyaW5nKS5yZWxlYXNlKCk7CiAg
ICAgaWYgKHZhbHVlU3RyaW5nLmxlbmd0aCgpICYmICEqcmVzdWx0KQogICAgICAgICByZXR1cm4g
RV9PVVRPRk1FTU9SWTsKQEAgLTEyMjAsOCArMTIyMCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoCiAgICAgICAgIC8qIFtpbl0gKi8g
QlNUUiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVu
dChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hU
TUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlKFN0
cmluZygoVUNoYXIqKSB2YWx1ZSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUs
IFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTIzMCwx
NiArMTIzMCwxNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlRm9yVXNlcigKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NF
UlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0
RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0aWNfY2FzdDxVQ2hhcio+KHZhbHVl
KSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxl
bWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlucHV0
RWxlbWVudC5zZXRWYWx1ZUZvclVzZXIoU3RyaW5nKHN0YXRpY19jYXN0PFVDaGFyKj4odmFsdWUp
LCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0KCB2b2lkKQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudCht
X2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2VsZWN0KCk7CisgICAgSFRNTElucHV0RWxl
bWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVu
dCk7CisgICAgaW5wdXRFbGVtZW50LnNlbGVjdCgpOwogICAgIHJldHVybiBTX09LOwogfQogICAg
IApAQCAtMTI1Myw4ICsxMjUzLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
SW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCgKICAgICAvKiBbaW5dICovIGxvbmcgc3Rh
cnQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVt
ZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRF
bGVtZW50KG1fZWxlbWVudCk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRTZWxlY3Rpb25TdGFydChz
dGFydCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50LnNldFNlbGVjdGlv
blN0YXJ0KHN0YXJ0KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI2Miw4ICsxMjYyLDgg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rp
b25TdGFydCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIGxvbmcgKnN0YXJ0KQogewogICAgIEFT
U0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1l
bnQpOwotICAgICpzdGFydCA9IGlucHV0RWxlbWVudC0+c2VsZWN0aW9uU3RhcnQoKTsKKyAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqbV9lbGVtZW50KTsKKyAgICAqc3RhcnQgPSBpbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI3MSw4ICsxMjcxLDggQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoCiAg
ICAgLyogW2luXSAqLyBsb25nIGVuZCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQt
PnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlucHV0RWxl
bWVudC5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI4
MCw4ICsxMjgwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3Rpb25FbmQoCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBsb25nICplbmQpCiB7
CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50
KG1fZWxlbWVudCk7Ci0gICAgKmVuZCA9IGlucHV0RWxlbWVudC0+c2VsZWN0aW9uRW5kKCk7Cisg
ICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKm1fZWxlbWVudCk7CisgICAgKmVuZCA9IGlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI5Miw4ICsxMjkyLDggQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCgKIHsKICAg
ICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxl
bWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0
RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQtPmlzVGV4dEZp
ZWxkKCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKnJlc3VsdCA9
IGlucHV0RWxlbWVudC5pc1RleHRGaWVsZCgpID8gVFJVRSA6IEZBTFNFOwogICAgIHJldHVybiBT
X09LOwogfQogCkBAIC0xMzI4LDEzICsxMzI4LDEzIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRE9NSFRNTElucHV0RWxlbWVudDo6cmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlKAogCiAgICAg
QVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1l
bnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVs
ZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKIAotICAgIFN0cmluZyBuZXdW
YWx1ZSA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAgICBTdHJpbmcgbmV3VmFsdWUgPSBpbnB1
dEVsZW1lbnQudmFsdWUoKTsKICAgICBTdHJpbmcgd2ViQ29yZVJlcGxhY2VtZW50U3RyaW5nKHN0
YXRpY19jYXN0PFVDaGFyKj4ocmVwbGFjZW1lbnRTdHJpbmcpLCBTeXNTdHJpbmdMZW4ocmVwbGFj
ZW1lbnRTdHJpbmcpKTsKICAgICBuZXdWYWx1ZS5yZXBsYWNlKHN0YXJ0VGFyZ2V0LCBlbmRUYXJn
ZXQgLSBzdGFydFRhcmdldCwgd2ViQ29yZVJlcGxhY2VtZW50U3RyaW5nKTsKLSAgICBpbnB1dEVs
ZW1lbnQtPnNldFZhbHVlKG5ld1ZhbHVlKTsKLSAgICBpbnB1dEVsZW1lbnQtPnNldFNlbGVjdGlv
blJhbmdlKGluZGV4LCBuZXdWYWx1ZS5sZW5ndGgoKSk7CisgICAgaW5wdXRFbGVtZW50LnNldFZh
bHVlKG5ld1ZhbHVlKTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoaW5kZXgs
IG5ld1ZhbHVlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTM0NSw5ICsx
MzQ1LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojpz
ZWxlY3RlZFJhbmdlKAogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hU
TUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgKnN0YXJ0ID0gaW5w
dXRFbGVtZW50LT5zZWxlY3Rpb25TdGFydCgpOwotICAgICplbmQgPSBpbnB1dEVsZW1lbnQtPnNl
bGVjdGlvbkVuZCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpzdGFydCA9IGlucHV0RWxl
bWVudC5zZWxlY3Rpb25TdGFydCgpOworICAgICplbmQgPSBpbnB1dEVsZW1lbnQuc2VsZWN0aW9u
RW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzNTYsOCArMTM1Niw4IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxlZCgK
IHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50
KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2V0QXV0b2ZpbGxl
ZCghIWZpbGxlZCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50LnNldEF1
dG9maWxsZWQoISFmaWxsZWQpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMzY2LDggKzEz
NjYsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6Omlz
QXV0b2ZpbGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1M
SW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQgPSBpbnB1
dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpID8gVFJVRSA6IEZBTFNFOworICAgIEhUTUxJbnB1dEVs
ZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1l
bnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNBdXRvZmlsbGVkKCkgPyBUUlVFIDog
RkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzODQsNyArMTM4NCw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNVc2VyRWRpdGVkKAog
ICAgIEJPT0wgdGV4dEZpZWxkID0gRkFMU0U7CiAgICAgaWYgKEZBSUxFRChpc1RleHRGaWVsZCgm
dGV4dEZpZWxkKSkgfHwgIXRleHRGaWVsZCkKICAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgaWYg
KHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpLT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKSkK
KyAgICBpZiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCkubGFzdENoYW5n
ZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQgPSBUUlVFOwogICAgIHJldHVybiBTX09L
OwogfQpAQCAtMTQyOCw5ICsxNDI4LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MVGV4dEFyZWFFbGVtZW50Ojpmb3JtKAogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogICAg
ICpyZXN1bHQgPSAwOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MVGV4dEFyZWFFbGVt
ZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRhcmVhRWxlbWVu
dCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpt
X2VsZW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKLSAgICBkb21F
bGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZSh0ZXh0YXJlYUVs
ZW1lbnQtPmZvcm0oKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6
OmNyZWF0ZUluc3RhbmNlKHRleHRhcmVhRWxlbWVudC5mb3JtKCkpKTsKICAgICBpZiAoZG9tRWxl
bWVudCkKICAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9N
SFRNTEVsZW1lbnQsICh2b2lkKiopIHJlc3VsdCk7CiAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTE1
NDUsOCArMTU0NSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRBcmVh
RWxlbWVudDo6dmFsdWUoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0
KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxl
bWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRhcmVhRWxlbWVudCA9IHRvSFRN
TFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOwotICAgIFdURjo6U3RyaW5nIHZhbHVlU3RyaW5n
ID0gdGV4dGFyZWFFbGVtZW50LT52YWx1ZSgpOworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQmIHRl
eHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1lbnQp
OworICAgIFdURjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gdGV4dGFyZWFFbGVtZW50LnZhbHVlKCk7
CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcodmFsdWVTdHJpbmcpLnJlbGVhc2UoKTsKICAgICBpZiAo
dmFsdWVTdHJpbmcubGVuZ3RoKCkgJiYgISpyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX09VVE9G
TUVNT1JZOwpAQCAtMTU1NywxNiArMTU1NywxNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKAogICAgICAgICAvKiBbaW5dICovIEJT
VFIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJlYUVsZW1l
bnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dGFyZWFFbGVtZW50
ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgdGV4dGFyZWFFbGVtZW50
LT5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsK
KyAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICB0ZXh0YXJlYUVsZW1lbnQuc2V0VmFs
dWUoU3RyaW5nKChVQ2hhciopIHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAgICAgCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQ6OnNlbGVjdCggdm9pZCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlz
SFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MVGV4dEFyZWFFbGVtZW50
KiB0ZXh0YXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50KTsKLSAg
ICB0ZXh0YXJlYUVsZW1lbnQtPnNlbGVjdCgpOworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQmIHRl
eHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1lbnQp
OworICAgIHRleHRhcmVhRWxlbWVudC5zZWxlY3QoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMTU4MCw3ICsxNTgwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4
dEFyZWFFbGVtZW50Ojppc1VzZXJFZGl0ZWQoCiAKICAgICAqcmVzdWx0ID0gRkFMU0U7CiAgICAg
QVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50KSk7Ci0g
ICAgaWYgKHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpLT5sYXN0Q2hhbmdlV2FzVXNl
ckVkaXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fZWxlbWVu
dCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQgPSBUUlVFOwogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMTYwNiwxMCArMTYwNiwxMCBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUoCiB7CiAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnJlc3VsdCA9IDA7Cisg
ICAgKnJlc3VsdCA9IG51bGxwdHI7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgSFRNTElG
cmFtZUVsZW1lbnQqIGlGcmFtZUVsZW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG1fZWxlbWVu
dCk7Ci0gICAgQ09NUHRyPElXZWJGcmFtZT4gd2ViRnJhbWUgPSBraXQoaUZyYW1lRWxlbWVudC0+
Y29udGVudEZyYW1lKCkpOworICAgIEhUTUxJRnJhbWVFbGVtZW50JiBpRnJhbWVFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIENPTVB0cjxJV2Vi
RnJhbWU+IHdlYkZyYW1lID0ga2l0KGlGcmFtZUVsZW1lbnQuY29udGVudEZyYW1lKCkpOwogICAg
IGlmICghd2ViRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAgcmV0dXJuIHdlYkZy
YW1lLmNvcHlSZWZUbyhyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2Vi
RnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDc4OGEyZTgw
ZjFjZmE5ZTgzZDIzNTM5Yzg3MDcyNWY4YmQyZjEyNDMuLjhjNmM0NWMzMjljOTgyZTNhMzUzZDE1
MGVlNjE4ZDVhMGNkOGM5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTE5NCw3ICsxOTQs
NyBAQCBzdGF0aWMgRWxlbWVudCAqZWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50ICpl
bGVtZW50KQogc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVu
dChJRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIElET01FbGVtZW50UHJpdmF0
ZSogZWxlUHJpdjsKICAgICBIUkVTVUxUIGhyID0gZWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lET01FbGVtZW50UHJpdmF0ZSwgKHZvaWQqKikgJmVsZVByaXYpOwpAQCAtMjAzLDE1ICsyMDMs
MTUgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChJ
RE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAgICAgaHIgPSBlbGVQcml2LT5jb3JlRWxlbWVudCgo
dm9pZCoqKSZlbGUpOwogICAgICAgICBlbGVQcml2LT5SZWxlYXNlKCk7CiAgICAgICAgIGlmIChT
VUNDRUVERUQoaHIpICYmIGVsZSAmJiBpc0hUTUxGb3JtRWxlbWVudChlbGUpKQotICAgICAgICAg
ICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVtZW50KGVsZSk7CisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGUpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSURP
TUVsZW1lbnRQcml2YXRlKiBlbGVQcml2OwogICAgIEhSRVNVTFQgaHIgPSBlbGVtZW50LT5RdWVy
eUludGVyZmFjZShJSURfSURPTUVsZW1lbnRQcml2YXRlLCAodm9pZCoqKSAmZWxlUHJpdik7CkBA
IC0yMjAsOSArMjIwLDkgQEAgc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudEZy
b21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQogICAgICAgICBociA9IGVsZVByaXYt
PmNvcmVFbGVtZW50KCh2b2lkKiopJmVsZSk7CiAgICAgICAgIGVsZVByaXYtPlJlbGVhc2UoKTsK
ICAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxlICYmIGlzSFRNTElucHV0RWxlbWVudChl
bGUpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChlbGUpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZSk7CiAgICAgfQotICAg
IHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBXZWJGcmFtZVByaXZhdGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAppbmRl
eCAxZGMwYjRiNTAzMDc0YzJiMWE1NTNjZDg5MDBiZDUxYzUyYWU2OGQ0Li5jNjEyYzJjMGJhM2Iy
ZjAwM2JmYWRmOGQyNWVlNWRlNzYwNGYzMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTE5OSw1NSArMTk5LDU1IEBAIFBhc3NSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjp2aXNp
YmxlUmFuZ2UoKSBjCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpzZXRIVE1MSW5w
dXRFbGVtZW50VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFp
c0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKSkKKyAgICBpZiAoIWlzSFRNTElucHV0RWxl
bWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdG9IVE1MSW5wdXRFbGVtZW50
KG1fbm9kZS5nZXQoKSktPnNldFZhbHVlRm9yVXNlcih2YWx1ZSk7CisgICAgZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0VmFsdWVGb3JVc2VyKHZhbHVlKTsKIH0KIAogYm9v
bCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQo
KSBjb25zdAogewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkpCisg
ICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSktPmlz
QXV0b2ZpbGxlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9u
b2RlKS5pc0F1dG9maWxsZWQoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6
OnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKGJvb2wgZmlsbGVkKQogewotICAgIGlmICgh
aXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkpCisgICAgaWYgKCFpc0hUTUxJbnB1dEVs
ZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRvSFRNTElucHV0RWxlbWVu
dChtX25vZGUuZ2V0KCkpLT5zZXRBdXRvZmlsbGVkKGZpbGxlZCk7CisgICAgZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0QXV0b2ZpbGxlZChmaWxsZWQpOwogfQogCiBib29s
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6aHRtbElucHV0RWxlbWVudExhc3RDaGFuZ2VXYXNV
c2VyRWRpdCgpCiB7Ci0gICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKSkK
KyAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT5sYXN0
Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm1fbm9kZSkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0
KCkKIHsKLSAgICBpZiAoIWlzSFRNTFRleHRBcmVhRWxlbWVudChtX25vZGUuZ2V0KCkpKQorICAg
IGlmICghaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX25vZGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fbm9kZS5nZXQoKSktPmxh
c3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50PigqbV9ub2RlKS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIH0KIAogYm9vbCBJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzVGV4dEZpZWxkKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkgJiYgdG9IVE1MSW5wdXRFbGVtZW50KG1f
bm9kZS5nZXQoKSktPmlzVGV4dCgpOworICAgIHJldHVybiBpc0hUTUxJbnB1dEVsZW1lbnQoKm1f
bm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuaXNUZXh0KCk7CiB9
CiAKIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU6Omh0bWxUYWJsZUNlbGxFbGVtZW50Q2VsbEFib3ZlKCkKIHsKICAgICBpZiAoIW1f
bm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBnZXRPckNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDZWxsRWxlbWVudCo+KG1fbm9kZS5nZXQoKSktPmNlbGxBYm92ZSgpKTsKKyAgICByZXR1cm4g
Z2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQmPigqbV9ub2RlKS5j
ZWxsQWJvdmUoKSk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViRnJhbWU+IEluamVjdGVkQnVuZGxlTm9k
ZUhhbmRsZTo6ZG9jdW1lbnRGcmFtZSgpCkBAIC0yNzYsMTAgKzI3NiwxMCBAQCBQYXNzUmVmUHRy
PFdlYkZyYW1lPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxGcmFtZUVsZW1lbnRDb250
ZW50RnJhbWUoKQogCiBQYXNzUmVmUHRyPFdlYkZyYW1lPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGU6Omh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCkKIHsKLSAgICBpZiAoIW1fbm9kZS0+
aGFzVGFnTmFtZShpZnJhbWVUYWcpKQorICAgIGlmICghaXNIVE1MSUZyYW1lRWxlbWVudCgqbV9u
b2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBGcmFtZSogZnJhbWUgPSB0b0hU
TUxJRnJhbWVFbGVtZW50KG1fbm9kZS5nZXQoKSktPmNvbnRlbnRGcmFtZSgpOworICAgIEZyYW1l
KiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqbV9ub2RlKS5jb250ZW50RnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9p
Y2VBbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCmluZGV4IGYwNWZkMjUzOWI1ZTA4NDZhYTRkODcw
MzJiZjM5ZGZjYzkzZmZkY2EuLjBjNGE2Y2I5ODFjOTA0NWQxZWJiYjg3Y2UyMjc0NGU1ZDI1ZDA0
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KQEAgLTYxLDcgKzYxLDcg
QEAgdm9pZCBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uOjp1cGRhdGVHZW9tZXRyeSgpCiAKIHZv
aWQgUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6Y29tbWl0KCkKIHsKLSAgICBjaG9pY2VBbm5v
dGF0aW9uKCkuc3RyaW5nVmFsdWUgPSB0b0hUTUxTZWxlY3RFbGVtZW50KGVsZW1lbnQoKSktPnZh
bHVlKCk7CisgICAgY2hvaWNlQW5ub3RhdGlvbigpLnN0cmluZ1ZhbHVlID0gZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KGVsZW1lbnQoKSktPnZhbHVlKCk7CiAKICAgICBQREZQbHVnaW5Bbm5v
dGF0aW9uOjpjb21taXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tCmluZGV4
IGE1ZDJmNWU2YmI5MzUwMWViNzYwM2U2NTIzOTNjZTE0YjkwMDhkZWQuLmUyNDBmYzgwYTRmYzc4
OGVhMWIwYzg0OTEwMzJmYTE3NjMyYjkxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlv
bi5tbQpAQCAtMTA1LDkgKzEwNSw5IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gUERGUGx1Z2luVGV4
dEFubm90YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KCkKICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWduLCBjc3NBbGlnbm1l
bnRWYWx1ZUZvck5TVGV4dEFsaWdubWVudCh0ZXh0QW5ub3RhdGlvbi5hbGlnbm1lbnQpKTsKIAog
ICAgIGlmIChpc011bHRpbGluZSkKLSAgICAgICAgdG9IVE1MVGV4dEFyZWFFbGVtZW50KHN0eWxl
ZEVsZW1lbnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CisgICAgICAg
IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLT5zZXRWYWx1ZSh0
ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAgICB0b0hUTUxJbnB1
dEVsZW1lbnQoc3R5bGVkRWxlbWVudCktPnNldFZhbHVlKHRleHRBbm5vdGF0aW9uLnN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc3R5bGVkRWxlbWVudCkt
PnNldFZhbHVlKHRleHRBbm5vdGF0aW9uLnN0cmluZ1ZhbHVlKTsKIAogICAgIHJldHVybiBlbGVt
ZW50OwogfQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUERGUGx1Z2luVGV4dEFubm90YXRpb246
OmNvbW1pdCgpCiAKIFN0cmluZyBQREZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6dmFsdWUoKSBjb25z
dAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGVsZW1lbnQoKSkt
PnZhbHVlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
PihlbGVtZW50KCkpLT52YWx1ZSgpOwogfQogCiBib29sIFBERlBsdWdpblRleHRBbm5vdGF0aW9u
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMTAzZjg1NzYyYzBiYjkxYjgyNjM4NzBm
Mjc2ZjNkYzQ1ZWJkMjU1OC4uNzYzODM2YmY0MTYzMTNiMWYxZDQ3YjQyNzViNGZhMTk1ODQ5OGY2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcApAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5pdGlhbGl6ZVBsdWdp
bigpCiAgICAgfQogCiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJ
U1RJQykKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQgPSB0
b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVtZW50LmdldCgpKTsKKyAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQuZ2V0KCkpOwogICAgIG1fZGlkUGx1Z0lu
U3RhcnRPZmZTY3JlZW4gPSAhbV93ZWJQYWdlLT5wbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdCgq
cGx1Z0luSW1hZ2VFbGVtZW50KTsKICNlbmRpZgogICAgIG1fcGx1Z2luLT5pbml0aWFsaXplKHRo
aXMsIG1fcGFyYW1ldGVycyk7CkBAIC0xNzEzLDcgKzE3MTMsNyBAQCB2b2lkIFBsdWdpblZpZXc6
OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fcGx1Z2luKTsKIAogI2lm
IEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgSFRNTFBs
dWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50KG1fcGx1Z2luRWxlbWVudC5nZXQoKSk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4o
bV9wbHVnaW5FbGVtZW50LmdldCgpKTsKICAgICBib29sIGlzUGx1Z0luT25TY3JlZW4gPSBtX3dl
YlBhZ2UtPnBsdWdJbkludGVyc2VjdHNTZWFyY2hSZWN0KCpwbHVnSW5JbWFnZUVsZW1lbnQpOwog
ICAgIGJvb2wgcGx1Z0luQ2FtZU9uU2NyZWVuID0gaXNQbHVnSW5PblNjcmVlbiAmJiBtX2RpZFBs
dWdJblN0YXJ0T2ZmU2NyZWVuOwogICAgIGJvb2wgc25hcHNob3RGb3VuZCA9IGZhbHNlOwpAQCAt
MTc4MSw3ICsxNzgxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlcklu
dGVyYWN0aW9uKCkKIAogICAgIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CiAK
LSAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQg
PSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVtZW50LmdldCgpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQuZ2V0KCkpOwogICAg
IFN0cmluZyBwYWdlT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKTsKICAgICBTdHJpbmcg
cGx1Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2FkZWRVcmwoKS5ob3N0KCk7CiAg
ICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2FkZWRNaW1lVHlwZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGYzYzliZGQ1ZWYwZjU0NDA4MzRmYWZmOWU3
YzI0MDFjYjEzOGNiMjUuLmI1MTc2M2VhNTBkNzE0NDQ0YzczNmU4ZjEwZTM0YTI2MzhlZmRkMjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKICAg
ICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVs
ZW1lbnQpOwotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHQoKSkKKyAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVu
dCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQuaXNUZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50
LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7Ci0gICAgbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS5kaWRGb2N1c1RleHRGaWVsZChtX3BhZ2UsIGlu
cHV0RWxlbWVudCwgd2ViRnJhbWUpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xp
ZW50KCkuZGlkRm9jdXNUZXh0RmllbGQobV9wYWdlLCAmaW5wdXRFbGVtZW50LCB3ZWJGcmFtZSk7
CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKiBm
cmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBiZmY3NmYyZTRhYjRkN2MyYjE4YTZm
MjEwM2ZkMDUzYjY1YzA2Zjc0Li4xMjE0MTdlOWRhNjBhODViMzM3MDllZWM5MDRjNjFhY2FmNjBl
ZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50
KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVt
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEJlZ2luRWRpdGlu
ZyhtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwgd2ViRnJhbWUpOworICAgIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkudGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5n
KG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCksIHdlYkZyYW1lKTsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVu
dCogZWxlbWVudCkKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4
dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJG
cmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1l
KCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
Rm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9wYWdlLCB0b0hUTUxJbnB1dEVs
ZW1lbnQoZWxlbWVudCksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9y
bUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9wYWdlLCBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0zMjUsNyAr
MzI1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChF
bGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9t
Q29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJG
cmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHREaWRD
aGFuZ2VJblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwgd2Vi
RnJhbWUsIGluaXRpYXRlZEJ5VXNlclR5cGluZyk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQobV9wYWdlLCBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUsIGluaXRpYXRlZEJ5VXNlclR5cGlu
Zyk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShF
bGVtZW50KiBlbGVtZW50KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1l
KiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgp
LmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRm9ybUNsaWVudCgpLnRleHREaWRDaGFuZ2VJblRleHRBcmVhKG1fcGFnZSwgdG9IVE1M
VGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CisgICAgbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShtX3BhZ2UsIGRvd25j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CiB9CiAKICNpZiAh
UExBVEZPUk0oSU9TKQpAQCAtNDAzLDcgKzQwMyw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpk
b1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVu
CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1l
bnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKIAotICAgIHJl
dHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZFBlcmZvcm1BY3Rp
b25JblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwgdG9JbnB1
dEZpZWxkQWN0aW9uKGFjdGlvblR5cGUpLCB3ZWJGcmFtZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuc2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxk
KG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCksIHRvSW5wdXRGaWVs
ZEFjdGlvbihhY3Rpb25UeXBlKSwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQpAQCAtNDE0
LDcgKzQxNCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJh
bWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CiAgICAgQVNT
RVJUKHdlYkZyYW1lKTsKIAotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCku
c2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxkKG1fcGFnZSwgdG9IVE1MSW5wdXRFbGVtZW50
KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJbnB1dEZpZWxkQWN0aW9uVHlwZUluc2Vy
dERlbGV0ZSksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVu
dCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJbnB1dEZpZWxkQWN0
aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRD
aGVja2luZ1R5cGUgdHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCBlNjJhY2ZkOWM0NmE4NTUxYzNlODQ0NjJlYTBhMTJlYmVj
MTJiZjg2Li41YTdiMmMzMWQ1M2Y0Mzk0ZTljY2ZmYmU5NWIxZGJjYzg4YjdmNmM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC02MjQsNyAr
NjI0LDcgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihXZWJGcmFt
ZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHUKICAgICBTdHJpbmcgcGFnZVVSTFN0cmlu
ZyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9u
c2VVUkwoKS5zdHJpbmcoKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJ
Tl9IRVVSSVNUSUMpCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z2luSW1hZ2VFbGVt
ZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCpwbHVnaW5FbGVtZW50KTsKKyAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50PigqcGx1Z2luRWxlbWVudCk7CiAgICAgdW5zaWduZWQgcGx1Z2luQXJl
YSA9IDA7CiAgICAgUGx1Z2luUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUgPSBwbHVnaW5FbGVtZW50
LT5kaXNwbGF5U3RhdGUoKSA9PSBIVE1MUGx1Z0luRWxlbWVudDo6V2FpdGluZ0ZvclNuYXBzaG90
ICYmICEocGx1Z0luSXNQcmltYXJ5U2l6ZShwbHVnaW5JbWFnZUVsZW1lbnQsIHBsdWdpbkFyZWEp
ICYmICFwbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdChwbHVnaW5JbWFnZUVsZW1lbnQpKSA/IFBs
dWdpblByb2Nlc3NUeXBlU25hcHNob3QgOiBQbHVnaW5Qcm9jZXNzVHlwZU5vcm1hbDsKICNlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KaW5kZXggMTViOWM5MGFlOTRkZGI2Yjc0MTMyYTI4NzYxODJmOTliNDkyNTFhYy4uNjVl
NmU5ZDI1ZDM3MTVkY2E4MDUyNTY4YWNmZmIzYzUyZjRhMmY1NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNjEyLDkg
KzYxMiw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAoIW1fYXNzaXN0ZWROb2RlKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsKLSAgICAg
ICAgSFRNTElucHV0RWxlbWVudCAqZWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2Fzc2lz
dGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZhbHVlLCBEaXNwYXRj
aElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoKm1fYXNz
aXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgZWxlbWVudC5z
ZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKICAgICB9CiAgICAg
Ly8gRklYTUU6IHNob3VsZCBhbHNvIGhhbmRsZSB0aGUgY2FzZSBvZiBIVE1MU2VsZWN0RWxlbWVu
dC4KIH0KQEAgLTYyMywxOCArNjIzLDE4IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2Rl
VmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiB7CiAgICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9hc3Npc3RlZE5v
ZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQgKmVsZW1lbnQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAgICAgICBlbGVtZW50LT5zZXRW
YWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBEaXNwYXRjaElucHV0QW5k
Q2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoKm1fYXNzaXN0ZWROb2Rl
KSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgZWxlbWVudC5zZXRWYWx1ZUFz
TnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdl
RXZlbnQpOwogICAgIH0KIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3Rl
ZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiB7Ci0g
ICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNIVE1MU2VsZWN0RWxlbWVudChtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSkpCisgICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNIVE1MU2VsZWN0RWxl
bWVudCgqbV9hc3Npc3RlZE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICBIVE1MU2VsZWN0RWxl
bWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSk7
Ci0gICAgc2VsZWN0LT5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0
aXBsZVNlbGVjdGlvbik7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRvd25jYXN0
PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOworICAgIHNlbGVjdC5vcHRpb25T
ZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CiB9CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTk5MywxMCArMTk5MywxMCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNBc3Npc3RhYmxlTm9kZShOb2RlKiBub2RlKQogICAgIGlmIChpc0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoaXNIVE1MVGV4
dEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gIXRvSFRNTFRleHRBcmVhRWxlbWVu
dChub2RlKS0+aXNSZWFkT25seU5vZGUoKTsKKyAgICAgICAgcmV0dXJuICFkb3duY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50Pigqbm9kZSkuaXNSZWFkT25seU5vZGUoKTsKICAgICBpZiAoaXNIVE1M
SW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiAhZWxlbWVudC0+aXNS
ZWFkT25seU5vZGUoKSAmJiAoZWxlbWVudC0+aXNUZXh0RmllbGQoKSB8fCBlbGVtZW50LT5pc0Rh
dGVGaWVsZCgpIHx8IGVsZW1lbnQtPmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkgfHwgZWxlbWVudC0+
aXNNb250aEZpZWxkKCkgfHwgZWxlbWVudC0+aXNUaW1lRmllbGQoKSk7CisgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7
CisgICAgICAgIHJldHVybiAhZWxlbWVudC5pc1JlYWRPbmx5Tm9kZSgpICYmIChlbGVtZW50Lmlz
VGV4dEZpZWxkKCkgfHwgZWxlbWVudC5pc0RhdGVGaWVsZCgpIHx8IGVsZW1lbnQuaXNEYXRlVGlt
ZUxvY2FsRmllbGQoKSB8fCBlbGVtZW50LmlzTW9udGhGaWVsZCgpIHx8IGVsZW1lbnQuaXNUaW1l
RmllbGQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7
CkBAIC0yMDY2LDgxICsyMDY2LDgxIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIGluZm9y
bWF0aW9uLmhhc05leHROb2RlID0gaGFzRm9jdXNhYmxlRWxlbWVudChtX2Fzc2lzdGVkTm9kZS5n
ZXQoKSwgbV9wYWdlLmdldCgpLCB0cnVlKTsKICAgICBpbmZvcm1hdGlvbi5oYXNQcmV2aW91c05v
ZGUgPSBoYXNGb2N1c2FibGVFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpLCBtX3BhZ2UuZ2V0
KCksIGZhbHNlKTsKIAotICAgIGlmIChpc0hUTUxTZWxlY3RFbGVtZW50KG1fYXNzaXN0ZWROb2Rl
LmdldCgpKSkgewotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFNl
bGVjdEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOworICAgIGlmIChpc0hUTUxTZWxlY3RF
bGVtZW50KCptX2Fzc2lzdGVkTm9kZSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYgZWxl
bWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOwogICAg
ICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6U2VsZWN0OwotICAgICAg
ICBzaXplX3QgY291bnQgPSBlbGVtZW50LT5saXN0SXRlbXMoKS5zaXplKCk7CisgICAgICAgIHNp
emVfdCBjb3VudCA9IGVsZW1lbnQubGlzdEl0ZW1zKCkuc2l6ZSgpOwogICAgICAgICBpbnQgcGFy
ZW50R3JvdXBJRCA9IDA7CiAgICAgICAgIC8vIFRoZSBwYXJlbnQgZ3JvdXAgSUQgaW5kaWNhdGVz
IHRoZSBncm91cCB0aGUgb3B0aW9uIGJlbG9uZ3MgdG8gYW5kIGlzIDAgZm9yIGdyb3VwIGVsZW1l
bnRzLgogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9uIGVsZW1lbnRzIGluIGJldHdlZW4g
Z3JvdXBzLCB0aGV5IGFyZSBnaXZlbiBpdCdzIG93biBncm91cCBpZGVudGlmaWVyLgogICAgICAg
ICAvLyBJZiBhIHNlbGVjdCBkb2VzIG5vdCBoYXZlIGdyb3VwcywgYWxsIHRoZSBvcHRpb24gZWxl
bWVudHMgaGF2ZSBncm91cCBJRCAwLgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50KiBpdGVtID0gZWxlbWVudC0+bGlz
dEl0ZW1zKClbaV07CisgICAgICAgICAgICBIVE1MRWxlbWVudCogaXRlbSA9IGVsZW1lbnQubGlz
dEl0ZW1zKClbaV07CiAgICAgICAgICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChpdGVtKSkg
ewotICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRp
b25FbGVtZW50KGl0ZW0pOwotICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlv
bnMuYXBwZW5kKE9wdGlvbkl0ZW0ob3B0aW9uLT50ZXh0KCksIGZhbHNlLCBwYXJlbnRHcm91cElE
LCBvcHRpb24tPnNlbGVjdGVkKCksIG9wdGlvbi0+ZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmRpc2FibGVkQXR0cikpKTsKKyAgICAgICAgICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtKTsKKyAgICAg
ICAgICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmFwcGVuZChPcHRpb25JdGVtKG9w
dGlvbi50ZXh0KCksIGZhbHNlLCBwYXJlbnRHcm91cElELCBvcHRpb24uc2VsZWN0ZWQoKSwgb3B0
aW9uLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpKSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVudChpdGVtKSkgewot
ICAgICAgICAgICAgICAgIEhUTUxPcHRHcm91cEVsZW1lbnQqIGdyb3VwID0gdG9IVE1MT3B0R3Jv
dXBFbGVtZW50KGl0ZW0pOworICAgICAgICAgICAgICAgIEhUTUxPcHRHcm91cEVsZW1lbnQmIGdy
b3VwID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0ZW0pOwogICAgICAgICAgICAg
ICAgIHBhcmVudEdyb3VwSUQrKzsKLSAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RP
cHRpb25zLmFwcGVuZChPcHRpb25JdGVtKGdyb3VwLT5ncm91cExhYmVsVGV4dCgpLCB0cnVlLCAw
LCBmYWxzZSwgZ3JvdXAtPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNh
YmxlZEF0dHIpKSk7CisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0aW9ucy5h
cHBlbmQoT3B0aW9uSXRlbShncm91cC5ncm91cExhYmVsVGV4dCgpLCB0cnVlLCAwLCBmYWxzZSwg
Z3JvdXAuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cikp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3Rl
ZEluZGV4ID0gZWxlbWVudC0+c2VsZWN0ZWRJbmRleCgpOwotICAgICAgICBpbmZvcm1hdGlvbi5p
c011bHRpU2VsZWN0ID0gZWxlbWVudC0+bXVsdGlwbGUoKTsKLSAgICB9IGVsc2UgaWYgKGlzSFRN
TFRleHRBcmVhRWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsKLSAgICAgICAgSFRNTFRl
eHRBcmVhRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSk7Ci0gICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0
YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXplVHlwZT4oZWxlbWVudC0+YXV0b2NhcGl0YWxpemVU
eXBlKCkpOwotICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gZWxlbWVudC0+YXV0
b2NvcnJlY3QoKTsKKyAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0ZWRJbmRleCA9IGVsZW1lbnQu
c2VsZWN0ZWRJbmRleCgpOworICAgICAgICBpbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0ID0gZWxl
bWVudC5tdWx0aXBsZSgpOworICAgIH0gZWxzZSBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KCpt
X2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAgICAg
IGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0YXRpY19jYXN0PFdlYkF1dG9jYXBp
dGFsaXplVHlwZT4oZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7CisgICAgICAgIGluZm9y
bWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LmF1dG9jb3JyZWN0KCk7CiAgICAgICAgIGlu
Zm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpUZXh0QXJlYTsKLSAgICAgICAgaW5m
b3JtYXRpb24uaXNSZWFkT25seSA9IGVsZW1lbnQtPmlzUmVhZE9ubHkoKTsKLSAgICAgICAgaW5m
b3JtYXRpb24udmFsdWUgPSBlbGVtZW50LT52YWx1ZSgpOwotICAgIH0gZWxzZSBpZiAoaXNIVE1M
SW5wdXRFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MSW5wdXRF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgp
KTsKLSAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC0+Zm9ybSgpOworICAg
ICAgICBpbmZvcm1hdGlvbi5pc1JlYWRPbmx5ID0gZWxlbWVudC5pc1JlYWRPbmx5KCk7CisgICAg
ICAgIGluZm9ybWF0aW9uLnZhbHVlID0gZWxlbWVudC52YWx1ZSgpOworICAgIH0gZWxzZSBpZiAo
aXNIVE1MSW5wdXRFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVk
Tm9kZSk7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGVsZW1lbnQuZm9ybSgpOwog
ICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmZvcm1BY3Rpb24gPSBm
b3JtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjphY3Rpb25BdHRyKTsKLSAg
ICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gc3RhdGljX2Nhc3Q8V2ViQXV0
b2NhcGl0YWxpemVUeXBlPihlbGVtZW50LT5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7Ci0gICAgICAg
IGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LT5hdXRvY29ycmVjdCgpOwotICAg
ICAgICBpZiAoZWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIGluZm9ybWF0aW9u
LmF1dG9jYXBpdGFsaXplVHlwZSA9IHN0YXRpY19jYXN0PFdlYkF1dG9jYXBpdGFsaXplVHlwZT4o
ZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7CisgICAgICAgIGluZm9ybWF0aW9uLmlzQXV0
b2NvcnJlY3QgPSBlbGVtZW50LmF1dG9jb3JyZWN0KCk7CisgICAgICAgIGlmIChlbGVtZW50Lmlz
UGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJ
bnB1dFR5cGU6OlBhc3N3b3JkOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1NlYXJjaEZp
ZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNTZWFyY2hGaWVsZCgpKQogICAgICAg
ICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlNlYXJjaDsKLSAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC0+aXNFbWFpbEZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaXNFbWFpbEZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSA9IElucHV0VHlwZTo6RW1haWw7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzVGVsZXBo
b25lRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc1RlbGVwaG9uZUZpZWxkKCkp
CiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6UGhvbmU7
Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzTnVtYmVyRmllbGQoKSkKLSAgICAgICAgICAg
IGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJwYXR0ZXJu
IikgPT0gIlxcZCoiIHx8IGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgicGF0dGVybiIpID09ICJbMC05
XSoiID8gSW5wdXRUeXBlOjpOdW1iZXJQYWQgOiBJbnB1dFR5cGU6Ok51bWJlcjsKLSAgICAgICAg
ZWxzZSBpZiAoZWxlbWVudC0+aXNEYXRlVGltZUxvY2FsRmllbGQoKSkKKyAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC5pc051bWJlckZpZWxkKCkpCisgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlxcZCoiIHx8IGVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlswLTldKiIgPyBJbnB1dFR5cGU6Ok51
bWJlclBhZCA6IElucHV0VHlwZTo6TnVtYmVyOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmlz
RGF0ZVRpbWVMb2NhbEZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSA9IElucHV0VHlwZTo6RGF0ZVRpbWVMb2NhbDsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+
aXNEYXRlRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0RhdGVGaWVsZCgpKQog
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkRhdGU7Ci0g
ICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzRGF0ZVRpbWVGaWVsZCgpKQorICAgICAgICBlbHNl
IGlmIChlbGVtZW50LmlzRGF0ZVRpbWVGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkRhdGVUaW1lOwotICAgICAgICBlbHNlIGlmIChlbGVt
ZW50LT5pc1RpbWVGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzVGltZUZpZWxk
KCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6VGlt
ZTsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNXZWVrRmllbGQoKSkKKyAgICAgICAgZWxz
ZSBpZiAoZWxlbWVudC5pc1dlZWtGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxl
bWVudFR5cGUgPSBJbnB1dFR5cGU6OldlZWs7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlz
TW9udGhGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzTW9udGhGaWVsZCgpKQog
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6Ok1vbnRoOwot
ICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1VSTEZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYg
KGVsZW1lbnQuaXNVUkxGaWVsZCgpKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5
cGUgPSBJbnB1dFR5cGU6OlVSTDsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNUZXh0KCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGF0dGVybiA9IGVsZW1lbnQtPmZh
c3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpwYXR0ZXJuQXR0cik7CisgICAgICAgIGVsc2UgaWYg
KGVsZW1lbnQuaXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGF0
dGVybiA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnBhdHRlcm5BdHRyKTsK
ICAgICAgICAgICAgIGlmIChwYXR0ZXJuID09ICJcXGQqIiB8fCBwYXR0ZXJuID09ICJbMC05XSoi
KQogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpO
dW1iZXJQYWQ7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6VGV4dDsKICAgICAgICAgICAgICAgICBpZiAoIWlu
Zm9ybWF0aW9uLmZvcm1BY3Rpb24uaXNFbXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICYmIChl
bGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIpIHx8IGVsZW1lbnQt
PmdldElkQXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIpIHx8IGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLmNvbnRhaW5zKCJzZWFyY2giKSkpCisgICAg
ICAgICAgICAgICAgICAgICYmIChlbGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKS5jb250YWlucygi
c2VhcmNoIikgfHwgZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLmNvbnRhaW5zKCJzZWFyY2giKSB8
fCBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLmNvbnRhaW5z
KCJzZWFyY2giKSkpCiAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBl
ID0gSW5wdXRUeXBlOjpTZWFyY2g7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBpbmZvcm1hdGlvbi5pc1JlYWRPbmx5ID0gZWxlbWVudC0+aXNSZWFkT25seSgpOwotICAgICAg
ICBpbmZvcm1hdGlvbi52YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7Ci0gICAgICAgIGluZm9ybWF0
aW9uLnZhbHVlQXNOdW1iZXIgPSBlbGVtZW50LT52YWx1ZUFzTnVtYmVyKCk7Ci0gICAgICAgIGlu
Zm9ybWF0aW9uLnRpdGxlID0gZWxlbWVudC0+dGl0bGUoKTsKKyAgICAgICAgaW5mb3JtYXRpb24u
aXNSZWFkT25seSA9IGVsZW1lbnQuaXNSZWFkT25seSgpOworICAgICAgICBpbmZvcm1hdGlvbi52
YWx1ZSA9IGVsZW1lbnQudmFsdWUoKTsKKyAgICAgICAgaW5mb3JtYXRpb24udmFsdWVBc051bWJl
ciA9IGVsZW1lbnQudmFsdWVBc051bWJlcigpOworICAgICAgICBpbmZvcm1hdGlvbi50aXRsZSA9
IGVsZW1lbnQudGl0bGUoKTsKICAgICB9IGVsc2UgaWYgKG1fYXNzaXN0ZWROb2RlLT5oYXNFZGl0
YWJsZVN0eWxlKCkpIHsKICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5
cGU6OkNvbnRlbnRFZGl0YWJsZTsKICAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvY29ycmVjdCA9
IHRydWU7ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBsb29rIGF0IHRoZSBhdHRyaWJ1dGU/Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238568</attachid>
            <date>2014-09-23 13:50:22 -0700</date>
            <delta_ts>2014-09-23 15:03:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137007-20140923135021.patch</filename>
            <type>text/plain</type>
            <size>286470</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYxZmM0ZGJhYTcxOTYz
NDMzMTVhYmU4OWU2OTY5NzExMTZhYjYzOC4uMzdjMjQwNTUxNjUxZjI0MGIwM2JmODFlYzc5ZTE2
MzkwZDZhODM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxOSBAQAorMjAxNC0wOS0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1M
KkVsZW1lbnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFVzZSBkb3duY2FzdDxIVE1MKkVsZW1l
bnQ+KCkgaW5zdGVhZCBvZiB0b0hUTUwqRWxlbWVudCgpIGFuZCBkcm9wCisgICAgICAgIHRyYW5z
aXRpb24gbWFjcm9zIGZvciB0b0hUTUwqRWxlbWVudCgpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBjbGVhbnMgdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJ
RWxlbWVudEZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGFiZWxD
aGFuZ2VkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjYW5TZXRTZWxlY3Rl
ZENoaWxkcmVuQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0
Qm94OjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbjo6aXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbjo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUxpc3RCb3hPcHRpb246Omxpc3RCb3hPcHRpb25QYXJlbnROb2RlKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OmlzU2VsZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzZXRTZWxl
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246OnN0
cmluZ1ZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlz
dFBvcHVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVw
OjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlVGV4dENvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9y
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb2RlQWN0aW9uRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWx0ZXJuYXRpdmVUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2aXNpYmxlVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFjY2Vzc2libGVOYW1lRm9yTm9kZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmlzRmlsZVVwbG9hZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYWJlbEVsZW1lbnRDb250YWluZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5r
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGVy
bWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFkZFRleHRGaWVsZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVlRm9yTVNBQSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0xpbmtlZCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlTbGlkZXI6OmlucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWI6OmVsZW1lbnRSZWN0KToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5VGFibGU6OnRpdGxlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hh
bmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKG9wdGlvbkZyb21TZWxlY3Rpb24pOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdldFNlbGVjdGlvbkNvdW50KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbik6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZUdldERlc2NyaXB0aW9uKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmllbGRMZW5ndGgpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5hbWVkSXRlbUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZyYW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzUmVhY2hhYmxlRnJvbURPTSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKToKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6
aXNDaGVja2VkKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgICogY3Nz
L1N0eWxlU2hlZXRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0Ojpn
ZXROYW1lZEl0ZW0pOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VDb250ZXh0U3R5bGVVbmlxdWVJ
Zk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6bWFrZUVsZW1lbnRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVz
dElzUGxhY2Vob2xkZXJTaG93bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVy
Ojppc1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAqIGRvbS9DdXJyZW50U2NyaXB0SW5jcmVt
ZW50ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRTY3JpcHRJbmNyZW1lbnRlcjo6Q3Vy
cmVudFNjcmlwdEluY3JlbWVudGVyKToKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFRpdGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjppY29uVVJMcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTWFwTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTG93ZXJjYXNlZE1hcE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6a2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXApOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlNYXBOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNh
c2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxl
bWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogZG9tL0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnVwZGF0ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlTGFiZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24pOgorICAgICAgICAqIGRv
bS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKToKKyAgICAgICAgKiBkb20v
VmlzaXRlZExpbmtTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6ZGV0ZXJtaW5lTGlua1N0
YXRlU2xvd0Nhc2UpOgorICAgICAgICAqIGRvbS9tYWtlX25hbWVzLnBsOgorICAgICAgICAocHJp
bnRUeXBlSGVscGVycyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OmltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRG
aXJzdE1hcmthYmxlKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6c2NhbkZvckZvcm0pOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVz
V2l0aE5hbWVzcGFjZXMpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3Vs
ZFBlcmZvcm1TbWFydFJlcGxhY2UpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpub25Cb3VuZGFyeVNo
YWRvd1RyZWVSb290Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpp
c0luUGFzc3dvcmRGaWVsZCk6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
Lm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KToKKyAgICAgICAg
KiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNl
dFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAq
IGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzUGxhaW5UZXh0TWFya3Vw
KToKKyAgICAgICAgKiBodG1sL0NvbG9ySW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9ySW5wdXRUeXBlOjpzdWdnZXN0aW9ucyk6CisgICAgICAgICogaHRtbC9GVFBEaXJlY3Rv
cnlEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBh
cnNlcjo6bG9hZERvY3VtZW50VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0
b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZUJhc2ljRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6ZmluZEFzc29jaWF0ZWRGb3JtKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9z
aXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hU
TUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTWF0Y2hpbmdFbGVtZW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50OjptYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVu
dDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToK
KyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnRzSWZOZWVkZWQpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlSXNEaXNhYmxlZEJ5RmllbGRzZXRBbmNlc3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBdXRvZm9jdXMpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb246OmZvcm1Db250cm9sRWxlbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmZvcm1JbWFnZUVsZW1lbnRzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6OmdldFRleHRGaWVsZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6OmFzc2VydEl0ZW1DYW5CZUluUGFzdE5hbWVzTWFwKToKKyAgICAgICAgKiBo
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpkYXRhTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpzZXR1cERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMpOgorICAgICAgICAqIGh0bWwv
SFRNTEtleWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1l
bnQ6OnNoYWRvd1NlbGVjdCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6dmlydHVhbEZvcm0pOgorICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTmFtZUNv
bGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6
ZWxlbWVudE1hdGNoZXNJZklkQXR0cmlidXRlTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXNJZk5hbWVBdHRyaWJ1dGVNYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE5hbWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hl
cyk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlRG9jTmFtZWRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBsZXQpOgorICAgICAgICAq
IGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0
R3JvdXBFbGVtZW50OjpyZWNhbGNTZWxlY3RPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVu
dDo6b3duZXJEYXRhTGlzdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVs
ZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjph
ZGQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICog
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFBs
dWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbik6CisgICAgICAgICogaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6aGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFz
dFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0
aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpzZWxlY3RPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlYXJjaE9wdGlvbnNGb3JWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25BdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4KToKKyAg
ICAgICAgKiBodG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU3VtbWFyeUVsZW1lbnQ6OmRldGFpbHNFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6Y2Fw
dGlvbik6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGFibGVQYXJ0RWxlbWVudDo6ZmluZFBhcmVudFRhYmxlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93c0NvbGxlY3Rp
b246OnJvd0FmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
OjpsYXN0Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpj
dXN0b21FbGVtZW50QWZ0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRlbXBsYXRlRWxlbWVudDo6Y2xvbmVOb2RlKToKKyAgICAgICAgKiBodG1s
L0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xv
c2luZ1RleHRGb3JtQ29udHJvbCk6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJl
KToKKyAgICAgICAgKiBodG1sL0xhYmVsc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxhYmVsc05vZGVMaXN0OjplbGVtZW50TWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9NZWRpYURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnRQYXJzZXI6OmNyZWF0
ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2NlbmRlbnRWaWRlb0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JWaWRlb0VsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVyRmlyZWQp
OgorICAgICAgICAqIGh0bWwvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAg
KiBodG1sL1JhZGlvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRU
eXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5
cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb05vZGVMaXN0OjpjaGVja0VsZW1lbnRNYXRjaGVz
UmFkaW9Ob2RlTGlzdEZpbHRlcik6CisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6dXBkYXRlVGlja01hcmtWYWx1ZXMp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0VGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EZXRhaWxzTWFya2Vy
Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZXRhaWxzTWFya2VyQ29udHJvbDo6cmVu
ZGVyZXJJc05lZWRlZCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6dXBkYXRlRGlzcGxheSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWV0ZXJTaGFk
b3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1ldGVyU2hhZG93RWxlbWVudDo6bWV0
ZXJFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Qcm9ncmVzc1NoYWRvd0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3Jlc3NTaGFkb3dFbGVtZW50Ojpwcm9ncmVzc0Vs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZl
bnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnZpYUluc3BlY3RvclN0eWxlU2hlZXQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKToKKyAgICAgICAgKiBs
b2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Np
b246OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpoYW5kbGVGYWxsYmFja0NvbnRlbnQpOgorICAgICAgICAq
IGxvYWRlci9JbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6
ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50KToKKyAgICAgICAgKiBsb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RP
YmplY3QpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZTo6c2V0VG9vbFRpcCk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudCk6CisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTdWJtaXRJ
bWFnZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFk
ZEVtYmVkZGVkT2JqZWN0VG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1
cGRhdGVFbWJlZGRlZE9iamVjdCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAg
ICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlP
Uy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMp
OgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OmFsdERpc3BsYXlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdDo6bWVkaWFDb250cm9sc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdDo6aXNMaXZlTGluayk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
Ojppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnVwZGF0ZUZyb21FbGVtZW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwbGFuQ291bnRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludENvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6aW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjp1cGxvYWRCdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZTo6ZnJhbWVFbGVt
ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OmZyYW1lU2V0RWxlbWVudCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRN
TENhbnZhczo6Y2FudmFzRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklGcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJRnJhbWU6OmlmcmFtZUVsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6
OnBhaW50QXJlYUVsZW1lbnRGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmltYWdl
TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp1cGRhdGVBbHRUZXh0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94OjpzZWxlY3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RlZE9wdGlvbkNvdW50
KToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpzZWxlY3RFbGVtZW50KToKKyAgICAgICAgKFJl
bmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgpOgorICAgICAgICAoUmVuZGVyTWVudUxp
c3Q6OnNldFRleHRGcm9tT3B0aW9uKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjppdGVtVGV4
dCk6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2VsZWN0ZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZXRl
cjo6bWV0ZXJFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OnByb2dyZXNzRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTbGlkZXI6OmVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbmFwc2hv
dHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bjo6cGx1Z0luSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3Jt
Q29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZTo6dGV4dEFyZWFFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clZpZGVvOjp2aWRlb0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OmltYWdlRm9yUmVuZGVy
ZXIpOgorICAgICAgICAqIHN2Zy9zdmd0YWdzLmluOgorICAgICAgICBHZW5lcmF0ZSBoZWxwZXJz
IHRvIFNWR0FFbGVtZW50IHNvIHRoYXQgaXNTVkdBRWxlbWVudCgpIGNhbiBiZSB1c2VkCisgICAg
ICAgIGluc3RlYWQgb2YgaGFzVGFnTmFtZShTVkdOYW1lczo6YVRhZykuIEkgZGlkIHN1Y2ggdXBk
YXRlIGluIHRoaXMKKyAgICAgICAgcGF0Y2guCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnZpc2libGVQbGFjZWhvbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2VyRWRpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6c3RhcnRFbGVtZW50TnMpOgorCiAyMDE0LTA5LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBET01JbXBsZW1lbnRhdGlvbjo6ZG9jdW1lbnQoKSBh
bmQgRWxlbWVudDo6YXR0cmlidXRlcygpIHJldHVybiByZWZlcmVuY2VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cK
aW5kZXggNDcyNzJlMmZlM2Q3ODFjYjg2MzdjNWM5NzY3YTQ3NWI4MjBlYmU5My4uNjM4MmI2NTk1
MzNmMjQ5ODc4ZDFiYzU0NmQ0MGEyYTMxZDNhMjc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9pb3MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDE0LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpF
bGVtZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNzAwNworCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAg
ICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50
KCkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MubW06Cisg
ICAgICAgIChXZWJDaHJvbWVDbGllbnRJT1M6OmZvY3VzZWRFbGVtZW50Q2hhbmdlZCk6CisKIDIw
MTQtMDktMTcgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNzM2OTUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggM2U0MGQy
YTYzNmQ0Mzg3ZmNkODE0YTAzZGRjNGM5MTkxODk1ZGM4NS4uNDJjNmNmOTcwMWZkNzBhMTM4ZDc0
MWU2ZDBiZjY5NmNhMjg2M2E2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisy
MDE0LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzAwNworCisg
ICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgVXNlIGRvd25j
YXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRNTCpFbGVtZW50KCkuCisKKyAgICAg
ICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxl
bWVudCBfc2V0QXV0b2ZpbGxlZDpdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWRFbGVtZW50Q2hh
bmdlZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAg
ICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcpOgorICAgICAg
ICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkVk
aXRvckNsaWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkVk
aXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCk6CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKGlucHV0RWxlbWVudEZyb21ET01F
bGVtZW50KToKKwogMjAxNC0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIEdlbmVyYXRlIEVsZW1lbnQgY2FzdGluZyBoZWxwZXIgZnVuY3Rpb25zCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKaW5kZXggNTFmN2MyMWE0Mzc5MGQ1YTQwZWMwNzQ4MDljZjdiYTAyNzJhZjliNi4u
Y2U5NjEzN2VkZWI2MThhNTBlYzYwZDZkOWRhYTYwNWExMTdiNzAxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDUwIEBACisyMDE0LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9m
IHRvSFRNTCpFbGVtZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNzAwNworCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4u
CisKKyAgICAgICAgVXNlIGRvd25jYXN0PEhUTUwqRWxlbWVudD4oKSBpbnN0ZWFkIG9mIHRvSFRN
TCpFbGVtZW50KCkuCisKKyAgICAgICAgKiBET01IVE1MQ2xhc3Nlcy5jcHA6CisgICAgICAgIChE
T01IVE1MRG9jdW1lbnQ6OlVSTCk6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OmJvZHkpOgor
ICAgICAgICAoRE9NSFRNTERvY3VtZW50Ojpmb3Jtcyk6CisgICAgICAgIChET01IVE1MRm9ybUVs
ZW1lbnQ6OmFjdGlvbik6CisgICAgICAgIChET01IVE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCk6Cisg
ICAgICAgIChET01IVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9ucyk6CisgICAgICAgIChET01IVE1M
U2VsZWN0RWxlbWVudDo6YWN0aXZhdGVJdGVtQXRJbmRleCk6CisgICAgICAgIChET01IVE1MT3B0
aW9uRWxlbWVudDo6dGV4dCk6CisgICAgICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwp
OgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1M
SW5wdXRFbGVtZW50OjpkaXNhYmxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojpy
ZWFkT25seSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKToKKyAgICAg
ICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVl
Rm9yVXNlcik6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3QpOgorICAgICAg
ICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9N
SFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0
RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6
OnNlbGVjdGlvbkVuZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVs
ZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFu
Z2UpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAg
ICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhU
TUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2ZpbGxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVt
ZW50Ojppc1VzZXJFZGl0ZWQpOgorICAgICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9y
bSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChE
T01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFy
ZWFFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNV
c2VyRWRpdGVkKToKKyAgICAgICAgKERPTUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUp
OgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKGZvcm1FbGVtZW50RnJvbURPTUVs
ZW1lbnQpOgorICAgICAgICAoaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQpOgorCiAyMDE0LTA5
LTIxICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUg
RWxlbWVudCBjYXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5ZTMxNDFhMjg1
M2Y5YzJiYjBkZWVjODc1YTI1NTMyMTNjNTRlMThiLi5mYWJkNjFmMTg5OGM0NTcxNzYzYzlhZWZm
OGZiYTVmNDQ3OTYzNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTQtMDktMjIg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgZG93bmNhc3Q8
SFRNTCpFbGVtZW50PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBVc2UgZG93bmNhc3Q8SFRNTCpF
bGVtZW50PigpIGluc3RlYWQgb2YgdG9IVE1MKkVsZW1lbnQoKS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6c2V0SFRNTElucHV0RWxl
bWVudFZhbHVlRm9yVXNlcik6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZTo6aXNIVE1MSW5wdXRFbGVtZW50QXV0b2ZpbGxlZCk6CisgICAgICAgIChXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6c2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxJbnB1dEVsZW1l
bnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRs
ZU5vZGVIYW5kbGU6Omh0bWxUZXh0QXJlYUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQpOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzVGV4dEZpZWxkKToK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGFibGVDZWxs
RWxlbWVudENlbGxBYm92ZSk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZTo6aHRtbElGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tOgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6Y3JlYXRlQW5ub3RhdGlvbkVsZW1lbnQp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6dmFsdWUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luVmlldzo6aW5pdGlhbGl6ZVBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBsdWdp
blZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdp
blZpZXc6OnBsdWdpbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFu
ZEZyb21FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjcmVhdGVQbHVnaW4pOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6Omlz
QXNzaXN0YWJsZU5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisKIDIwMTQtMDktMjMgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBT
aG91bGQgYmUgYWJsZSB0byBhdHRhY2ggYSBkZWJ1Z2dlciB0byBhIEpTQ29udGV4dCBiZWZvcmUg
YW55dGhpbmcgaXMgZXhlY3V0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCmluZGV4IGYxOTUzZDZjNWE3NjhiNTI1N2EyZjY2YWRhZDRkNDdmYzFl
Njk1YjYuLmVhYTE2MjNlMDQ1NmM0ZDFhMzZlODExMTU0MzJkMmU4MWMwYzRiNmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTc3LDcg
KzE3Nyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVs
ZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqIHBhZ2UpCiAgICAgRG9jdW1lbnQqIGZvY3VzZWREb2N1
bWVudCA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3Vt
ZW50KCk7CiAgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBmb2N1c2VkRG9jdW1lbnQtPmZv
Y3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGlzSFRNTEFyZWFFbGVt
ZW50KGZvY3VzZWRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZvY3VzZWRJbWFnZU1hcFVJRWxl
bWVudCh0b0hUTUxBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCkpOworICAgICAgICByZXR1cm4g
Zm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oZm9jdXNl
ZEVsZW1lbnQpKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGZvY3VzZWREb2N1
bWVudC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkRWxlbWVudCA/IHN0YXRp
Y19jYXN0PE5vZGUqPihmb2N1c2VkRWxlbWVudCkgOiBmb2N1c2VkRG9jdW1lbnQpOwogICAgIGlm
ICghb2JqKQpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgRWxlbWVuCiB2b2lk
IEFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hhbmdlZChFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFT
U0VSVChpc0hUTUxMYWJlbEVsZW1lbnQoZWxlbWVudCkpOwotICAgIEhUTUxFbGVtZW50KiBjb3Jy
ZXNwb25kaW5nQ29udHJvbCA9IHRvSFRNTExhYmVsRWxlbWVudChlbGVtZW50KS0+Y29udHJvbCgp
OworICAgIEhUTUxFbGVtZW50KiBjb3JyZXNwb25kaW5nQ29udHJvbCA9IGRvd25jYXN0PEhUTUxM
YWJlbEVsZW1lbnQ+KGVsZW1lbnQpLT5jb250cm9sKCk7CiAgICAgdGV4dENoYW5nZWQoY29ycmVz
cG9uZGluZ0NvbnRyb2wpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCmluZGV4IDYyYjkzNGQ3ZDNiODU1NjNiYmZm
NDVjZjc4NWU2ZTcyZDcyNzYxN2IuLjBmOGUxZDliNTZlNzg4ZjgxNzUzYjFmMjAwY2ZiMjc1M2Ji
MWIwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUxpc3RCb3guY3BwCkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUxp
c3RCb3g6OmNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKSBjb25zdAogICAgIGlmICgh
c2VsZWN0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiAhdG9I
VE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCk7Cisg
ICAgcmV0dXJuICFkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdE5vZGUpLmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjphZGRD
aGlsZHJlbigpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmFk
ZENoaWxkcmVuKCkKICAgICAKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAgICAgCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBsaXN0SXRlbSA6IHRvSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0Tm9k
ZSktPmxpc3RJdGVtcygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBsaXN0SXRlbSA6IGRvd25j
YXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0Tm9kZSkubGlzdEl0ZW1zKCkpIHsKICAgICAg
ICAgLy8gVGhlIGNhc3QgdG8gSFRNTEVsZW1lbnQgYmVsb3cgaXMgc2FmZSBiZWNhdXNlIHRoZSBv
bmx5IG90aGVyIHBvc3NpYmxlIGxpc3RJdGVtIHR5cGUKICAgICAgICAgLy8gd291bGQgYmUgYSBX
TUxFbGVtZW50LCBidXQgV01MIGJ1aWxkcyBkb24ndCB1c2UgYWNjZXNzaWJpbGl0eSBmZWF0dXJl
cyBhdCBhbGwuCiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPcHRpb24gPSBsaXN0
Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChsaXN0SXRlbSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24u
Y3BwCmluZGV4IGE5ZmFkOGQ0NzJhNzNhMmMwOWNmYzgwNTQ5ZWFmMTA0NmNlNmQ5ZTYuLmQ4NjVj
ODk1ZTNlZTY1YzY2MWRlYmMxYjUwYzRhZjFmMTg3OWIzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24u
Y3BwCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omlz
U2VsZWN0ZWQoKSBjb25zdAogICAgIGlmICghaXNIVE1MT3B0aW9uRWxlbWVudChtX29wdGlvbkVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdG9IVE1MT3B0aW9u
RWxlbWVudChtX29wdGlvbkVsZW1lbnQpLT5zZWxlY3RlZCgpOworICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgp
IGNvbnN0CkBAIC0xNTcsMTAgKzE1NywxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246OnN0cmluZ1ZhbHVlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGFyaWFMYWJlbDsKICAg
ICAKICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChtX29wdGlvbkVsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gdG9IVE1MT3B0aW9uRWxlbWVudChtX29wdGlvbkVsZW1lbnQpLT50ZXh0KCk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVu
dCkudGV4dCgpOwogICAgIAogICAgIGlmIChpc0hUTUxPcHRHcm91cEVsZW1lbnQobV9vcHRpb25F
bGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlvbkVs
ZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9w
dEdyb3VwRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkuZ3JvdXBMYWJlbFRleHQoKTsKICAgICAK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0yMDMsMTAgKzIwMywxMCBAQCBIVE1MU2VsZWN0
RWxlbWVudCogQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omxpc3RCb3hPcHRpb25QYXJlbnRO
b2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoaXNIVE1MT3B0
aW9uRWxlbWVudChtX29wdGlvbkVsZW1lbnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MT3B0aW9u
RWxlbWVudChtX29wdGlvbkVsZW1lbnQpLT5vd25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5vd25l
clNlbGVjdEVsZW1lbnQoKTsKIAogICAgIGlmIChpc0hUTUxPcHRHcm91cEVsZW1lbnQobV9vcHRp
b25FbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTE9wdEdyb3VwRWxlbWVudChtX29wdGlv
bkVsZW1lbnQpLT5vd25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2VsZWN0RWxlbWVu
dCgpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCmluZGV4
IGEwNzM1YjRmZWZhMWIzYTdkMTFmYjMzNDg2ZTIxMGQ3Yjk3MWM5YzUuLmRlYjA5MjBmOGI5ODM2
Y2M5ODZhMjM4Mjk2NWRhNjA2NjJiYTZkODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCkBAIC0y
NzcsNyArMjc3LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjp2YWx1ZURl
c2NyaXB0aW9uKCkgY29uc3QKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChub2RlKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgZmxvYXQgdGltZSA9IHRvSFRNTElucHV0RWxl
bWVudChub2RlKS0+dmFsdWUoKS50b0Zsb2F0KCk7CisgICAgZmxvYXQgdGltZSA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpLnRvRmxvYXQoKTsKICAgICByZXR1cm4g
bG9jYWxpemVkTWVkaWFUaW1lRGVzY3JpcHRpb24odGltZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uLmNwcAppbmRleCA4OGUyZTZlZTE1NjBkYjljMDI4MjIyZDYzMjcyMmMxNGI3MDA2ZmU2Li5j
NjkyMTFhYjljMzU0ZmY3MDcyNDlhYmJkYmUyOGM2MDAxZmFkZDgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb24uY3BwCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uOjppc0VuYWJsZWQoKSBjb25zdAogewogICAgIC8vIGlzRGlzYWJsZWRGb3JtQ29udHJvbCgp
IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyZW50IDxzZWxlY3Q+IGVsZW1lbnQgaXMgZGlzYWJsZWQs
CiAgICAgLy8gd2hpY2ggd2UgZG9uJ3Qgd2FudC4KLSAgICByZXR1cm4gIXRvSFRNTE9wdGlvbkVs
ZW1lbnQobV9lbGVtZW50LmdldCgpKS0+b3duRWxlbWVudERpc2FibGVkKCk7CisgICAgcmV0dXJu
ICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm1fZWxlbWVudCkub3duRWxlbWVudERpc2Fi
bGVkKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjppc1Zpc2libGUo
KSBjb25zdApAQCAtNzUsMTUgKzc1LDE1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uOjppc09mZlNjcmVlbigpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uOjppc1NlbGVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MT3B0aW9uRWxlbWVu
dChtX2VsZW1lbnQuZ2V0KCkpLT5zZWxlY3RlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1M
T3B0aW9uRWxlbWVudD4oKm1fZWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0KIAotdm9pZCBBY2Nlc3Np
YmlsaXR5TWVudUxpc3RPcHRpb246OnNldFNlbGVjdGVkKGJvb2wgYikKK3ZvaWQgQWNjZXNzaWJp
bGl0eU1lbnVMaXN0T3B0aW9uOjpzZXRTZWxlY3RlZChib29sIHNlbGVjdGVkKQogewogICAgIGlm
ICghY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdG9I
VE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpLT5zZXRTZWxlY3RlZChiKTsKKyAgICBk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm1fZWxlbWVudCkuc2V0U2VsZWN0ZWQoc2VsZWN0
ZWQpOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9yTVNB
QSgpIGNvbnN0CkBAIC0xMTQsNyArMTE0LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb246OmVsZW1lbnRSZWN0KCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbjo6c3RyaW5nVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxP
cHRpb25FbGVtZW50KG1fZWxlbWVudC5nZXQoKSktPnRleHQoKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpLnRleHQoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAppbmRleCAxZDUyMTlkNjMzYjA1ZDc1
NmUxNDhkNzVmNzQ3ZDg3MTMzODdhM2NlLi5mYzI1ODVkMWVmYzEzYjRkY2U0MmEzZGIwNjBlY2Q1
YzYxZGI2MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKCkKIAogICAgIG1faGF2
ZUNoaWxkcmVuID0gdHJ1ZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbGlzdEl0ZW0gOiB0b0hU
TUxTZWxlY3RFbGVtZW50KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKSkgeworICAgIGZvciAoY29u
c3QgYXV0byYgbGlzdEl0ZW0gOiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdE5v
ZGUpLmxpc3RJdGVtcygpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiog
b3B0aW9uID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtKTsKICAg
ICAgICAgaWYgKG9wdGlvbikgewogICAgICAgICAgICAgb3B0aW9uLT5zZXRQYXJlbnQodGhpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCmluZGV4IDZlY2FlMTgyNWQ4N2RiYjk3YmI4ODIzNTI4ZTkxMTBlMjM1
MzExMzguLjhlNmUyNDdmZjdkYmI5MGY0MWUyZDdmNjBmNzQwNzljZGJhNTVlMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCkBAIC0yOTEsMTggKzI5MSwxOCBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChu
b2RlKCktPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVU
eXBlKCk7CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChub2RlKCkpKSB7Ci0gICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAg
ICAgIGlmIChpbnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBp
bnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOworICAgICAgICBpZiAo
aW5wdXQuaXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKLSAg
ICAgICAgaWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgIGlmIChpbnB1dC5pc1Jh
ZGlvQnV0dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOwotICAgICAg
ICBpZiAoaW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0
dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICAgICAgaWYg
KGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICBpZiAoaW5wdXQuaXNSYW5nZUNvbnRy
b2woKSkKICAgICAgICAgICAgIHJldHVybiBTbGlkZXJSb2xlOwogCiAjaWYgRU5BQkxFKElOUFVU
X1RZUEVfQ09MT1IpCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LT5n
ZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUg
PSBpbnB1dC5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UodHlwZSwgImNvbG9yIikpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3JXZWxsUm9sZTsK
ICNlbmRpZgpAQCAtMzEwLDggKzMxMCw4IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJldHVy
biBUZXh0RmllbGRSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpIHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hU
TUxTZWxlY3RFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5t
dWx0aXBsZSgpID8gTGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIEhUTUxT
ZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+
KCpub2RlKCkpOworICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC5tdWx0aXBsZSgpID8gTGlz
dEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CiAgICAgfQogICAgIGlmIChpc0hUTUxUZXh0QXJl
YUVsZW1lbnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKQEAgLTQ2OSw4
ICs0NjksOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250
cm9sKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRF
bGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1M
SW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzVGV4dCgpIHx8IGlu
cHV0LT5pc051bWJlckZpZWxkKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICByZXR1cm4gaW5wdXQu
aXNUZXh0KCkgfHwgaW5wdXQuaXNOdW1iZXJGaWVsZCgpOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKQEAgLTUxOSw4ICs1MTksOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c05hdGl2ZUltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNI
VE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1h
Z2VCdXR0b24oKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC5pc0ltYWdlQnV0
dG9uKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1NCw4IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSgpIGNvbnN0CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAKICAgICBpZiAocm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZSAmJiBp
c0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBpbnB1dC0+aXNJ
bWFnZUJ1dHRvbigpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0LmlzSW1hZ2VC
dXR0b24oKTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjksNyArNzI5LDcgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAog
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgp
LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5t
dWx0aXBsZSgpOworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykgJiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKCkpLm11bHRpcGxlKCk7
CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdApA
QCAtNzQyLDkgKzc0Miw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9u
bHkoKSBjb25zdAogICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUp
LT5pc1JlYWRPbmx5KCk7CiAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0g
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUp
OwotICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICByZXR1cm4g
aW5wdXQtPmlzUmVhZE9ubHkoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmIChpbnB1dC5pc1Rl
eHRGaWVsZCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKICAgICB9
CiAKICAgICByZXR1cm4gIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKQEAgLTgzOCw5ICs4Mzgs
OSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBj
b25zdAogZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25z
dAogewogICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgp
KTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGlucHV0LT52YWx1ZUFzTnVtYmVyKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChp
bnB1dC5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlQXNO
dW1iZXIoKTsKICAgICB9CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NTIsOSAr
ODUyLDkgQEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UoKSBj
b25zdAogZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBj
b25zdAogewogICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsK
LSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9k
ZSgpKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAg
cmV0dXJuIGlucHV0LT5tYXhpbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1
dC5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsK
ICAgICB9CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC04NjYsOSArODY2LDkgQEAg
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdAog
ewogICAgIGlmIChub2RlKCkgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsK
LSAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGlucHV0LT5taW5pbXVtKCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC5pc1Jh
bmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm1pbmltdW0oKTsKICAgICB9
CiAKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCkBAIC05NzQsOCArOTc0LDggQEAgRWxlbWVu
dCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogc3RhdGlj
IGJvb2wgaXNOb2RlQWN0aW9uRWxlbWVudChOb2RlKiBub2RlKQogewogICAgIGlmIChpc0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRG
b3JtQ29udHJvbCgpICYmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LT5pc0NoZWNr
Ym94KCkgfHwgaW5wdXQtPmlzVGV4dEJ1dHRvbigpIHx8IGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8
fCBpbnB1dC0+aXNJbWFnZUJ1dHRvbigpKSkKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIGlmICghaW5w
dXQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgKGlucHV0LmlzUmFkaW9CdXR0b24oKSB8fCBp
bnB1dC5pc0NoZWNrYm94KCkgfHwgaW5wdXQuaXNUZXh0QnV0dG9uKCkgfHwgaW5wdXQuaXNGaWxl
VXBsb2FkKCkgfHwgaW5wdXQuaXNJbWFnZUJ1dHRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzA3LDcg
KzEzMDcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlcm5hdGl2ZVRleHQo
VmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZAogICAgIAogICAgIC8vIFRoZSBmaWVs
ZHNldCBlbGVtZW50IGRlcml2ZXMgaXRzIGFsdGVybmF0aXZlIHRleHQgZnJvbSB0aGUgZmlyc3Qg
YXNzb2NpYXRlZCBsZWdlbmQgZWxlbWVudCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAgIGlmIChp
c0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0b0hUTUxGaWVsZFNldEVs
ZW1lbnQobm9kZSktPmxlZ2VuZCgpKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb3duY2FzdDxIVE1MRmllbGRTZXRF
bGVtZW50Pigqbm9kZSkubGVnZW5kKCkpOwogICAgICAgICBpZiAob2JqZWN0ICYmICFvYmplY3Qt
PmlzSGlkZGVuKCkpCiAgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlU
ZXh0KGFjY2Vzc2libGVOYW1lRm9yTm9kZShvYmplY3QtPm5vZGUoKSksIEFsdGVybmF0aXZlVGV4
dCkpOwogICAgIH0KQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OnZpc2libGVUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikK
ICAgICAKICAgICBib29sIGlzSW5wdXRUYWcgPSBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7CiAg
ICAgaWYgKGlzSW5wdXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9u
KCkpIHsKLSAgICAgICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoaW5w
dXQtPnZhbHVlV2l0aERlZmF1bHQoKSwgVmlzaWJsZVRleHQpKTsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAg
ICAgIGlmIChpbnB1dC5pc1RleHRCdXR0b24oKSkgeworICAgICAgICAgICAgdGV4dE9yZGVyLmFw
cGVuZChBY2Nlc3NpYmlsaXR5VGV4dChpbnB1dC52YWx1ZVdpdGhEZWZhdWx0KCksIFZpc2libGVU
ZXh0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjg1LDkg
KzE2ODUsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QK
IAogICAgIGJvb2wgaXNJbnB1dFRhZyA9IGlzSFRNTElucHV0RWxlbWVudChub2RlKTsKICAgICBp
ZiAoaXNJbnB1dFRhZykgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRN
TElucHV0RWxlbWVudChub2RlKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkK
LSAgICAgICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVmYXVsdCgpOworICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KTsKKyAgICAgICAgaWYgKGlucHV0LmlzVGV4dEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJu
IGlucHV0LnZhbHVlV2l0aERlZmF1bHQoKTsKICAgICB9CiAKICAgICBpZiAoaXNJbnB1dFRhZyB8
fCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8
fCBpc0NvbnRyb2woKSkgewpAQCAtMTc1MSw4ICsxNzUxLDggQEAgU3RyaW5nIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojp0ZXh0KCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAotICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkgJiYgKGlzSFRNTFRl
eHRBcmVhRWxlbWVudChub2RlKSB8fCBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpKQotICAgICAg
ICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChub2RlKS0+dmFsdWUoKTsKKyAg
ICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpICYmIGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQoKm5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ+KCpub2RlKS52YWx1ZSgpOwogCiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTE3NzcsMTYgKzE3NzcsMTYgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7CiAKICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxl
Y3RUYWcpKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9I
VE1MU2VsZWN0RWxlbWVudChub2RlKTsKLSAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBzZWxl
Y3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMoKTsKKyAgICAgICAg
SFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxl
bWVudD4oKm5vZGUpOworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQu
c2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gc2VsZWN0RWxlbWVudC5saXN0SXRlbXMoKTsKICAgICAgICAgaWYgKHNlbGVjdGVk
SW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNlbGVjdGVkSW5kZXgpIDwgbGlzdEl0
ZW1zLnNpemUoKSkgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBvdmVycmlkZGVu
RGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRleF0tPmZhc3RHZXRBdHRyaWJ1dGUo
YXJpYV9sYWJlbEF0dHIpOwogICAgICAgICAgICAgaWYgKCFvdmVycmlkZGVuRGVzY3JpcHRpb24u
aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRkZW5EZXNjcmlwdGlvbjsK
ICAgICAgICAgfQotICAgICAgICBpZiAoIXNlbGVjdEVsZW1lbnQtPm11bHRpcGxlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgaWYgKCFzZWxl
Y3RFbGVtZW50Lm11bHRpcGxlKCkpCisgICAgICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC52
YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xODEyLDEzICsx
ODEyLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiBy
LCBpbnQmIGcsIGludCYgYikgY29uc3QKICAgICBpZiAoIW5vZGUoKSB8fCAhaXNIVE1MSW5wdXRF
bGVtZW50KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGUoKSk7Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CisgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBpbnB1dC5nZXRBdHRyaWJ1dGUodHlwZUF0dHIp
OwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgImNvbG9yIikpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlIGFsd2F5cyByZXR1cm5zIGEg
c3RyaW5nIHBhcnNlYWJsZSBieSBDb2xvcigpLgotICAgIENvbG9yIGNvbG9yKGlucHV0LT52YWx1
ZSgpKTsKKyAgICBDb2xvciBjb2xvcihpbnB1dC52YWx1ZSgpKTsKICAgICByID0gY29sb3IucmVk
KCk7CiAgICAgZyA9IGNvbG9yLmdyZWVuKCk7CiAgICAgYiA9IGNvbG9yLmJsdWUoKTsKQEAgLTE4
NDIsNyArMTg0Miw3IEBAIHN0YXRpYyBTdHJpbmcgYWNjZXNzaWJsZU5hbWVGb3JOb2RlKE5vZGUq
IG5vZGUpCiAgICAgICAgIHJldHVybiBhbHQ7CiAgICAgCiAgICAgaWYgKGlzSFRNTElucHV0RWxl
bWVudChub2RlKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChub2RlKS0+dmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS52
YWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZSBub2RlIGNhbiBiZSB0dXJuZWQgaW50byBhbiBB
WCBvYmplY3QsIHdlIGNhbiB1c2Ugc3RhbmRhcmQgbmFtZSBjb21wdXRhdGlvbiBydWxlcy4KICAg
ICAvLyBJZiBob3dldmVyLCB0aGUgbm9kZSBjYW5ub3QgKGJlY2F1c2UgdGhlcmUncyBubyByZW5k
ZXJlciBlLmcuKSBmYWxsYmFjayB0byB1c2luZyB0aGUgYmFzaWMgdGV4dCB1bmRlcm5lYXRoLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKaW5kZXggYTQ1NzQ4YTM2OGI3YzBlMzQ0ZjA4MWVjZTJmOWU3ZWQy
NzViOWRhYy4uYjU5NmY4ZDk2MDI2MzFiODJkMGY1NDgyNjhiMzAzMWM2NWNhNWE1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCkBAIC01MjQsOCArNTI0LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojppc0F0dGFjaG1lbnQoKSBjb25zdAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdAogewogICAgIGlmIChtX3JlbmRlcmVy
ICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobV9yZW5kZXJlci0+
bm9kZSgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0
RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgICAgICByZXR1cm4gaW5wdXQtPmlzRmls
ZVVwbG9hZCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICByZXR1cm4gaW5w
dXQuaXNGaWxlVXBsb2FkKCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTc0
MSw5ICs3NDEsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFs
dWUoKSBjb25zdAogICAgIGlmIChjc3NCb3ggJiYgY3NzQm94LT5pc01lbnVMaXN0KCkpIHsKICAg
ICAgICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBnbyBzdHJhaWdodCB0byB0aGUgdGV4dCgpIG9m
IGl0cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBvdmVycmlkZGVu
IGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3RlZCBpdGVtIGhhcyBhbiBBUklBIGxhYmVsLgot
ICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCA9IHRvSFRNTFNlbGVjdEVs
ZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBz
ZWxlY3RFbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMoKTsKKyAgICAg
ICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0
RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgIGludCBzZWxlY3RlZEluZGV4
ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4KCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50Lmxpc3RJdGVtcygpOwogICAg
ICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRpY19jYXN0PHNpemVfdD4oc2VsZWN0
ZWRJbmRleCkgPCBsaXN0SXRlbXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG92ZXJyaWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJdGVtc1tzZWxlY3RlZEluZGV4XS0+
ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAgICAgICAgICAgICBpZiAoIW92ZXJy
aWRkZW5EZXNjcmlwdGlvbi5pc051bGwoKSkKQEAgLTc4Myw3ICs3ODMsNyBAQCBIVE1MTGFiZWxF
bGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYWJlbEVsZW1lbnRDb250YWluZXIo
KSBjb25zdAogICAgIC8vIGZpbmQgaWYgdGhpcyBoYXMgYSBwYXJlbnQgdGhhdCBpcyBhIGxhYmVs
CiAgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOyBwYXJlbnRO
b2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlm
IChpc0hUTUxMYWJlbEVsZW1lbnQocGFyZW50Tm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdG9I
VE1MTGFiZWxFbGVtZW50KHBhcmVudE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxMYWJlbEVsZW1lbnQ+KHBhcmVudE5vZGUpOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTkxNiw5ICs5MTYsOSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVtZW50KCkgY29uc3QKICAgICAvLyBS
aWdodCBub3csIHdlIGRvIG5vdCBzdXBwb3J0IEFSSUEgbGlua3MgYXMgaW50ZXJuYWwgbGluayBl
bGVtZW50cwogICAgIGlmICghaXNIVE1MQW5jaG9yRWxlbWVudChlbGVtZW50KSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IHRvSFRNTEFu
Y2hvckVsZW1lbnQoZWxlbWVudCk7CisgICAgSFRNTEFuY2hvckVsZW1lbnQmIGFuY2hvciA9IGRv
d25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCk7CiAgICAgCi0gICAgVVJMIGxpbmtV
UkwgPSBhbmNob3ItPmhyZWYoKTsKKyAgICBVUkwgbGlua1VSTCA9IGFuY2hvci5ocmVmKCk7CiAg
ICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllciA9IGxpbmtVUkwuZnJhZ21lbnRJZGVudGlmaWVy
KCk7CiAgICAgaWYgKGZyYWdtZW50SWRlbnRpZmllci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtOTUzLDI0ICs5NTMsMjUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4K
ICAgICBpZiAoIW5vZGUgfHwgIWlzSFRNTElucHV0RWxlbWVudChub2RlKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KG5vZGUpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIGlmIHRoZXJlJ3MgYSBmb3JtLCB0aGVuIHRoaXMg
aXMgZWFzeQotICAgIGlmIChpbnB1dC0+Zm9ybSgpKSB7CisgICAgaWYgKGlucHV0LmZvcm0oKSkg
ewogICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3JtRWxlbWVudHM7Ci0gICAgICAgIGlu
cHV0LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQtPm5hbWUoKSwgZm9ybUVsZW1lbnRz
KTsKKyAgICAgICAgaW5wdXQuZm9ybSgpLT5nZXROYW1lZEVsZW1lbnRzKGlucHV0Lm5hbWUoKSwg
Zm9ybUVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgYXNzb2NpYXRlRWxl
bWVudCA6IGZvcm1FbGVtZW50cykgewogICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoJmFzc29jaWF0ZUVsZW1l
bnQuZ2V0KCkpKQogICAgICAgICAgICAgICAgIGxpbmtlZFVJRWxlbWVudHMuYXBwZW5kKG9iamVj
dCk7ICAgICAgICAKICAgICAgICAgfSAKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8Tm9k
ZUxpc3Q+IGxpc3QgPSBub2RlLT5kb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1
dCIpOwotICAgICAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaXNIVE1M
SW5wdXRFbGVtZW50KGxpc3QtPml0ZW0oaSkpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCogYXNzb2NpYXRlRWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChsaXN0LT5pdGVt
KGkpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlRWxlbWVudC0+aXNSYWRpb0J1dHRv
bigpICYmIGFzc29jaWF0ZUVsZW1lbnQtPm5hbWUoKSA9PSBpbnB1dC0+bmFtZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKGFzc29jaWF0ZUVsZW1lbnQpKQorICAgICAgICBSZWZQdHI8
Tm9kZUxpc3Q+IGxpc3QgPSBub2RlLT5kb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKGlu
cHV0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdC0+bGVu
Z3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgTm9kZSogaXRlbSA9IGxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAo
aXNIVE1MSW5wdXRFbGVtZW50KGl0ZW0pKSB7CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCppdGVt
KTsKKyAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlRWxlbWVudC5pc1JhZGlvQnV0dG9uKCkg
JiYgYXNzb2NpYXRlRWxlbWVudC5uYW1lKCkgPT0gaW5wdXQubmFtZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hl
KCktPmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVFbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtlZFVJRWxlbWVudHMuYXBwZW5kKG9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMTUwNyw3ICsxNTA4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFu
Z2UKIFVSTCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogewogICAgIGlm
IChpc0FuY2hvcigpICYmIGlzSFRNTEFuY2hvckVsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSkg
ewotICAgICAgICBpZiAoSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IHRvSFRNTEFuY2hvckVs
ZW1lbnQoYW5jaG9yRWxlbWVudCgpKSkKKyAgICAgICAgaWYgKEhUTUxBbmNob3JFbGVtZW50KiBh
bmNob3IgPSBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oYW5jaG9yRWxlbWVudCgpKSkKICAg
ICAgICAgICAgIHJldHVybiBhbmNob3ItPmhyZWYoKTsKICAgICB9CiAgICAgCkBAIC0xNTE1LDEw
ICsxNTE2LDEwIEBAIFVSTCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAog
ICAgICAgICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKICAgICBp
ZiAoaXNJbWFnZSgpICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQo
bV9yZW5kZXJlci0+bm9kZSgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudCht
X3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChp
c0lucHV0SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX3JlbmRl
cmVyLT5ub2RlKCkpLT5zcmMoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIHJldHVybiBVUkwo
KTsKIH0KQEAgLTE2NzksMjAgKzE2ODAsMTcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhbV9yZW5kZXJlci0+bm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVt
ZW50KG1fcmVuZGVyZXItPm5vZGUoKSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVu
dCgqbV9yZW5kZXJlci0+bm9kZSgpKTsKIAogICAgIGlmICghbV9yZW5kZXJlci0+aXNCb3hNb2Rl
bE9iamVjdCgpKQogICAgICAgICByZXR1cm47CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
bmRlcmVyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKTsKIAogICAgIC8vIEZJ
WE1FOiBEbyB3ZSB3YW50IHRvIGRvIGFueXRoaW5nIGhlcmUgZm9yIEFSSUEgdGV4dGJveGVzPwot
ICAgIGlmIChyZW5kZXJlci0+aXNUZXh0RmllbGQoKSkgewotICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyBub3Qgc2FmZSEgIE90aGVyIGVsZW1lbnRzIGNvdWxkIGhhdmUgYSBUZXh0RmllbGQgcmVu
ZGVyZXIuCi0gICAgICAgIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KS0+c2V0VmFsdWUoc3Ry
aW5nKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgbm90IHNhZmUhICBPdGhlciBlbGVtZW50cyBjb3VsZCBoYXZlIGEg
VGV4dEFyZWEgcmVuZGVyZXIuCi0gICAgICAgIHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50
KS0+c2V0VmFsdWUoc3RyaW5nKTsKLSAgICB9CisgICAgaWYgKHJlbmRlcmVyLT5pc1RleHRGaWVs
ZCgpICYmIGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oZWxlbWVudCkuc2V0VmFsdWUoc3RyaW5nKTsKKyAgICBlbHNlIGlmIChy
ZW5kZXJlci0+aXNUZXh0QXJlYSgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KSkK
KyAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCkuc2V0VmFsdWUo
c3RyaW5nKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhT3duc0Vs
ZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYXhPYmplY3RzKSBjb25zdApAQCAt
MTc2MywxMCArMTc2MSwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldERv
Y3VtZW50TGlua3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZQogICAgICAgICAgICAg
Tm9kZSogcGFyZW50ID0gY3Vyci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKHBhcmVu
dCAmJiBpc0hUTUxBcmVhRWxlbWVudChjdXJyKSAmJiBpc0hUTUxNYXBFbGVtZW50KHBhcmVudCkp
IHsKICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKiBhcmVhT2JqZWN0
ID0gdG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoSW1hZ2VNYXBMaW5rUm9sZSkpOwotICAgICAgICAgICAgICAgIEhUTUxNYXBFbGVtZW50KiBt
YXAgPSB0b0hUTUxNYXBFbGVtZW50KHBhcmVudCk7Ci0gICAgICAgICAgICAgICAgYXJlYU9iamVj
dC0+c2V0SFRNTEFyZWFFbGVtZW50KHRvSFRNTEFyZWFFbGVtZW50KGN1cnIpKTsKLSAgICAgICAg
ICAgICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MTWFwRWxlbWVudChtYXApOwotICAgICAgICAgICAg
ICAgIGFyZWFPYmplY3QtPnNldFBhcmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAo
bWFwKSk7CisgICAgICAgICAgICAgICAgSFRNTE1hcEVsZW1lbnQmIG1hcCA9IGRvd25jYXN0PEhU
TUxNYXBFbGVtZW50PigqcGFyZW50KTsKKyAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LT5zZXRI
VE1MQXJlYUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PihjdXJyKSk7CisgICAgICAg
ICAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTE1hcEVsZW1lbnQoJm1hcCk7CisgICAgICAgICAg
ICAgICAgYXJlYU9iamVjdC0+c2V0UGFyZW50KGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1h
cCgmbWFwKSk7CiAKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFyZWFPYmplY3QpOwog
ICAgICAgICAgICAgfQpAQCAtMjE2MSw3ICsyMTU5LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChI
VE0KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRyOwogICAgIGZvciAo
RWxlbWVudCogbWFwUGFyZW50ID0gYXJlYS0+cGFyZW50RWxlbWVudCgpOyBtYXBQYXJlbnQ7IG1h
cFBhcmVudCA9IG1hcFBhcmVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChpc0hU
TUxNYXBFbGVtZW50KG1hcFBhcmVudCkpIHsKLSAgICAgICAgICAgIHBhcmVudCA9IGFjY2Vzc2li
aWxpdHlQYXJlbnRGb3JJbWFnZU1hcCh0b0hUTUxNYXBFbGVtZW50KG1hcFBhcmVudCkpOworICAg
ICAgICAgICAgcGFyZW50ID0gYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKGRvd25jYXN0
PEhUTUxNYXBFbGVtZW50PihtYXBQYXJlbnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjIxMSwxMCArMjIwOSwxMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQ
bwogICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5kZXByZWNhdGVk
U2hhZG93QW5jZXN0b3JOb2RlKCk7CiAKICAgICBpZiAoaXNIVE1MQXJlYUVsZW1lbnQobm9kZSkp
Ci0gICAgICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KHRvSFRNTEFyZWFF
bGVtZW50KG5vZGUpLCBwb2ludCk7CisgICAgICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBIaXRUZXN0KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4obm9kZSksIHBvaW50KTsKICAgICAK
ICAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChub2RlKSkKLSAgICAgICAgbm9kZSA9IHRvSFRN
TE9wdGlvbkVsZW1lbnQobm9kZSktPm93bmVyU2VsZWN0RWxlbWVudCgpOworICAgICAgICBub2Rl
ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpub2RlKS5vd25lclNlbGVjdEVsZW1lbnQo
KTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFvYmopCkBAIC0yNTA1LDIxICsyNTAzLDIyIEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICAg
ICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKIAogICAgIGlmIChub2RlICYmIGlzSFRNTElucHV0RWxl
bWVudChub2RlKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElu
cHV0RWxlbWVudChub2RlKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc0NoZWNrYm94KCkpCisgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km5vZGUpOworICAgICAgICBpZiAoaW5wdXQuaXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0
dXJuIENoZWNrQm94Um9sZTsKLSAgICAgICAgaWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisg
ICAgICAgIGlmIChpbnB1dC5pc1JhZGlvQnV0dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFk
aW9CdXR0b25Sb2xlOwotICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAg
ICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gYnV0dG9uUm9s
ZVR5cGUoKTsKICAgICAgICAgLy8gT24gaU9TLCB0aGUgZGF0ZSBmaWVsZCBpcyBhIHBvcHVwIGJ1
dHRvbi4gT24gb3RoZXIgcGxhdGZvcm1zIHRoaXMgaXMgYSB0ZXh0IGZpZWxkLgogI2lmIFBMQVRG
T1JNKElPUykKLSAgICAgICAgaWYgKGlucHV0LT5pc0RhdGVGaWVsZCgpKQorICAgICAgICBpZiAo
aW5wdXQuaXNEYXRlRmllbGQoKSkKICAgICAgICAgICAgIHJldHVybiBQb3BVcEJ1dHRvblJvbGU7
CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIp
OworICAgICAgICAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgdXNlIGlucHV0LmlzQ29sb3JDb250
cm9sKCk/CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0LmdldEF0dHJp
YnV0ZSh0eXBlQXR0cik7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0eXBlLCAiY29s
b3IiKSkKICAgICAgICAgICAgIHJldHVybiBDb2xvcldlbGxSb2xlOwogI2VuZGlmCkBAIC0yODQw
LDggKzI4MzksOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFRleHRGaWVs
ZENoaWxkcmVuKCkKICAgICBpZiAoIW5vZGUgfHwgIWlzSFRNTElucHV0RWxlbWVudChub2RlKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9I
VE1MSW5wdXRFbGVtZW50KG5vZGUpOwotICAgIEhUTUxFbGVtZW50KiBzcGluQnV0dG9uRWxlbWVu
dCA9IGlucHV0LT5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgSFRNTEVs
ZW1lbnQqIHNwaW5CdXR0b25FbGVtZW50ID0gaW5wdXQuaW5uZXJTcGluQnV0dG9uRWxlbWVudCgp
OwogICAgIGlmICghc3BpbkJ1dHRvbkVsZW1lbnQgfHwgIXNwaW5CdXR0b25FbGVtZW50LT5pc1Nw
aW5CdXR0b25FbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzI3MSw3ICszMjcwLDcg
QEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVlRm9yTVNBQSgp
IGNvbnN0CiAgICAgaWYgKGlzTGlua2FibGUoKnRoaXMpKSB7CiAgICAgICAgIEVsZW1lbnQqIGFu
Y2hvciA9IGFuY2hvckVsZW1lbnQoKTsKICAgICAgICAgaWYgKGFuY2hvciAmJiBpc0hUTUxBbmNo
b3JFbGVtZW50KGFuY2hvcikpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MQW5jaG9yRWxlbWVu
dChhbmNob3IpLT5ocmVmKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEFuY2hv
ckVsZW1lbnQ+KCphbmNob3IpLmhyZWYoKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RyaW5nVmFs
dWUoKTsKQEAgLTMyODYsNyArMzI4NSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6aXNMaW5rZWQoKSBjb25zdAogICAgIGlmICghYW5jaG9yIHx8ICFpc0hUTUxBbmNob3JFbGVt
ZW50KGFuY2hvcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiAhdG9IVE1M
QW5jaG9yRWxlbWVudChhbmNob3IpLT5ocmVmKCkuaXNFbXB0eSgpOworICAgIHJldHVybiAhZG93
bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KCphbmNob3IpLmhyZWYoKS5pc0VtcHR5KCk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFzQm9sZEZvbnQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5j
cHAKaW5kZXggOTUwZjk4MjkwMmE3YTg2MGQ4ZmZmNTJjY2YyZDQxOWFiYjEwY2YwMy4uYjVlMzQ2
ZDU2ZTY3YjQ0NTRkMDRjOWQ2MGM5ODEwYTkxMjFlMTJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCkBAIC0xMzgsNyAr
MTM4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogCiBIVE1MSW5wdXRFbGVtZW50KiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjppbnB1dEVs
ZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1lbnQobV9yZW5kZXJl
ci0+bm9kZSgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obV9yZW5k
ZXJlci0+bm9kZSgpKTsKIH0KIAogCkBAIC0xNTksNyArMTU5LDcgQEAgTGF5b3V0UmVjdCBBY2Nl
c3NpYmlsaXR5U2xpZGVyVGh1bWI6OmVsZW1lbnRSZWN0KCkgY29uc3QKICAgICBSZW5kZXJPYmpl
Y3QqIHNsaWRlclJlbmRlcmVyID0gbV9wYXJlbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFzbGlk
ZXJSZW5kZXJlciB8fCAhc2xpZGVyUmVuZGVyZXItPmlzU2xpZGVyKCkpCiAgICAgICAgIHJldHVy
biBMYXlvdXRSZWN0KCk7Ci0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChzbGlkZXJSZW5k
ZXJlci0+bm9kZSgpKS0+c2xpZGVyVGh1bWJFbGVtZW50KCktPmJvdW5kaW5nQm94KCk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNsaWRlclJlbmRlcmVyLT5ub2RlKCkp
LT5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+Ym91bmRpbmdCb3goKTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5U2xpZGVyVGh1bWI6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAppbmRleCBkOWQ0MzVmOGJlYTdjMmJiMzNmN2M4ZGM5ZTFiOGExMWRiMDgxODZhLi5lMjU0
NDNjZmM3NmM3OTYwODcyOTY3OGQyNzZhZGZmNDVhMWFlY2FjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC05Nyw3ICs5
Nyw3IEBAIEhUTUxUYWJsZUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlUYWJsZTo6dGFibGVFbGVtZW50
KCkgY29uc3QKICAgICAKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0b1JlbmRlclRhYmxlKG1f
cmVuZGVyZXIpOwogICAgIGlmICh0YWJsZS0+ZWxlbWVudCgpICYmIGlzSFRNTFRhYmxlRWxlbWVu
dCh0YWJsZS0+ZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFRhYmxlRWxlbWVudCh0
YWJsZS0+ZWxlbWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1l
bnQ+KHRhYmxlLT5lbGVtZW50KCkpOwogICAgIAogICAgIC8vIElmIHRoZSB0YWJsZSBoYXMgYSBk
aXNwbGF5OnRhYmxlLXJvdy1ncm91cCwgdGhlbiB0aGUgUmVuZGVyVGFibGUgZG9lcyBub3QgaGF2
ZSBhIHBvaW50ZXIgdG8gaXQncyBIVE1MVGFibGVFbGVtZW50LgogICAgIC8vIFdlIGNhbiBpbnN0
ZWFkIGZpbmQgaXQgYnkgYXNraW5nIHRoZSBmaXJzdFNlY3Rpb24gZm9yIGl0cyBwYXJlbnQuCkBA
IC0xMDksNyArMTA5LDcgQEAgSFRNTFRhYmxlRWxlbWVudCogQWNjZXNzaWJpbGl0eVRhYmxlOjp0
YWJsZUVsZW1lbnQoKSBjb25zdAogICAgIGlmICghYWN0dWFsVGFibGUgfHwgIWlzSFRNTFRhYmxl
RWxlbWVudChhY3R1YWxUYWJsZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAg
IHJldHVybiB0b0hUTUxUYWJsZUVsZW1lbnQoYWN0dWFsVGFibGUpOworICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MVGFibGVFbGVtZW50PihhY3R1YWxUYWJsZSk7CiB9CiAgICAgCiBib29sIEFjY2Vz
c2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjb25zdApAQCAtNjA4LDggKzYwOCw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlKCkgY29uc3QKICAgICAvLyBzZWUgaWYgdGhl
cmUgaXMgYSBjYXB0aW9uCiAgICAgTm9kZSogdGFibGVFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9k
ZSgpOwogICAgIGlmICh0YWJsZUVsZW1lbnQgJiYgaXNIVE1MVGFibGVFbGVtZW50KHRhYmxlRWxl
bWVudCkpIHsKLSAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24gPSB0b0hU
TUxUYWJsZUVsZW1lbnQodGFibGVFbGVtZW50KS0+Y2FwdGlvbigpOwotICAgICAgICBpZiAoY2Fw
dGlvbikKKyAgICAgICAgaWYgKEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uID0gZG93
bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxlRWxlbWVudCkuY2FwdGlvbigpKQogICAgICAg
ICAgICAgdGl0bGUgPSBjYXB0aW9uLT5pbm5lclRleHQoKTsKICAgICB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3Bw
CmluZGV4IDkzMGVmM2I3YmNmZGZkY2M0N2Q5YmY5ZjU0OWU2MTRkZTBhNDI2OTcuLmI4NjUxMTgw
ODJkM2E3MGRkOGEzN2NiODM2NGY4M2Y1OTA4MmViMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCkBAIC0xNDAsMTAg
KzE0MCw4IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hhbmdlKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCkKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUob2JqZWN0
LT53cmFwcGVyKCksICJzZWxlY3Rpb24tY2hhbmdlZCIpOwogCiAgICAgLy8gRmluZCB0aGUgaXRl
bSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNoYW5nZSB3YXMgdHJpZ2dlcmVkIGZyb20uCi0gICAgSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSk7Ci0gICAg
aWYgKCFzZWxlY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgY2hhbmdlZEl0ZW1JbmRleCA9
IHNlbGVjdC0+YWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKTsKKyAgICBIVE1MU2VsZWN0
RWxlbWVudCYgc2VsZWN0ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKTsKKyAg
ICBpbnQgY2hhbmdlZEl0ZW1JbmRleCA9IHNlbGVjdC5hY3RpdmVTZWxlY3Rpb25TdGFydExpc3RJ
bmRleCgpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9iamVjdCA9IGdldExpc3RP
YmplY3Qob2JqZWN0KTsKICAgICBpZiAoIWxpc3RPYmplY3QpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxl
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKaW5kZXggNmM0Y2JmOTE1ZmQ3MGNiMWM2NGRkODBk
ZDRjZjE2N2I4Mzc0NTYyMi4uOWU4N2Y0ZjVmYmM3N2VmZjUyODU3NjVkNjZmZjc0NzU5NGQwMjJj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKQEAgLTEw
OCw3ICsxMDgsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbVNlbGVj
dGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbgogICAgICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgSFRNTFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdE5vZGUgPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkp
OworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0Tm9kZSA9IGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgaWYgKCFzZWxlY3ROb2Rl
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTE5NSw4ICsxOTUsOCBAQCBzdGF0
aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uR2V0U2VsZWN0aW9uQ291bnQoQXRrU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24pCiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKIAotICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHRvSFRNTFNlbGVjdEVsZW1l
bnQocmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIHNl
bGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3RhdGljX2Nhc3Q8aW50Pih0b0hU
TUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5saXN0SXRlbXMoKS5zaXplKCkpOwor
ICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihy
ZW5kZXJlci0+bm9kZSgpKS0+c2VsZWN0ZWRJbmRleCgpOworICAgICAgICByZXR1cm4gc2VsZWN0
ZWRJbmRleCA+PSAwICYmIHNlbGVjdGVkSW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KGRvd25jYXN0
PEhUTUxTZWxlY3RFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgp
KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFi
bGUuY3BwCmluZGV4IGY2ZWQxOWMwYWE2OWFiODMxNWQzYTM4MTkyZjE4NmVhMGE4NDY1NjMuLjY1
OWI4OGY4Yzc5YWJhMWM0MDEwMWI2OTkyOTE2ZDRlYjQ2MzcxNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJs
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRhYmxlLmNwcApAQCAtMjM4LDE5ICsyMzgsMTkgQEAgc3RhdGljIEF0a09i
amVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwg
Z2ludCByb3cpCiAKIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENh
cHRpb24oQXRrVGFibGUqIHRhYmxlKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19U
QUJMRSh0YWJsZSksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxp
ZChXRUJLSVRfQUNDRVNTSUJMRSh0YWJsZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEFUS19UQUJMRSh0YWJsZSksIG51bGxwdHIpOworICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNz
aWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0YWJsZSksIG51bGxwdHIpOwogCiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAgICBpZiAoYWNj
VGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CiAgICAgICAgIE5vZGUqIG5v
ZGUgPSBhY2NUYWJsZS0+bm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBpc0hUTUxUYWJsZUVs
ZW1lbnQobm9kZSkpIHsKLSAgICAgICAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0
aW9uID0gdG9IVE1MVGFibGVFbGVtZW50KG5vZGUpLT5jYXB0aW9uKCk7CisgICAgICAgICAgICBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1l
bnQ+KCpub2RlKS5jYXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoY2FwdGlvbikKICAgICAgICAg
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Zmlyc3RBY2Nlc3NpYmxlT2JqZWN0
RnJvbU5vZGUoY2FwdGlvbi0+cmVuZGVyZXIoKS0+ZWxlbWVudCgpKS0+d3JhcHBlcigpOwogICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBz
dGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkRlc2NyaXB0
aW9uKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2x1bW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5jcHAKaW5kZXggMzRkMGNiOTFjZmY4YTFkODY4NmY2Zjk3MDhmNDRjODYzN2UxY2U2YS4uMDc0
NTM1YWFlMjYyYjRkNWZlYjg5MWUzM2NiMDY2ZWZmMDc2YWM4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcApAQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyBjb25zdCBnY2hhciogd2Vi
a2l0QWNjZXNzaWJsZUdldERlc2NyaXB0aW9uKEF0a09iamVjdCogb2JqZWN0KQogICAgIHJldHVy
blZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShvYmplY3Qp
LCAwKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVj
dCk7Ci0gICAgTm9kZSogbm9kZSA9IDA7CisgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAg
aWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQogICAgICAgICBu
b2RlID0gY29yZU9iamVjdC0+bm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1M
RWxlbWVudCgpIHx8IGNvcmVPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJv
bGUgfHwgY29yZU9iamVjdC0+aXNJbWFnZSgpKQpAQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBj
b25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUdldERlc2NyaXB0aW9uKEF0a09iamVjdCogb2Jq
ZWN0KQogCiAgICAgLy8gYXRrX3RhYmxlX2dldF9zdW1tYXJ5IHJldHVybnMgYW4gQXRrT2JqZWN0
LiBXZSBoYXZlIG5vIHN1bW1hcnkgb2JqZWN0LCBzbyBleHBvc2Ugc3VtbWFyeSBoZXJlLgogICAg
IGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUpIHsKLSAgICAgICAgU3Ry
aW5nIHN1bW1hcnkgPSB0b0hUTUxUYWJsZUVsZW1lbnQobm9kZSktPnN1bW1hcnkoKTsKKyAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdW1tYXJ5ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVu
dD4oKm5vZGUpLnN1bW1hcnkoKTsKICAgICAgICAgaWYgKCFzdW1tYXJ5LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJldHVybiBjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KG9iamVjdCwgQXRrQ2Fj
aGVkQWNjZXNzaWJsZURlc2NyaXB0aW9uLCBzdW1tYXJ5KTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElP
Uy5tbQppbmRleCBlMWZkYzNiM2MyMTA0NWFiOGRjOWJjZjVmNDE0NzFlNWIzODQzMjdmLi4xYzli
OTM5ZWZlMWFiMDdjMmUzZGExMmVmNzU2Nzk2ODNiYTk5MjA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1Mu
bW0KQEAgLTY3LDExICs2Nyw4IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmls
aXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpCiAgICAgaWYgKCFyZW5kZXJPYmplY3QgfHwgIXJlbmRl
ck9iamVjdC0+bm9kZSgpIHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKS0+aXNIVE1MRWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KHJlbmRlck9iamVjdC0+bm9kZSgpKTsKLSAg
ICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCkubGVuZ3RoKCk7CisgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlck9iamVj
dC0+bm9kZSgpKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LnZhbHVlKCkubGVuZ3RoKCk7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1l
bnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCmluZGV4IGIwZmRmNjViMjk2MmZhOWE4MWViYjk4OTViNzc4MmNkM2U0ZTZhMTIu
LjZmYmExOTk1NDFmYzkwYWE5ZjY0ZjhhOWJiNzIzOGE5OTdlMWIwNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTgzLDE2ICs4
MywxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogICAgIEFTU0VSVChkb2N1bWVudC0+aXNI
VE1MRG9jdW1lbnQoKSk7CiAKICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5h
bWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgIGlmICghYXRvbWljUHJvcGVydHlO
YW1lIHx8ICF0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05hbWVkSXRlbSgqYXRv
bWljUHJvcGVydHlOYW1lKSkKKyAgICBpZiAoIWF0b21pY1Byb3BlcnR5TmFtZSB8fCAhZG93bmNh
c3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRlbSgqYXRvbWljUHJv
cGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAotICAgIGlmIChVTkxJS0VMWSh0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPndpbmRvd05h
bWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVydHlOYW1lKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLndpbmRv
d05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVydHlOYW1lKSkp
IHsKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jdW1lbnQt
PndpbmRvd05hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKICAgICAgICAgQVNTRVJUKGNv
bGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY29sbGVjdGlv
bikpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywgdGhp
c09iai0+Z2xvYmFsT2JqZWN0KCksIHRvSFRNTERvY3VtZW50KGRvY3VtZW50KS0+d2luZG93TmFt
ZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBkb3duY2FzdDxIVE1MRG9jdW1l
bnQ+KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSk7CiB9
CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQpAQCAtMjQ2LDcgKzI0Niw3IEBA
IGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpc09i
amVjdC0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7CiAgICAgaWYgKGRvY3VtZW50LT5pc0hU
TUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5
TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgICAgIGlmIChhdG9taWNQcm9w
ZXJ0eU5hbWUgJiYgdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5kb3dOYW1lZEl0ZW0o
KmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAm
JiBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCph
dG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
ZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgbmFtZWRJdGVtR2V0dGVyKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMjMsNyArMzIzLDcgQEAg
Ym9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHUKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2Jq
ZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRN
TERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlO
YW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYgKGF0b21pY1Byb3Bl
cnR5TmFtZSAmJiB0b0hUTUxEb2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05hbWVkSXRlbSgq
YXRvbWljUHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYm
IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0ZW0oKmF0
b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmpl
Y3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0ZXIpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAxYWQzYzYyNjY1
Y2Q2ZTExNWNhZjg4OWQ1YTI3N2JiMDM1MTVhZWY1Li43OTUzYzZjZDViZTM1Y2I1YTg1NGJhMDAy
ZGYwZWM5ZTkxYzYxZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC03Myw4ICs3Myw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFCiAgICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LmRvY3Vt
ZW50TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpOwotICAgIGlmIChVTkxJS0VMWShlbGVt
ZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSB0b0hUTUxJRnJhbWVFbGVtZW50KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKSkKKyAgICBpZiAo
VU5MSUtFTFkoaXNIVE1MSUZyYW1lRWxlbWVudChlbGVtZW50KSkpIHsKKyAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqZWxlbWVudCkuY29udGVu
dEZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywg
ZnJhbWUpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IGYyNTFlYjJkZWJmMDIz
Y2QzNmVjZDRjOTI2MDFhMDBmY2U4Yjg0MTcuLjc3ZWFmZjU4MDE3ZmYxZjJiNTZlZGYxODc3MDhm
NmYyNDI0MDFlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTEsNyArNTEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdAogewogICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0ganNDYXN0
PEpTSFRNTEVsZW1lbnQqPihzbG90QmFzZSktPmltcGwoKTsKICAgICBOb2RlKiBmcmFtZUVsZW1l
bnQgPSBlbGVtZW50LmNoaWxkcmVuKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0
cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9IVE1M
RnJhbWVFbGVtZW50KGZyYW1lRWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7CisgICAgaWYg
KERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxGcmFtZUVsZW1lbnQ+KGZyYW1lRWxl
bWVudCktPmNvbnRlbnREb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChKU0RPTVdpbmRvd1NoZWxs
KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93U2hlbGwoZG9jdW1lbnQtPmZyYW1lKCksIGN1cnJlbnRX
b3JsZChleGVjKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdpbmRvdyk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKaW5k
ZXggNjNhMmRjNmFjOGIxMjAyZWM2ZThlNDllNzZhNGM2NTYxNmM2ZmRlYS4uMmUxZDEyNjZlM2My
M2I4MTRkYTk5ZmVmOTgxNTg2ZWQ3OTUzZmYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKEpTTm9kZSoganNOb2RlLCBOb2RlKiBub2RlLCBTbG90
VmlzaXRvciYgdgogICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgaXMgZGVzdHJveWVkLCBpdHMg
bG9hZCBldmVudCB3aWxsIG5vdCBmaXJlLgogICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBET00g
c2hvdWxkIG1hbmFnZSB0aGlzIGlzc3VlIHdpdGhvdXQgdGhlIGhlbHAgb2YgSmF2YVNjcmlwdCB3
cmFwcGVycy4KICAgICAgICAgICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAodG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpLmhhc1BlbmRp
bmdBY3Rpdml0eSgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50PihlbGVtZW50KS5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAgICAgICAg
ICAgZWxzZSBpZiAoaXNIVE1MQXVkaW9FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0b0hUTUxBdWRpb0VsZW1lbnQoZWxlbWVudCkucGF1c2VkKCkpCisgICAgICAgICAg
ICAgICAgaWYgKCFkb3duY2FzdDxIVE1MQXVkaW9FbGVtZW50PihlbGVtZW50KS5wYXVzZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZjgyZWQyNzgxYzUwNzI1
Y2VkZDE1NDcwMWYwMmRlZGZlMDhjNGVlZi4uNjI2MzIxYzZiODcxY2NjYzdkODFmZWEyYjFkY2Yw
ZmRiYjNjNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTY1
NSw3ICs2NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAg
aWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5l
bGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkuaXNQbGFj
ZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAppbmRleCAx
ZGIxOWVjZDYxYTJmZDZjNDMyZTg5NDZlOGM1YjM2NGU3MjEwNjUwLi43ZmE0ZGM1Yjg5OTBmZWZm
ZjRiMTcxOWQ0ODAxODA5NTU2ODhmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTg2LDcgKzg2LDcgQEAgQUxXQVlTX0lO
TElORSBib29sIGlzQ2hlY2tlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGNvbnN0IEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAg
aWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAm
JiAhaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIHRvSFRN
TE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpCisgICAgaWYgKGlzSFRNTE9wdGlv
bkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjE1Yzc5Y2YzNWI0NzI4ZjA2
NzU4YzM0M2NiMDk5NWI5MWU2MmY1YS4uNDI5Yzg0YTE2Njk5ODZkZGNjNTY5N2I2NmVhOGM5ZjNh
YjcxOWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTMzOCw3ICsx
MzM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsKICAgICAgICAgLy8g
RG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2ln
bmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8vIHNvIHdlIGhhdmUg
dG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5
IHNpemVkLgotICAgICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlKSB8fCAhdG9IVE1MSW5w
dXRFbGVtZW50KGUpLT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgIGlmICghaXNIVE1MSW5wdXRF
bGVtZW50KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZSkuaXNJbWFnZUJ1dHRv
bigpKQogICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCAxMDNlNjQxYWM2ZTdjNWViNDBj
MTc1MzJlYTAxNDQ1ZjYxMWMxNTJmLi4wNzIwMDM3ZTlhODdkMDM0MGRkMTA5ODA0NWJkODJhMzIz
ZWRiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKQEAgLTY4LDcgKzY4
LDcgQEAgU3R5bGVTaGVldCogU3R5bGVTaGVldExpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpCiBI
VE1MU3R5bGVFbGVtZW50KiBTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElFIGFsc28gc3VwcG9ydHMgcmV0
cmlldmluZyBhIHN0eWxlc2hlZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUvaWQgb2YgdGhlIDxz
dHlsZT4gdGFnCiAgICAgLy8gKHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGFsbCB0aGUgb3RoZXIg
Y29sbGVjdGlvbnMpCkBAIC03Nyw4ICs3Nyw4IEBAIEhUTUxTdHlsZUVsZW1lbnQqIFN0eWxlU2hl
ZXRMaXN0OjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIC8vIEJ1
dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCiAg
ICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG5hbWUpOwog
ICAgIGlmIChlbGVtZW50ICYmIGlzSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
cmV0dXJuIHRvSFRNTFN0eWxlRWxlbWVudChlbGVtZW50KTsKLSAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggYzBmMTgwYzgyNjk4YjY5ZGE1Y2VmOGNm
MmIyYzQ5YjYyMDUwYTkzZi4uMjAzN2JiN2ZiODMzMGQyNjgwYmZlNWMxM2EwOTkwODU5NjFiOWRj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAtMjc4
NSw3ICsyNzg1LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNz
YXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KgogICAgIGlmIChpc0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICBpZiAoY2hlY2tpbmdDb250
ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5
bGUpCiAgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPmVsZW1lbnRTdHlsZS0+c2V0VW5pcXVl
KCk7Ci0gICAgICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50
KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNzk3LDE0ICsyNzk3LDE0IEBAIHN0YXRp
YyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9s
ZGVyU2hvd24oRWxlbWVudCoKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBl
bGVtZW50LT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRVbmlxdWUo
KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZp
c2libGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBpc1Bs
YWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgdG9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCgqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKKyAgICByZXR1cm4gaXNIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwogfQogCiB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJT
aG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmIGZyYWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRT
Y3JpcHRJbmNyZW1lbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRTY3JpcHRJbmNy
ZW1lbnRlci5oCmluZGV4IGY3ZTg0MWE3MGI3NDFjZTE0OWMwODVlMjJmNTY2ZGI1NDZjOTU5YmMu
LjdjNDg4YzA3MTg3MmUyN2RjODM3NWY0MGMwOGU0YTA0NzZlZGI5YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ3VycmVudFNjcmlwdEluY3JlbWVudGVyLmgKQEAgLTQyLDcgKzQyLDcgQEAg
cHVibGljOgogICAgICAgICAsIG1faXNIVE1MU2NyaXB0RWxlbWVudChpc0hUTUxTY3JpcHRFbGVt
ZW50KGVsZW1lbnQpKQogICAgIHsKICAgICAgICAgaWYgKG1faXNIVE1MU2NyaXB0RWxlbWVudCkK
LSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KHRvSFRNTFNjcmlwdEVs
ZW1lbnQoZWxlbWVudCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cHVzaEN1cnJlbnRTY3Jp
cHQoZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICB9CiAKICAgICB+
Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9EYXRhVHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAK
aW5kZXggNGNiZmFmMTM1Mzc2ZTVjYzk5YmViOWJlMDJjNjQ5NzIwZWI0ODgwZC4uZTQ2ZWMyMmI0
MWQwY2Q5MDM0ZTI2ZDUyNTQ1Nzg1NzQ3NDIzMTljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFu
c2Zlci5jcHAKQEAgLTI1MywxMSArMjUzLDkgQEAgdm9pZCBEYXRhVHJhbnNmZXI6OnNldERyYWdJ
bWFnZShFbGVtZW50KiBlbGVtZW50LCBpbnQgeCwgaW50IHkpCiAgICAgaWYgKCFjYW5TZXREcmFn
SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkSW1hZ2UqIGltYWdlOworICAg
IENhY2hlZEltYWdlKiBpbWFnZSA9IG51bGxwdHI7CiAgICAgaWYgKGVsZW1lbnQgJiYgaXNIVE1M
SW1hZ2VFbGVtZW50KGVsZW1lbnQpICYmICFlbGVtZW50LT5pbkRvY3VtZW50KCkpCi0gICAgICAg
IGltYWdlID0gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpLT5jYWNoZWRJbWFnZSgpOwotICAg
IGVsc2UKLSAgICAgICAgaW1hZ2UgPSAwOworICAgICAgICBpbWFnZSA9IGRvd25jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQ+KCplbGVtZW50KS5jYWNoZWRJbWFnZSgpOwogCiAgICAgbV9kcmFnTG9jYXRp
b24gPSBJbnRQb2ludCh4LCB5KTsKIApAQCAtMjcwLDcgKzI2OCw3IEBAIHZvaWQgRGF0YVRyYW5z
ZmVyOjpzZXREcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgaW50IHgsIGludCB5KQogICAgICAg
ICBtX2RyYWdJbWFnZUxvYWRlci0+c3RhcnRMb2FkaW5nKG1fZHJhZ0ltYWdlKTsKICAgICB9CiAK
LSAgICBtX2RyYWdJbWFnZUVsZW1lbnQgPSBpbWFnZSA/IDAgOiBlbGVtZW50OworICAgIG1fZHJh
Z0ltYWdlRWxlbWVudCA9IGltYWdlID8gbnVsbHB0ciA6IGVsZW1lbnQ7CiAKICAgICB1cGRhdGVE
cmFnSW1hZ2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDI0ZWNmZDQ5MTRmMWQ1
YmFmMGNiYzNkMzhmYjFiNjJlYjE1Mzg4ZGIuLjgyYTg3N2NmMTQ2MTc2YzZjNDA1MDNjYjlhMzZk
ODVhZjlkY2ZhMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTU1MSw4ICsxNTUxLDgg
QEAgdm9pZCBEb2N1bWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKICAgICAvLyBU
aGUgRE9NIEFQSSBoYXMgbm8gbWV0aG9kIG9mIHNwZWNpZnlpbmcgZGlyZWN0aW9uLCBzbyBhc3N1
bWUgTFRSLgogICAgIHVwZGF0ZVRpdGxlKFN0cmluZ1dpdGhEaXJlY3Rpb24odGl0bGUsIExUUikp
OwogCi0gICAgaWYgKG1fdGl0bGVFbGVtZW50ICYmIGlzSFRNTFRpdGxlRWxlbWVudChtX3RpdGxl
RWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHRvSFRNTFRpdGxlRWxlbWVudChtX3RpdGxlRWxlbWVu
dC5nZXQoKSktPnNldFRleHQodGl0bGUpOworICAgIGlmIChtX3RpdGxlRWxlbWVudCAmJiBpc0hU
TUxUaXRsZUVsZW1lbnQoKm1fdGl0bGVFbGVtZW50KSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTFRp
dGxlRWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KS5zZXRUZXh0KHRpdGxlKTsKIH0KIAogdm9pZCBE
b2N1bWVudDo6c2V0VGl0bGVFbGVtZW50KGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxl
LCBFbGVtZW50KiB0aXRsZUVsZW1lbnQpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCB2b2lkIERvY3Vt
ZW50Ojpwcm9jZXNzSHR0cEVxdWl2KGNvbnN0IFN0cmluZyYgZXF1aXYsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkKICAgICAgICAgLy8gRklYTUU6IG1ha2Ugc2V0Q29va2llIHdvcmsgb24gWE1MIGRv
Y3VtZW50cyB0b287IGUuZy4gaW4gY2FzZSBvZiA8aHRtbDptZXRhIC4uLi4uPgogICAgICAgICBp
ZiAoaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRXhjZXB0aW9uIChmb3Igc2Fu
ZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KLSAgICAgICAgICAgIHRvSFRNTERvY3VtZW50KHRo
aXMpLT5zZXRDb29raWUoY29udGVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBk
b3duY2FzdDxIVE1MRG9jdW1lbnQ+KCp0aGlzKS5zZXRDb29raWUoY29udGVudCwgSUdOT1JFX0VY
Q0VQVElPTik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKQEAgLTQ2NTIsMTQgKzQ2NTIs
MTQgQEAgY29uc3QgVmVjdG9yPEljb25VUkw+JiBEb2N1bWVudDo6aWNvblVSTHMoaW50IGljb25U
eXBlc01hc2spCiAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CiAgICAg
ICAgIGlmICghY2hpbGQtPmhhc1RhZ05hbWUobGlua1RhZykpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgSFRNTExpbmtFbGVtZW50KiBsaW5rRWxlbWVudCA9IHRvSFRNTExpbmtFbGVt
ZW50KGNoaWxkKTsKLSAgICAgICAgaWYgKCEobGlua0VsZW1lbnQtPmljb25UeXBlKCkgJiBpY29u
VHlwZXNNYXNrKSkKKyAgICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxMaW5rRWxlbWVudD4oKmNoaWxkKTsKKyAgICAgICAgaWYgKCEobGlua0VsZW1lbnQu
aWNvblR5cGUoKSAmIGljb25UeXBlc01hc2spKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChsaW5rRWxlbWVudC0+aHJlZigpLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKGxpbmtF
bGVtZW50LmhyZWYoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICAvLyBQdXQgaXQgYXQgdGhlIGZyb250IHRvIGVuc3VyZSB0aGF0IGljb25zIHNlZW4gbGF0ZXIg
dGFrZSBwcmVjZWRlbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjLgotICAgICAgICBJY29uVVJM
IG5ld1VSTChsaW5rRWxlbWVudC0+aHJlZigpLCBsaW5rRWxlbWVudC0+aWNvblNpemVzKCksIGxp
bmtFbGVtZW50LT50eXBlKCksIGxpbmtFbGVtZW50LT5pY29uVHlwZSgpKTsKKyAgICAgICAgSWNv
blVSTCBuZXdVUkwobGlua0VsZW1lbnQuaHJlZigpLCBsaW5rRWxlbWVudC5pY29uU2l6ZXMoKSwg
bGlua0VsZW1lbnQudHlwZSgpLCBsaW5rRWxlbWVudC5pY29uVHlwZSgpKTsKICAgICAgICAgbV9p
Y29uVVJMcy5hcHBlbmQobmV3VVJMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50T3JkZXJlZE1hcC5jcHAKaW5kZXggMDhiNmMxZTZmZTU2ZDc3MWMwYzJmYWUyYmQ1YjY1OTcw
MjA3YTgwNS4uNzdlZWMzYjc1ZjQ5YTgwMDI0ZDZiMDkxMTVjMjNhMTlmZDI5YjNmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKQEAgLTUzLDE4ICs1MywxOCBA
QCBpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXks
IGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAKIGlubGluZSBib29sIGtleU1hdGNoZXNNYXBOYW1l
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsK
LSAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxNYXBFbGVtZW50
KGVsZW1lbnQpLmdldE5hbWUoKS5pbXBsKCkgPT0gJmtleTsKKyAgICByZXR1cm4gaXNIVE1MTWFw
RWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZWxlbWVudCkuZ2V0
TmFtZSgpLmltcGwoKSA9PSAma2V5OwogfQogCiBpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93ZXJj
YXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50KQogewotICAgIHJldHVybiBpc0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpICYmIHRvSFRN
TE1hcEVsZW1lbnQoZWxlbWVudCkuZ2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09ICZrZXk7Cisg
ICAgcmV0dXJuIGlzSFRNTE1hcEVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE1hcEVs
ZW1lbnQ+KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSAma2V5OwogfQogCiBp
bmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IEhUTUw1
IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgbWF0Y2ggYm90aCBpbWFnZSBhbmQgb2JqZWN0
IGVsZW1lbnRzLgotICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgdG9I
VE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpLm1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGtleSk7Cisg
ICAgcmV0dXJuIGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PihlbGVtZW50KS5tYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChrZXkpOwogfQogCiBp
bmxpbmUgYm9vbCBrZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtMTY4LDIyICsxNjgsMjIgQEAg
RWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGtleSwgY29uc3QKIAogSFRNTE1hcEVsZW1lbnQqIERvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNv
bnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTE1hcEVsZW1l
bnQoZ2V0PGtleU1hdGNoZXNNYXBOYW1lPihrZXksIHNjb3BlKSk7CisgICAgcmV0dXJuIGRvd25j
YXN0PEhUTUxNYXBFbGVtZW50PihnZXQ8a2V5TWF0Y2hlc01hcE5hbWU+KGtleSwgc2NvcGUpKTsK
IH0KIAogSFRNTE1hcEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93
ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2Nv
cGUmIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxNYXBFbGVtZW50KGdldDxrZXlN
YXRjaGVzTG93ZXJjYXNlZE1hcE5hbWU+KGtleSwgc2NvcGUpKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE1hcEVsZW1lbnQ+KGdldDxrZXlNYXRjaGVzTG93ZXJjYXNlZE1hcE5hbWU+KGtleSwg
c2NvcGUpKTsKIH0KIAogSFRNTEltYWdlRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRF
bGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29u
c3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MSW1hZ2VFbGVt
ZW50KGdldDxrZXlNYXRjaGVzTG93ZXJjYXNlZFVzZW1hcD4oa2V5LCBzY29wZSkpOworICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRV
c2VtYXA+KGtleSwgc2NvcGUpKTsKIH0KIAogSFRNTExhYmVsRWxlbWVudCogRG9jdW1lbnRPcmRl
cmVkTWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
SFRNTExhYmVsRWxlbWVudChnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNj
b3BlKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KGdldDxrZXlNYXRj
aGVzTGFiZWxGb3JBdHRyaWJ1dGU+KGtleSwgc2NvcGUpKTsKIH0KIAogRWxlbWVudCogRG9jdW1l
bnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCmluZGV4IGQ3
YTlkNjY2NzNhNmFlM2ViMDEzMWZmMDNhM2ZiMzA0MGVlMGQ2Y2YuLjYxZDk5YTcxYzRiOWMxOTYw
Mzg2NGNjYjIwMjlhYzgwMGM3YjQ5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lk
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhW
ZWN0b3I8UmVmUHRyPFN0eWxlUwogICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0ID0g
ZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXNIVE1MTGlua0VsZW1lbnQoZWxlbWVudCkpIHsKICAg
ICAgICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAotICAgICAgICAgICAgICAgIEhUTUxMaW5r
RWxlbWVudCYgbGlua0VsZW1lbnQgPSB0b0hUTUxMaW5rRWxlbWVudChlbGVtZW50KTsKKyAgICAg
ICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRNTExp
bmtFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQuaXNE
aXNhYmxlZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBlbmFibGVkVmlhU2NyaXB0ID0gbGlua0VsZW1lbnQuaXNFbmFibGVkVmlhU2NyaXB0KCk7CkBA
IC0zMDgsOSArMzA4LDkgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xs
ZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKICAgICAgICAgICAgIGlm
IChpc1NWR1N0eWxlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgICAgICAgICBzaGVldCA9IGRv
d25jYXN0PFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGlzSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHNoZWV0
ID0gdG9IVE1MTGlua0VsZW1lbnQoZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgICAgICBz
aGVldCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzaGVldCA9IHRvSFRNTFN0eWxlRWxlbWVudChl
bGVtZW50KS5zaGVldCgpOworICAgICAgICAgICAgICAgIHNoZWV0ID0gZG93bmNhc3Q8SFRNTFN0
eWxlRWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGlzIHNoZWV0IGJlbG9uZ3MgdG8gYSBzdHlsZXNldAogICAgICAgICAgICAgLy8gKHRo
dXMgbWFraW5nIGl0IFBSRUZFUlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRoYW4KICAgICAgICAg
ICAgIC8vIFBFUlNJU1RFTlQpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGM5NmNmYWRmNWY4
YjY0MTEzMDgxMDA0YTY5YmFlZGU0NGI4OGFmNjcuLjgyNjQ3NWIzMzNhYjgxZmY4M2ZlMjFkYzM1
MTg0OGQwYWY1OTZiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEzMzgsNyArMTMzOCw3
IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvCiAgICAgICAgIGVsZW1lbnRSYXJlRGF0YSgpLT5j
bGVhckNsYXNzTGlzdFZhbHVlRm9yUXVpcmtzTW9kZSgpOwogCiAgICAgVHJlZVNjb3BlKiBuZXdT
Y29wZSA9ICZpbnNlcnRpb25Qb2ludC50cmVlU2NvcGUoKTsKLSAgICBIVE1MRG9jdW1lbnQqIG5l
d0RvY3VtZW50ID0gIXdhc0luRG9jdW1lbnQgJiYgaW5Eb2N1bWVudCgpICYmIG5ld1Njb3BlLT5k
b2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IHRvSFRNTERvY3VtZW50KCZuZXdTY29w
ZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CisgICAgSFRNTERvY3VtZW50KiBuZXdEb2N1
bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAmJiBuZXdTY29wZS0+ZG9jdW1l
bnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCZuZXdT
Y29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CiAgICAgaWYgKG5ld1Njb3BlICE9ICZ0
cmVlU2NvcGUoKSkKICAgICAgICAgbmV3U2NvcGUgPSBudWxscHRyOwogCkBAIC0xMzgxLDcgKzEz
ODEsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQogCiAgICAgaWYgKGluc2VydGlvblBvaW50LmlzSW5UcmVlU2NvcGUoKSkgewogICAg
ICAgICBUcmVlU2NvcGUqIG9sZFNjb3BlID0gJmluc2VydGlvblBvaW50LnRyZWVTY29wZSgpOwot
ICAgICAgICBIVE1MRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVudCgpICYmIG9sZFNj
b3BlLT5kb2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IHRvSFRNTERvY3VtZW50KCZv
bGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CisgICAgICAgIEhUTUxEb2N1bWVu
dCogb2xkRG9jdW1lbnQgPSBpbkRvY3VtZW50KCkgJiYgb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUo
KS5pc0hUTUxEb2N1bWVudCgpID8gZG93bmNhc3Q8SFRNTERvY3VtZW50Pigmb2xkU2NvcGUtPmRv
Y3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgICAgICBpZiAob2xkU2NvcGUgIT0gJnRyZWVT
Y29wZSgpIHx8ICFpc0luVHJlZVNjb3BlKCkpCiAgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxw
dHI7CiAKQEAgLTI1OTAsNyArMjU5MCw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIWRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHVwZGF0ZU5hbWVGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVudChkb2N1
bWVudCgpKSwgb2xkTmFtZSwgbmV3TmFtZSk7CisgICAgdXBkYXRlTmFtZUZvckRvY3VtZW50KGRv
d25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOwogfQog
CiB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBzY29wZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUp
CkBAIC0yNjM4LDcgKzI2MzgsNyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChjb25z
dCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ldwogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKCFkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICB1cGRhdGVJZEZvckRvY3VtZW50KHRvSFRNTERvY3VtZW50KGRvY3VtZW50KCkp
LCBvbGRJZCwgbmV3SWQsIFVwZGF0ZUhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNPbmx5SWZEaWZm
ZXJzRnJvbU5hbWVBdHRyaWJ1dGUpOworICAgIHVwZGF0ZUlkRm9yRG9jdW1lbnQoZG93bmNhc3Q8
SFRNTERvY3VtZW50Pihkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9jdW1l
bnROYW1lZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKIH0KIAogdm9p
ZCBFbGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZShUcmVlU2NvcGUmIHNjb3BlLCBjb25zdCBB
dG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKQpAQCAtMjY4NSw5
ICsyNjg1LDkgQEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVMYWJlbChUcmVlU2NvcGUmIHNjb3BlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVYKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFvbGRGb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHNjb3BlLnJl
bW92ZUxhYmVsKCpvbGRGb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksICp0b0hUTUxMYWJlbEVsZW1l
bnQodGhpcykpOworICAgICAgICBzY29wZS5yZW1vdmVMYWJlbCgqb2xkRm9yQXR0cmlidXRlVmFs
dWUuaW1wbCgpLCBkb3duY2FzdDxIVE1MTGFiZWxFbGVtZW50PigqdGhpcykpOwogICAgIGlmICgh
bmV3Rm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICBzY29wZS5hZGRMYWJlbCgq
bmV3Rm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCAqdG9IVE1MTGFiZWxFbGVtZW50KHRoaXMpKTsK
KyAgICAgICAgc2NvcGUuYWRkTGFiZWwoKm5ld0ZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZG93
bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKnRoaXMpKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp3aWxs
TW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCkBAIC0yNzQxLDEx
ICsyNzQxLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEVsZW1lbnQ6OmVuc3VyZUNh
Y2hlZEhUTUxDb2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlIHR5CiAgICAgaWYgKEhUTUxDb2xsZWN0
aW9uKiBjb2xsZWN0aW9uID0gY2FjaGVkSFRNTENvbGxlY3Rpb24odHlwZSkpCiAgICAgICAgIHJl
dHVybiBjb2xsZWN0aW9uOwogCi0gICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9u
OwogICAgIGlmICh0eXBlID09IFRhYmxlUm93cykgewotICAgICAgICByZXR1cm4gZW5zdXJlUmFy
ZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhUTUxUYWJsZVJv
d3NDb2xsZWN0aW9uPih0b0hUTUxUYWJsZUVsZW1lbnQoKnRoaXMpLCB0eXBlKTsKKyAgICAgICAg
cmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVj
dGlvbjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4oZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4o
KnRoaXMpLCB0eXBlKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU2VsZWN0T3B0aW9ucykgewot
ICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNo
ZWRDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4odG9IVE1MU2VsZWN0RWxlbWVudCgq
dGhpcyksIHR5cGUpOworICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2Rl
TGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oZG93bmNh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCp0aGlzKSwgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBl
ID09IEZvcm1Db250cm9scykgewogICAgICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb3JtVGFnKSB8
fCBoYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSk7CiAgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0
YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlZENvbGxlY3Rpb248SFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24+KCp0aGlzLCB0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKaW5kZXggYWExYTAwYWM2OWUwOTdhODAwNjc5Y2MxMmFlMzk4MzUxYjBhNjUwMi4uNDA5
NGYzM2M5MjJkZjUwMWQ0OTVlZjM1ZGUyOTFhYWQ1OGQwMDc3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM1NywxNyArMzU3LDE3IEBAIGJvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJw
RXZlbnQpCiAKICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsK
ICAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUuZ2V0KCkpKQotICAgICAgICB0b0hUTUxJ
bnB1dEVsZW1lbnQoKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGlu
Z1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxE
aXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIGlmICghZXZl
bnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQogICAgICAg
ICBkaXNwYXRjaEV2ZW50SW5ET00oKmV2ZW50LCBldmVudFBhdGgsIHdpbmRvd0V2ZW50Q29udGV4
dCk7CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KCZldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRS
dWxlcygqbm9kZSkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwogICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDAp
OwogCiAgICAgaWYgKGNsaWNrSGFuZGxpbmdTdGF0ZS5zdGF0ZWZ1bCkKLSAgICAgICAgdG9IVE1M
SW5wdXRFbGVtZW50KCpub2RlKS5kaWREaXNwYXRjaENsaWNrRXZlbnQoKmV2ZW50LCBjbGlja0hh
bmRsaW5nU3RhdGUpOworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSku
ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAg
IC8vIENhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUg
YSBjb25jZXB0IG9mIHByZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0
YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRleCA2MDk2YzU4NDFmZmM5ODY1ZjkwZmYyMmY4M2Ni
MTY3NzI1MDk0MzJiLi5lMzA1NmMzNjAxMjQ5ZWUzOWUzMTgyN2NhZDJjYjg4ZWNhMjZhYzgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0zODMsNyArMzgzLDcgQEAgU3Ry
aW5nIFNjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQoKSBjb25zdAogU2NyaXB0RWxlbWVudCog
dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmIChp
c0hUTUxTY3JpcHRFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MU2NyaXB0
RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTY3JpcHRFbGVt
ZW50PihlbGVtZW50KTsKIAogICAgIGlmIChpc1NWR1NjcmlwdEVsZW1lbnQoZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdTY3JpcHRFbGVtZW50PihlbGVtZW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAppbmRleCA3NWI5Njg5YzgwZDM3ZjU0N2Vi
ZWZlNTQ3ZmY0MTUzOTVkZTE1NDZmLi40YzIyZDAwNzM2ZGZmZTAzMjVlMWJhMTFjMDg4OTYwNGRl
NjJlZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCkBAIC03MCw3
ICs3MCw3IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlu
a3MoKQogaW5saW5lIHN0YXRpYyBMaW5rSGFzaCBsaW5rSGFzaEZvckVsZW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChpc0hUTUxBbmNob3JFbGVt
ZW50KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gdG9IVE1MQW5jaG9yRWxlbWVudChlbGVtZW50
KS52aXNpdGVkTGlua0hhc2goKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JF
bGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKICAgICBpZiAoY29uc3QgQXRvbWlj
U3RyaW5nKiBhdHRyaWJ1dGUgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQogICAgICAgICByZXR1
cm4gV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LmJhc2VVUkwoKSwgKmF0dHJpYnV0
ZSk7CiAgICAgcmV0dXJuIDA7CkBAIC0xMDEsNyArMTAxLDcgQEAgRUluc2lkZUxpbmsgVmlzaXRl
ZExpbmtTdGF0ZTo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCYgZWxlbWVudCkK
IAogICAgIExpbmtIYXNoIGhhc2g7CiAgICAgaWYgKGlzSFRNTEFuY2hvckVsZW1lbnQoZWxlbWVu
dCkpCi0gICAgICAgIGhhc2ggPSB0b0hUTUxBbmNob3JFbGVtZW50KGVsZW1lbnQpLnZpc2l0ZWRM
aW5rSGFzaCgpOworICAgICAgICBoYXNoID0gZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVs
ZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIGVsc2UKICAgICAgICAgaGFzaCA9IFdlYkNv
cmU6OnZpc2l0ZWRMaW5rSGFzaChlbGVtZW50LmRvY3VtZW50KCkuYmFzZVVSTCgpLCAqYXR0cmli
dXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9T
b3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCA0NWI4ZGI1MThkODg0ZTc0NDZm
YzYzNThkOWYzYmYxYzlmYjI4YmU5Li40ZGRlZGMxN2M4OTI5Zjg4OGMyZWNlYmQ3MjZjZDZiZWQ4
MjU4NDNmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtNjY2LDE0ICs2NjYsNiBAQCBz
dHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0ICRjbGFzcywgQXJnVHlwZT4gewogfTsK
IEVORAogICAgICAgICA7Ci0gICAgICAgIGlmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJI
VE1MIikgewotICAgICAgICAgICAgcHJpbnQgRiA8PEVORAotLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBtYWNyb3Mgb25jZSB0aGUgY29kZSBoYXMgYmVlbiBwb3J0ZWQgdG8gdXNpbmcKLS8vIGRvd25j
YXN0PCpFbGVtZW50PigpLgotI2RlZmluZSB0byRjbGFzcyh4KSBXZWJDb3JlOjpkb3duY2FzdDxX
ZWJDb3JlOjokY2xhc3M+KHgpCi1FTkQKLSAgICAgICAgICAgIDsKLSAgICAgICAgfQogICAgICAg
ICBwcmludCBGICJcbiI7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IGIyZTVkM2E4MDAzZWU0YTBhNDg4YWE1YTU1YTBmMWYwYmRjZjUzZTAuLmU5MGZkZmEzM2RjMjRm
YjUzMmMxNDhhOWY0MzJiYjYxYzM0OTI5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTIwOSw3ICsyMDksNyBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9y
Q29tbWFuZChFdmVudCogZXZlbnQpCiAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29u
dHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cg
dHJlZSwKICAgICAvLyB0aGVuIHVzZSB0aGUgc2F2ZWQgc2VsZWN0aW9uIGZvciB0aGF0IHRleHQg
Y29udHJvbC4KICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dEZvcm1Db250cm9s
T2ZTZWxlY3Rpb25TdGFydCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzZWxlY3Rpb24uc3Rh
cnQoKSk7Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRGcm9tQ29udHJvbE9m
VGFyZ2V0ID0gaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZXZlbnQtPnRhcmdldCgpLT50
b05vZGUoKSkgPyB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGV2ZW50LT50YXJnZXQoKS0+
dG9Ob2RlKCkpIDogbnVsbHB0cjsKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4
dEZyb21Db250cm9sT2ZUYXJnZXQgPSBpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCpldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpKSA/IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50PihldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpKSA6IG51bGxwdHI7CiAgICAgaWYgKHRleHRG
cm9tQ29udHJvbE9mVGFyZ2V0ICYmIChzZWxlY3Rpb24uc3RhcnQoKS5pc051bGwoKSB8fCB0ZXh0
RnJvbUNvbnRyb2xPZlRhcmdldCAhPSB0ZXh0Rm9ybUNvbnRyb2xPZlNlbGVjdGlvblN0YXJ0KSkg
ewogICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRleHRGcm9tQ29udHJvbE9mVGFy
Z2V0LT5zZWxlY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKHJh
bmdlLmdldCgpLCBET1dOU1RSRUFNLCBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpKTsKQEAgLTMy
MSwxOCArMzIxLDE4IEBAIGJvb2wgRWRpdG9yOjpjYW5DdXQoKSBjb25zdAogc3RhdGljIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIHsKICAgICBpZiAoIWRvY3VtZW50LmlzSW1hZ2VEb2N1bWVudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgSFRNTEVsZW1lbnQq
IGJvZHkgPSBkb2N1bWVudC5ib2R5KCk7CiAgICAgaWYgKCFib2R5KQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IGJvZHkt
PmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWlzSFRNTEltYWdlRWxlbWVudChub2RlKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudChub2RlKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1l
bnQ+KG5vZGUpOwogfQogCiBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CkBAIC0zNTMzLDE4
ICszNTMzLDE4IEBAIHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQog
ewogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IGlmIChub2RlLT5yZW5kZXJlcigpLT5pc1RleHRPckxpbmVCcmVhaygpKQogICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgIGlmIChpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCpu
b2RlKSkKLSAgICAgICAgICAgIG5vZGUgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KG5v
ZGUpLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgICAgICBub2RlID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCpub2RlKS52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgIH0KIAotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9u
U3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwg
aW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCmluZGV4IDBlM2YzZmUwMzljMDdkNWEyMWYxOTA1ZDlmZWQwNTI4NDYwMDNm
NDIuLjhkYjcyY2Y5YWNhZDJkOWRmMjQ0ZDJmNjQxYmUxNTQxODI4YzAwYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xNjcwLDE2ICsxNjcwLDE2IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0g
ZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGZv
Y3VzZWRFbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpIHsKLSAgICAgICAgSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KGRvY3VtZW50LT5m
b2N1c2VkRWxlbWVudCgpKTsKLSAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQtPmNhblNlbGVjdEFs
bCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3RFbGVtZW50LT5zZWxlY3RBbGwoKTsKKyAgICBpZiAo
Zm9jdXNlZEVsZW1lbnQgJiYgaXNIVE1MU2VsZWN0RWxlbWVudChmb2N1c2VkRWxlbWVudCkpIHsK
KyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
U2VsZWN0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KTsKKyAgICAgICAgaWYgKHNlbGVjdEVsZW1l
bnQuY2FuU2VsZWN0QWxsKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0QWxs
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8
Tm9kZT4gcm9vdCA9IDA7Ci0gICAgTm9kZSogc2VsZWN0U3RhcnRUYXJnZXQgPSAwOworICAgIFJl
ZlB0cjxOb2RlPiByb290OworICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbnVsbHB0cjsK
ICAgICBpZiAobV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICByb290
ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICAgICAgaWYg
KE5vZGUqIHNoYWRvd1Jvb3QgPSBtX3NlbGVjdGlvbi5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290
Tm9kZSgpKQpAQCAtMTY4OSw3ICsxNjg5LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
QWxsKCkKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkgJiYg
Zm9jdXNlZEVsZW1lbnQpIHsKICAgICAgICAgICAgIGlmIChmb2N1c2VkRWxlbWVudC0+aXNUZXh0
Rm9ybUNvbnRyb2woKSkgewotICAgICAgICAgICAgICAgIHRvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQoZm9jdXNlZEVsZW1lbnQpLT5zZWxlY3QoKTsKKyAgICAgICAgICAgICAgICBkb3duY2Fz
dDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5zZWxlY3QoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290
ID0gZm9jdXNlZEVsZW1lbnQtPm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCk7CkBAIC0y
MDI0LDcgKzIwMjQsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVt
ZW50KiBzdGFydCkKICAgICBmb3IgKGF1dG8gaXQgPSBkZXNjZW5kYW50cy5mcm9tKCpzdGFydCks
IGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgSFRN
TEVsZW1lbnQmIGVsZW1lbnQgPSAqaXQ7CiAgICAgICAgIGlmIChpc0hUTUxGb3JtRWxlbWVudCgm
ZWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUVsZW1lbnQoJmVsZW1lbnQp
OworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oJmVsZW1lbnQp
OwogICAgICAgICBpZiAoaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGVsZW1lbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KS5mb3JtKCk7CiAg
ICAgICAgIGlmIChpc0hUTUxGcmFtZUVsZW1lbnRCYXNlKGVsZW1lbnQpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IDIxNWFhN2FlZTIwNWUy
ZTU4ZjdhN2NlMzFjMmYyM2M1MTk2NmYyYmIuLjE4ZTU4OTRkMmNiMWM1ZjRhZTFmNGUyMjkzOTQ4
ZTk2YjMxNzM3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFs
aXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2QKIAogICAg
IGlmICghKHRhcmdldE5vZGUuZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGVsZW1lbnRD
YW5ub3RIYXZlRW5kVGFnKHRhcmdldE5vZGUpKSkgewogI2lmIEVOQUJMRShURU1QTEFURV9FTEVN
RU5UKQotICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS5oYXNUYWdOYW1lKHRlbXBs
YXRlVGFnKSA/IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXJnZXROb2RlKS5jb250ZW50KCktPmZp
cnN0Q2hpbGQoKSA6IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOworICAgICAgICBOb2RlKiBjdXJy
ZW50ID0gdGFyZ2V0Tm9kZS5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSA/IGRvd25jYXN0PEhUTUxU
ZW1wbGF0ZUVsZW1lbnQ+KHRhcmdldE5vZGUpLmNvbnRlbnQoKS0+Zmlyc3RDaGlsZCgpIDogdGFy
Z2V0Tm9kZS5maXJzdENoaWxkKCk7CiAjZWxzZQogICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFy
Z2V0Tm9kZS5maXJzdENoaWxkKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMGIwMjQ2MjcyZDk1NTcyZTI0
MmU2MDBlYmU0N2RmYTdhNjc1MTQ5ZC4uYmQ1MzZmMDc5ZjIxZmFjZTgzYmRlNGJmODM4MzYwNzFi
MTJmNzE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTEyNzMsNyArMTI3Myw3IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OnNob3VsZFBlcmZvcm1TbWFydFJlcGxhY2UoKSBjb25zdAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3Jt
Q29udHJvbChwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50
KCkpOwotICAgIGlmICh0ZXh0Q29udHJvbCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRy
b2wpICYmIHRvSFRNTElucHV0RWxlbWVudCh0ZXh0Q29udHJvbCktPmlzUGFzc3dvcmRGaWVsZCgp
KQorICAgIGlmICh0ZXh0Q29udHJvbCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wp
ICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRGlzYWJsZSBzbWFydCByZXBsYWNlIGZv
ciBwYXNzd29yZCBmaWVsZHMuCiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDQwMjI1ZjA2ZmFjNmVjZWMzODdmZTU0
ZDEyZGFiYzQ1NzY2ZjIyNjQuLmJhODMyNWY1NmNlYTQ5YThjMWM1NjhhYWIwMGRjNGI4ZGQ1NTgx
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAt
NjU4LDEzICs2NTgsMTMgQEAgRWxlbWVudCogVmlzaWJsZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxl
RWxlbWVudCgpIGNvbnN0CiAKIE5vZGUqIFZpc2libGVTZWxlY3Rpb246Om5vbkJvdW5kYXJ5U2hh
ZG93VHJlZVJvb3ROb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhcnQoKS5kZXByZWNhdGVk
Tm9kZSgpID8gc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVS
b290Tm9kZSgpIDogMDsKKyAgICByZXR1cm4gc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpID8gc3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpLT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIDog
bnVsbHB0cjsKIH0KIAogYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0luUGFzc3dvcmRGaWVsZCgp
IGNvbnN0CiB7CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0g
ZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHN0YXJ0KCkpOwotICAgIHJldHVybiB0ZXh0Q29udHJv
bCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpICYmIHRvSFRNTElucHV0RWxlbWVu
dCh0ZXh0Q29udHJvbCktPmlzUGFzc3dvcmRGaWVsZCgpOworICAgIHJldHVybiB0ZXh0Q29udHJv
bCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZpZWxkKCk7CiB9CiAKICNpZm5kZWYg
TkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252
ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0K
aW5kZXggOGJiNzQ5NmI5NWUyNDAyMjFmNGU3YTZiM2QzODliZjQxN2QyODM3My4uMjRiYTVlMWEw
MjI0ZTUwOTcwZDg5NzAzNDRmYjc4NjE2OGExMDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtMjAzNSw3ICsyMDM1LDcgQEAgQk9PTCBI
VE1MQ29udmVydGVyOjpfcHJvY2Vzc0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNJbnRlZ2Vy
IGRlcHRoKQogICAgICAgICAgICAgbGlzdFN0eWxlVHlwZSA9ICJkZWNpbWFsIjsKICAgICAgICAg
bGlzdCA9IGFkb3B0TlMoW1tQbGF0Zm9ybU5TVGV4dExpc3QgYWxsb2NdIGluaXRXaXRoTWFya2Vy
Rm9ybWF0OlN0cmluZygieyIgKyBsaXN0U3R5bGVUeXBlICsgIn0iKSBvcHRpb25zOjBdKTsKICAg
ICAgICAgaWYgKGlzSFRNTE9MaXN0RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgTlNJ
bnRlZ2VyIHN0YXJ0aW5nSXRlbU51bWJlciA9IHRvSFRNTE9MaXN0RWxlbWVudChlbGVtZW50KS5z
dGFydCgpOzsKKyAgICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSBkb3du
Y2FzdDxIVE1MT0xpc3RFbGVtZW50PihlbGVtZW50KS5zdGFydCgpOwogICAgICAgICAgICAgW2xp
c3Qgc2V0U3RhcnRpbmdJdGVtTnVtYmVyOnN0YXJ0aW5nSXRlbU51bWJlcl07CiAgICAgICAgIH0K
ICAgICAgICAgW190ZXh0TGlzdHMgYWRkT2JqZWN0Omxpc3QuZ2V0KCldOwpAQCAtMjA0Myw3ICsy
MDQzLDcgQEAgQk9PTCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc0VsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwgTlNJbnRlZ2VyIGRlcHRoKQogICAgICAgICBfYWRkUXVvdGVGb3JFbGVtZW50KGVsZW1l
bnQsIFlFUywgX3F1b3RlTGV2ZWwrKyk7CiAgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05h
bWUoaW5wdXRUYWcpKSB7CiAgICAgICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkp
IHsKLSAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IHRvSFRNTElu
cHV0RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICAg
ICAgaWYgKGlucHV0RWxlbWVudC50eXBlKCkgPT0gInRleHQiKSB7CiAgICAgICAgICAgICAgICAg
TlNTdHJpbmcgKnZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkKQEAgLTIwNTIsNyArMjA1Miw3IEBAIEJP
T0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIE5TSW50
ZWdlciBkZXB0aCkKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KHRleHRhcmVhVGFnKSkgewogICAgICAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1l
bnQpKSB7Ci0gICAgICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0QXJlYUVsZW1lbnQg
PSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MVGV4dEFy
ZWFFbGVtZW50JiB0ZXh0QXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50
PihlbGVtZW50KTsKICAgICAgICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IHRleHRBcmVhRWxlbWVu
dC52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkK
ICAgICAgICAgICAgICAgICBfYWRkVmFsdWUodmFsdWUsIGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDBhYWNhZDQ1N2YwNTBiMDQyZWZjNmNhYzA0
OGQ1N2JmZjhjZDA4N2MuLmUwZWIzNjljMjQzYjAwZjJkODQyOGMwMDJlMDQ3YjY4M2U5ZGRmNmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTE4MSwxMiArMTgx
LDEyIEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5n
RGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgICAgIHJldHVybjsKIAogICAgIEVs
ZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVu
dCgpOwotICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiAoZm9jdXNlZEVsZW1lbnQtPmhhc1RhZ05h
bWUodGV4dGFyZWFUYWcpIHx8IChmb2N1c2VkRWxlbWVudC0+aGFzVGFnTmFtZShpbnB1dFRhZykg
JiYKLSAgICAgICAgKHRvSFRNTElucHV0RWxlbWVudChmb2N1c2VkRWxlbWVudCktPmlzVGV4dEZp
ZWxkKCkgfHwKLSAgICAgICAgIHRvSFRNTElucHV0RWxlbWVudChmb2N1c2VkRWxlbWVudCktPmlz
U2VhcmNoRmllbGQoKSkpKSkgeworICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiAoaXNIVE1MVGV4
dEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KSB8fCAoaXNIVE1MSW5wdXRFbGVtZW50KGZvY3Vz
ZWRFbGVtZW50KQorICAgICAgICAmJiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3Vz
ZWRFbGVtZW50KS5pc1RleHRGaWVsZCgpCisgICAgICAgICAgICB8fCBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLmlzU2VhcmNoRmllbGQoKSkpKSkgewogICAgICAg
ICBpZiAoZGlyZWN0aW9uID09IE5hdHVyYWxXcml0aW5nRGlyZWN0aW9uKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0b0hUTUxFbGVtZW50KGZvY3VzZWRFbGVtZW50KS0+c2V0QXR0cmli
dXRlKGFsaWduQXR0ciwgbmV3VmFsdWUpOworICAgICAgICB0b0hUTUxFbGVtZW50KCpmb2N1c2Vk
RWxlbWVudCkuc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgbmV3VmFsdWUpOwogICAgICAgICBtX2Zy
YW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAKaW5kZXggMmUyZDliZDNi
MGEzZGJlNGM4MjI2ZTYwOTViNzdiMGEwODBkMDI4ZC4uOThlOGE5MjU5OWViYzc0MzQyNmNiOTY0
MDFhZDllZjU2NDUyNmYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklu
cHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAK
QEAgLTIyOCw3ICsyMjgsNyBAQCBWZWN0b3I8Q29sb3I+IENvbG9ySW5wdXRUeXBlOjpzdWdnZXN0
aW9ucygpIGNvbnN0CiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3QgPSBlbGVtZW50
KCkuZGF0YUxpc3QoKTsKICAgICBpZiAoZGF0YUxpc3QpIHsKICAgICAgICAgUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVs
ZW1lbnQob3B0aW9ucy0+aXRlbShpKSk7IGkrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KG9wdGlvbnMtPml0ZW0oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghZWxlbWVudCgp
LmlzVmFsaWRWYWx1ZShvcHRpb24tPnZhbHVlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgQ29sb3IgY29sb3Iob3B0aW9uLT52YWx1ZSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKaW5kZXggMzVlMzJkMzgxNGUwN2Mw
YTFhZjYzMTEwMjA4MWY0ZTcyOGE5YzczZi4uZDZmMTRkNzM1MzUzMjM2OTFmYzk2ZjhiMGY4ZmNm
M2IzODY4OGY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlE
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVu
dC5jcHAKQEAgLTMwMyw3ICszMDMsNyBAQCBib29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2Vy
Ojpsb2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAgICAgZWxzZSBpZiAoIWlzSFRNTFRhYmxlRWxlbWVu
dCh0YWJsZUVsZW1lbnQuZ2V0KCkpKQogICAgICAgICBMT0dfRVJST1IoIkVsZW1lbnQgb2YgaWQg
XCJmdHBEaXJlY3RvcnlUYWJsZVwiIGlzIG5vdCBhIHRhYmxlIGVsZW1lbnQiKTsKICAgICBlbHNl
IAotICAgICAgICBtX3RhYmxlRWxlbWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1l
bnQuZ2V0KCkpOworICAgICAgICBtX3RhYmxlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVs
ZW1lbnQ+KHRhYmxlRWxlbWVudC5nZXQoKSk7CiAKICAgICAvLyBCYWlsIGlmIHdlIGZvdW5kIHRo
ZSB0YWJsZSBlbGVtZW50CiAgICAgaWYgKG1fdGFibGVFbGVtZW50KQpAQCAtMzExLDcgKzMxMSw3
IEBAIGJvb2wgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRlbXBsYXRl
KCkKIAogICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgb25lIG1hbnVhbGx5CiAgICAgdGFibGVFbGVt
ZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWJsZVRhZywgZmFsc2UpOwotICAgIG1f
dGFibGVFbGVtZW50ID0gdG9IVE1MVGFibGVFbGVtZW50KHRhYmxlRWxlbWVudC5nZXQoKSk7Cisg
ICAgbV90YWJsZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pih0YWJsZUVsZW1l
bnQuZ2V0KCkpOwogICAgIG1fdGFibGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpp
ZEF0dHIsICJmdHBEaXJlY3RvcnlUYWJsZSIpOwogCiAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQg
dGhlIHRhYmxlIGVsZW1lbnQsIGxldHMgdHJ5IHRvIGFwcGVuZCBvdXIgb3duIHRvIHRoZSBib2R5
CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6Y3Jl
YXRlQmFzaWNEb2N1bWVudCgpCiAgICAgZG9jdW1lbnQoKS0+YXBwZW5kQ2hpbGQoYm9keUVsZW1l
bnQsIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVu
dCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKLSAgICBtX3Rh
YmxlRWxlbWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQuZ2V0KCkpOworICAg
IG1fdGFibGVFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50
LmdldCgpKTsKICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRB
dHRyLCAiZnRwRGlyZWN0b3J5VGFibGUiKTsKICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCAid2lkdGg6MTAwJSIpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKaW5kZXggNDRlZTA1MDdhZDc1ZTQ2
ZjY0ZjVhOGFlMmEwZjA0N2Q4MTBiMDY3NS4uOWRmNDA1OTg5MjQ5OGNlZGNmMjM2ZGM0NmFjZWEz
ZGExMDNkMTFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcApAQCAtOTYsMTAgKzk2LDEwIEBAIEhUTUxGb3JtRWxlbWVudCogRm9ybUFzc29jaWF0
ZWRFbGVtZW50OjpmaW5kQXNzb2NpYXRlZEZvcm0oY29uc3QgSFRNTEVsZW1lbnQqIGVsCiAgICAg
ICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRo
YXQgZXF1YWwgdG8KICAgICAgICAgLy8gdGhlIHZhbHVlIG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3
ZSBwdXQgdGhlIHJlc3VsdCBvZgogICAgICAgICAvLyB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJ
ZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAgICAgIEhUTUxGb3JtRWxlbWVudCogbmV3
Rm9ybSA9IDA7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSA9IG51bGxwdHI7CiAg
ICAgICAgIEVsZW1lbnQqIG5ld0Zvcm1DYW5kaWRhdGUgPSBlbGVtZW50LT50cmVlU2NvcGUoKS5n
ZXRFbGVtZW50QnlJZChmb3JtSWQpOwogICAgICAgICBpZiAobmV3Rm9ybUNhbmRpZGF0ZSAmJiBp
c0hUTUxGb3JtRWxlbWVudChuZXdGb3JtQ2FuZGlkYXRlKSkKLSAgICAgICAgICAgIG5ld0Zvcm0g
PSB0b0hUTUxGb3JtRWxlbWVudChuZXdGb3JtQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIG5ld0Zv
cm0gPSBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KG5ld0Zvcm1DYW5kaWRhdGUpOwogICAgICAg
ICByZXR1cm4gbmV3Rm9ybTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAKaW5kZXggZjE2MGEyYjgxZDE0NjQ2OWQxY2VhY2YyYmZhODlkOWM1MmIxOTg0
MS4uMzRhZmViOWY4OWZkM2YyMzgxOTg0NTQ3YzcwMjQ3MzA1YjhkMzg5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKQEAgLTE2MSwxNiArMTYxLDE2IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRpb24oU3RyaW5nQnVpbGRlciYgdXJs
LCBFdmVudCogZXZlbnQpCiAgICAgaWYgKCFpc0hUTUxJbWFnZUVsZW1lbnQodGFyZ2V0KSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gdG9I
VE1MSW1hZ2VFbGVtZW50KHRhcmdldCk7Ci0gICAgaWYgKCFpbWFnZUVsZW1lbnQgfHwgIWltYWdl
RWxlbWVudC0+aXNTZXJ2ZXJNYXAoKSkKKyAgICBIVE1MSW1hZ2VFbGVtZW50JiBpbWFnZUVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqdGFyZ2V0KTsKKyAgICBpZiAoIWltYWdl
RWxlbWVudC5pc1NlcnZlck1hcCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWltYWdl
RWxlbWVudC0+cmVuZGVyZXIoKSB8fCAhaW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLT5pc1JlbmRl
ckltYWdlKCkpCisgICAgaWYgKCFpbWFnZUVsZW1lbnQucmVuZGVyZXIoKSB8fCAhaW1hZ2VFbGVt
ZW50LnJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJl
bmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoaW1hZ2VFbGVtZW50LT5yZW5kZXJl
cigpKTsKKyAgICBSZW5kZXJJbWFnZSYgcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKCppbWFnZUVs
ZW1lbnQucmVuZGVyZXIoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkg
cGFzcyB0cnVlIGZvciB1c2VUcmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb3Np
dGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCh0b01vdXNlRXZlbnQo
ZXZlbnQpLT5wYWdlWCgpLCB0b01vdXNlRXZlbnQoZXZlbnQpLT5wYWdlWSgpKSk7CisgICAgRmxv
YXRQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0gcmVuZGVyZXIuYWJzb2x1dGVUb0xvY2FsKEZsb2F0
UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVgoKSwgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+
cGFnZVkoKSkpOwogICAgIGludCB4ID0gYWJzb2x1dGVQb3NpdGlvbi54KCk7CiAgICAgaW50IHkg
PSBhYnNvbHV0ZVBvc2l0aW9uLnkoKTsKICAgICB1cmwuYXBwZW5kKCc/Jyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKaW5kZXggYjM3OTU2YzIxYmM0YTc1NmIyNzk5YTli
ZGEyMTVhMGE3ZmFiNTJhMy4uZGQ4NGJkYzY4NDBjN2FiNzY5NDEzZmZkMWYxYTM3M2MxNjk1NzQw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcApAQCAtMTgzLDkgKzE4
Myw5IEBAIEhUTUxJbWFnZUVsZW1lbnQqIEhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkg
Y29uc3QKIHsKICAgICBOb2RlKiBtYXBFbGVtZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICgh
bWFwRWxlbWVudCB8fCAhaXNIVE1MTWFwRWxlbWVudChtYXBFbGVtZW50KSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiB0b0hUTUxN
YXBFbGVtZW50KG1hcEVsZW1lbnQpLT5pbWFnZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE1hcEVsZW1lbnQ+KCptYXBFbGVtZW50KS5pbWFnZUVsZW1lbnQoKTsKIH0KIAogYm9v
bCBIVE1MQXJlYUVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCmluZGV4IDMzMjdhYmJiM2Fi
OWJmMjVkY2JhZmRhZmE3ZTkzNWE4YWNkZWFjZjcuLjkxYmIyODFmMzEyNGM4ODJhNGY3NzA1NzJh
MjI3MGQyNWM5ODkwYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCkBA
IC0xOTEsMTAgKzE5MSwxMCBAQCBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBI
VE1MQ29sbGVjdGlvbiYgaHRtbENvbGxlY3Rpb24sIEVsZW1lbnQmIGVsZQogICAgIGNhc2UgU2Vs
ZWN0T3B0aW9uczoKICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShvcHRpb25UYWcp
OwogICAgIGNhc2UgU2VsZWN0ZWRPcHRpb25zOgotICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNU
YWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS5zZWxlY3Rl
ZCgpOworICAgICAgICByZXR1cm4gaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkuc2VsZWN0ZWQoKTsKICAgICBjYXNlIERh
dGFMaXN0T3B0aW9uczoKLSAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvcHRpb25UYWcp
KSB7Ci0gICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gdG9IVE1MT3B0aW9u
RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVu
dCkpIHsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoIW9wdGlvbi5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSAmJiAhb3B0aW9uLnZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yMDIsNyArMjAyLDcgQEAgaW5s
aW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24mIGh0bWxDb2xs
ZWN0aW9uLCBFbGVtZW50JiBlbGUKICAgICBjYXNlIE1hcEFyZWFzOgogICAgICAgICByZXR1cm4g
ZWxlbWVudC5oYXNUYWdOYW1lKGFyZWFUYWcpOwogICAgIGNhc2UgRG9jQXBwbGV0czoKLSAgICAg
ICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IChlbGVtZW50Lmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSAmJiB0b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpLmNvbnRhaW5z
SmF2YUFwcGxldCgpKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShhcHBsZXRU
YWcpIHx8IChpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPYmpl
Y3RFbGVtZW50PihlbGVtZW50KS5jb250YWluc0phdmFBcHBsZXQoKSk7CiAgICAgY2FzZSBEb2NF
bWJlZHM6CiAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoZW1iZWRUYWcpOwogICAg
IGNhc2UgRG9jTGlua3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGY0Njll
YzUyMzc0NGI3NWY3YTJkMzRiZDA0OTU3NDEyODI3OTU2N2MuLjkyZTUxZjZhMjE2YTZlOGJiNTIz
YjgyY2FlMmViNGRkMzMzNzJiZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBA
IC0zNzksNyArMzc5LDcgQEAgYm9vbCBIVE1MRWxlbWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVk
b0NsYXNzKCkgY29uc3QKIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCA9IHRoaXMtPmRv
Y3VtZW50KCk7CiAgICAgaWYgKGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAg
Y29uc3QgSFRNTERvY3VtZW50JiBodG1sRG9jdW1lbnQgPSB0b0hUTUxEb2N1bWVudChkb2N1bWVu
dCk7CisgICAgICAgIGNvbnN0IEhUTUxEb2N1bWVudCYgaHRtbERvY3VtZW50ID0gZG93bmNhc3Q8
SFRNTERvY3VtZW50Pihkb2N1bWVudCk7CiAgICAgICAgIHJldHVybiBodG1sRG9jdW1lbnQuaW5E
ZXNpZ25Nb2RlKCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTQyNyw4ICs0MjcsOCBA
QCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lckhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGb3JJbm5lck91dGVySFRNTChodG1sLCB0aGlzLCBBbGxvd1Njcmlw
dGluZ0NvbnRlbnQsIGVjKSkgewogICAgICAgICBDb250YWluZXJOb2RlKiBjb250YWluZXIgPSB0
aGlzOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAoaGFzVGFnTmFt
ZSh0ZW1wbGF0ZVRhZykpCi0gICAgICAgICAgICBjb250YWluZXIgPSB0b0hUTUxUZW1wbGF0ZUVs
ZW1lbnQodGhpcyktPmNvbnRlbnQoKTsKKyAgICAgICAgaWYgKGlzSFRNTFRlbXBsYXRlRWxlbWVu
dCgqdGhpcykpCisgICAgICAgICAgICBjb250YWluZXIgPSBkb3duY2FzdDxIVE1MVGVtcGxhdGVF
bGVtZW50PigqdGhpcykuY29udGVudCgpOwogI2VuZGlmCiAgICAgICAgIHJlcGxhY2VDaGlsZHJl
bldpdGhGcmFnbWVudCgqY29udGFpbmVyLCBmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKICAgICB9
CkBAIC05MjAsMTEgKzkyMCwxMSBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rp
b25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbgogVGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQoKnRoaXMpKSB7Ci0gICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0RWxl
bWVudCA9IHRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3RfY2FzdDxIVE1MRWxlbWVu
dCo+KHRoaXMpKTsKKyAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRN
TEVsZW1lbnQmPigqdGhpcykpOwogICAgICAgICBib29sIGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5
OwotICAgICAgICBVQ2hhckRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdGV4dEVsZW1lbnQtPnZh
bHVlKCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oJmhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KTsK
KyAgICAgICAgVUNoYXJEaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRleHRFbGVtZW50LnZhbHVl
KCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oJmhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KTsKICAg
ICAgICAgaWYgKHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpCi0gICAgICAgICAgICAqc3Ry
b25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSA9IGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5ID8gdGV4
dEVsZW1lbnQgOiBudWxscHRyOworICAgICAgICAgICAgKnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4
dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/ICZ0ZXh0RWxlbWVudCA6IG51bGxwdHI7
CiAgICAgICAgIHJldHVybiAodGV4dERpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQpID8gTFRS
IDogUlRMOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1i
ZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAK
aW5kZXggY2EyNTY0YTIwZDJhMmI2MTEzMTg4N2IyOGM0YTJmYWUxNGVkYmU1Ni4uMzY0MmI4NWNi
NmNiNTcyODVkNmNkMDdlNWFiM2U5YTU0NDExZmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwCkBAIC0xODgsMTIgKzE4OCwxMiBAQCBib29sIEhUTUxFbWJlZEVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogCiAgICAg
Ly8gSWYgbXkgcGFyZW50IGlzIGFuIDxvYmplY3Q+IGFuZCBpcyBub3Qgc2V0IHRvIHVzZSBmYWxs
YmFjayBjb250ZW50LCBJCiAgICAgLy8gc2hvdWxkIGJlIGlnbm9yZWQgYW5kIG5vdCBnZXQgYSBy
ZW5kZXJlci4KLSAgICBDb250YWluZXJOb2RlKiBwID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChw
ICYmIHAtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkgewotICAgICAgICBpZiAoIXAtPnJlbmRlcmVy
KCkpCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgIGlmIChw
YXJlbnQgJiYgaXNIVE1MT2JqZWN0RWxlbWVudChwYXJlbnQpKSB7CisgICAgICAgIGlmICghcGFy
ZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IXRvSFRNTE9iamVjdEVsZW1lbnQocCktPnVzZUZhbGxiYWNrQ29udGVudCgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIXAtPnJlbmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSk7CisgICAgICAg
IGlmICghZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KCpwYXJlbnQpLnVzZUZhbGxiYWNrQ29u
dGVudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXBhcmVudC0+cmVuZGVyZXIoKS0+aXNFbWJl
ZGRlZE9iamVjdCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCmluZGV4IGRi
NTBiMjdhZjNjMGYzOWYyYzg0NjYyM2U0NWFmMmE0MTJhOTdmYjMuLjA0NjE5YjU4NzhjMzVjMDFh
OGRiNDhiYmExN2YyNWE3ZjJkYjNiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxl
bWVudDo6cmVmcmVzaEVsZW1lbnRzSWZOZWVkZWQoKSBjb25zdAogCiAgICAgZm9yIChhdXRvJiBl
bGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxIVE1MRmllbGRT
ZXRFbGVtZW50Jj4oKnRoaXMpKSkgewogICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKG9i
amVjdFRhZykpCi0gICAgICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoJnRvSFRN
TE9iamVjdEVsZW1lbnQoZWxlbWVudCkpOworICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVu
dHMuYXBwZW5kKCZkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkpOwogICAgICAg
ICBlbHNlIGlmIChlbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICBt
X2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoJnRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVt
ZW50KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAKaW5kZXggYTMxZjkyNmU3YTdmY2RlNWVkMDk5NmYyMmViNWJhNTM1MDgzZDgxOS4u
MTJhY2ZiM2FjNTgyZmViYjU0MDY5ZGE0ZjJiNjczNTRiZWMwM2QxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xMDQsNyArMTA0LDcg
QEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlSXNEaXNhYmxlZEJ5RmllbGRz
ZXRBbmNlc3RvcigpIGNvbnN0CiAgICAgRWxlbWVudCogcHJldmlvdXNBbmNlc3RvciA9IG51bGxw
dHI7CiAgICAgZm9yIChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudEVsZW1lbnQoKTsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICBpZiAo
aXNIVE1MRmllbGRTZXRFbGVtZW50KGFuY2VzdG9yKSAmJiBhbmNlc3Rvci0+ZmFzdEhhc0F0dHJp
YnV0ZShkaXNhYmxlZEF0dHIpKSB7Ci0gICAgICAgICAgICBIVE1MRmllbGRTZXRFbGVtZW50JiBm
aWVsZFNldEFuY2VzdG9yID0gdG9IVE1MRmllbGRTZXRFbGVtZW50KCphbmNlc3Rvcik7CisgICAg
ICAgICAgICBIVE1MRmllbGRTZXRFbGVtZW50JiBmaWVsZFNldEFuY2VzdG9yID0gZG93bmNhc3Q8
SFRNTEZpZWxkU2V0RWxlbWVudD4oKmFuY2VzdG9yKTsKICAgICAgICAgICAgIGJvb2wgaXNJbkZp
cnN0TGVnZW5kID0gcHJldmlvdXNBbmNlc3RvciAmJiBpc0hUTUxMZWdlbmRFbGVtZW50KHByZXZp
b3VzQW5jZXN0b3IpICYmIHByZXZpb3VzQW5jZXN0b3IgPT0gZmllbGRTZXRBbmNlc3Rvci5sZWdl
bmQoKTsKICAgICAgICAgICAgIHJldHVybiAhaXNJbkZpcnN0TGVnZW5kOwogICAgICAgICB9CkBA
IC0xOTMsNyArMTkzLDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQXV0b2ZvY3VzKEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHNldCBvZiBo
YXNUYWdOYW1lIGNoZWNrcyBiZSByZXBsYWNlZCBieSBhCiAgICAgLy8gdmlydHVhbCBtZW1iZXIg
ZnVuY3Rpb24/CiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
cmV0dXJuICF0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCktPmlzSW5wdXRUeXBlSGlkZGVuKCk7
CisgICAgICAgIHJldHVybiAhZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLmlz
SW5wdXRUeXBlSGlkZGVuKCk7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoc2VsZWN0VGFn
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoa2V5
Z2VuVGFnKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5jcHAKaW5kZXggNzdhZDc0MjM4ZjJkNDMxMGEyY2VkOTI0OGM4YzJhY2MwNjViMDBl
Ny4uNjhjMWRlZWYyNDc3MzI3MzFmN2UwNTM2YTAzMDA3NWRkZjNmOTdmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAKQEAgLTU2
LDE0ICs1NiwxNCBAQCBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZQogewogICAgIEFTU0VSVChpc0hU
TUxGb3JtRWxlbWVudChvd25lck5vZGUoKSkgfHwgb3duZXJOb2RlKCkuaGFzVGFnTmFtZShmaWVs
ZHNldFRhZykpOwogICAgIGlmIChpc0hUTUxGb3JtRWxlbWVudChvd25lck5vZGUoKSkpCi0gICAg
ICAgIHJldHVybiB0b0hUTUxGb3JtRWxlbWVudChvd25lck5vZGUoKSkuYXNzb2NpYXRlZEVsZW1l
bnRzKCk7Ci0gICAgcmV0dXJuIHRvSFRNTEZpZWxkU2V0RWxlbWVudChvd25lck5vZGUoKSkuYXNz
b2NpYXRlZEVsZW1lbnRzKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1l
bnQ+KG93bmVyTm9kZSgpKS5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4ob3duZXJOb2RlKCkpLmFzc29jaWF0ZWRFbGVtZW50cygp
OwogfQogCiBjb25zdCBWZWN0b3I8SFRNTEltYWdlRWxlbWVudCo+JiBIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbjo6Zm9ybUltYWdlRWxlbWVudHMoKSBjb25zdAogewogICAgIEFTU0VSVChpc0hU
TUxGb3JtRWxlbWVudChvd25lck5vZGUoKSkpOwotICAgIHJldHVybiB0b0hUTUxGb3JtRWxlbWVu
dChvd25lck5vZGUoKSkuaW1hZ2VFbGVtZW50cygpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1M
Rm9ybUVsZW1lbnQ+KG93bmVyTm9kZSgpKS5pbWFnZUVsZW1lbnRzKCk7CiB9CiAKIHN0YXRpYyB1
bnNpZ25lZCBmaW5kRm9ybUFzc29jaWF0ZWRFbGVtZW50KGNvbnN0IFZlY3RvcjxGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqPiYgZWxlbWVudHMsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggYzg4ZWFjOTUxZGUwMjkzYTU3MTk3
N2FhY2FiMjBmNzI3ZjlkYzMwYS4uNDU4OWI0Nzc3NTdmNmRiMmEzYjAzYzgyYjVmNjM1YTU5YzQ5
ZDhhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtMzE4LDcg
KzMxOCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMoU3RyaW5n
UGFpclZlY3RvciYgZmllbGROYW1lc0FuZFZhbHVlcykKICAgICAgICAgSFRNTEVsZW1lbnQmIGVs
ZW1lbnQgPSBjb250cm9sLmFzSFRNTEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFpc0hUTUxJbnB1
dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxl
bWVudCk7CiAgICAgICAgIGlmICghaW5wdXQuaXNUZXh0RmllbGQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBmaWVsZE5hbWVzQW5kVmFsdWVzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihpbnB1dC5uYW1lKCkuc3RyaW5nKCksIGlucHV0LnZhbHVlKCkpKTsKQEAgLTc0NSw3ICs3NDUs
NyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6YXNzZXJ0SXRlbUNhbkJlSW5QYXN0TmFtZXNNYXAo
Rm9ybU5hbWVkSXRlbSogaXRlbSkgY29uc3QKICAgICB9CiAKICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihlbGVtZW50Lmhhc1RhZ05hbWUoaW1nVGFnKSk7Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9pbWFnZUVsZW1lbnRzLmZpbmQoJnRvSFRNTElt
YWdlRWxlbWVudChlbGVtZW50KSkgIT0gbm90Rm91bmQpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKG1faW1hZ2VFbGVtZW50cy5maW5kKCZkb3duY2FzdDxIVE1MSW1hZ2VF
bGVtZW50PihlbGVtZW50KSkgIT0gbm90Rm91bmQpOwogfQogI2Vsc2UKIGlubGluZSB2b2lkIEhU
TUxGb3JtRWxlbWVudDo6YXNzZXJ0SXRlbUNhbkJlSW5QYXN0TmFtZXNNYXAoRm9ybU5hbWVkSXRl
bSopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAppbmRleCA3
MzhhOTE5OGU3OTFmNzkxZTI0ZjI3ZWY2YjBkZGZkMDQyYzU5YTNmLi4yOGNmMzAyN2IxYzZhMjg5
ZWNhMGE2NDlkZDYwMDVhMGI0ZGQzMTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAKQEAgLTE4MywxMyArMTgzLDEzIEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3Ry
CiAgICAgICAgIGlmIChuYW1lID09IG5hbWVBdHRyKSB7CiAgICAgICAgICAgICBib29sIHdpbGxI
YXZlTmFtZSA9ICF2YWx1ZS5pc051bGwoKTsKICAgICAgICAgICAgIGlmIChoYXNOYW1lKCkgIT0g
d2lsbEhhdmVOYW1lICYmIGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9IVE1MRG9j
dW1lbnQoJnRoaXMtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgICAgIEhUTUxEb2N1bWVudCYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KHRoaXMtPmRvY3VtZW50KCkpOwogICAg
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQgPSBnZXRJZEF0dHJpYnV0ZSgpOwog
ICAgICAgICAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpICYmIGlkICE9IGdldE5hbWVBdHRyaWJ1
dGUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAod2lsbEhhdmVOYW1lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQtPmFkZERvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCks
ICp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZERvY3VtZW50TmFt
ZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnJlbW92ZURvY3VtZW50TmFtZWRJdGVtKCpp
ZC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92
ZURvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9h
ZGVyLmNwcAppbmRleCAxODc5ZGJjMjk1MDRlYzIzMTM0NzkyZjczNWI2NTAxODEyYTZhOGQyLi5m
YjM0YzhjY2Q5MjA2NmY0ZTBmMDMzNmE4MWU3NWQzMjEyY2Q1YzViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSFRNTEltYWdl
TG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCiAgICAgfQogCiAgICAgaWYg
KGxvYWRFcnJvciAmJiBpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIHRv
SFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCgpKS5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKKyAg
ICAgICAgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQoKSkucmVuZGVyRmFsbGJh
Y2tDb250ZW50KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCmluZGV4IGE4ZWJhYTlkMzZkNjJhNTZmMDc5MmEzOGVlYWM1ZGQzYjkzODE5NTguLmUyZDU1
ZTMzNTE0NWJhMjk5Y2I3MjFmN2Q4ZGE3N2Q2Y2JkZTY1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTUxNSwxOCArMTUxNSwxNiBAQCBIVE1MRWxlbWVu
dCogSFRNTElucHV0RWxlbWVudDo6bGlzdCgpIGNvbnN0CiBIVE1MRGF0YUxpc3RFbGVtZW50KiBI
VE1MSW5wdXRFbGVtZW50OjpkYXRhTGlzdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hhc05vbkVt
cHR5TGlzdCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgaWYgKCFtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRWxlbWVudCogZWxl
bWVudCA9IHRyZWVTY29wZSgpLmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUobGlzdEF0
dHIpKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghZWxl
bWVudC0+aGFzVGFnTmFtZShkYXRhbGlzdFRhZykpCi0gICAgICAgIHJldHVybiAwOworICAgIGlm
ICghZWxlbWVudCB8fCAhaXNIVE1MRGF0YUxpc3RFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB0b0hUTUxEYXRhTGlzdEVsZW1lbnQoZWxlbWVu
dCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQ+KGVsZW1lbnQpOwog
fQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlc2V0TGlzdEF0dHJpYnV0ZVRhcmdldE9ic2Vy
dmVyKCkKQEAgLTE4NTUsNyArMTg1Myw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2V0dXBE
YXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMmCiAjaWYg
RU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgaWYgKEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRh
dGFMaXN0ID0gdGhpcy0+ZGF0YUxpc3QoKSkgewogICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IG9wdGlvbnMgPSBkYXRhTGlzdC0+b3B0aW9ucygpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChv
cHRpb25zLT5pdGVtKGkpKTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IEhU
TUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4ob3B0
aW9ucy0+aXRlbShpKSk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFpc1ZhbGlkVmFsdWUob3B0
aW9uLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHBh
cmFtZXRlcnMuc3VnZ2VzdGlvblZhbHVlcy5hcHBlbmQoc2FuaXRpemVWYWx1ZShvcHRpb24tPnZh
bHVlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKaW5kZXgg
NzE0YmRiMmUxYmQ4Y2FiM2E4ZjViZTFiY2M3MWNkMTQzMjQ3YmQ4NC4uMWY1ZDY3ZmM5NDBjNTkz
ZTJkYjZlODY4OTkxYWQ0MzMyNmI2YjJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5
Z2VuRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50
OjpzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogSFRNTFNlbGVj
dEVsZW1lbnQqIEhUTUxLZXlnZW5FbGVtZW50OjpzaGFkb3dTZWxlY3QoKSBjb25zdAogewogICAg
IFNoYWRvd1Jvb3QqIHJvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgcmV0dXJuIHJv
b3QgPyB0b0hUTUxTZWxlY3RFbGVtZW50KHJvb3QtPmZpcnN0Q2hpbGQoKSkgOiAwOworICAgIHJl
dHVybiByb290ID8gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KHJvb3QtPmZpcnN0Q2hpbGQo
KSkgOiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMZWdlbmRFbGVtZW50LmNwcAppbmRleCA1OTczYmMyMDczOWRhYWUyZGQ0NDIzNGEwY2NlMTYx
YjliZTMwZmNiLi4yZmI0ZDI1MGYyNTFiMGZmOTUyOWY4N2E4ZTg4NzgzMWFkN2VlNDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcApAQCAtNzksMTAgKzc5LDEw
IEBAIEhUTUxGb3JtRWxlbWVudCogSFRNTExlZ2VuZEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29u
c3QKICAgICAvLyBpdHMgcGFyZW50LCB0aGVuIHRoZSBmb3JtIGF0dHJpYnV0ZSBtdXN0IHJldHVy
biB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKICAgICAvLyBmb3JtIGF0dHJpYnV0ZSBvbiB0aGF0IGZp
ZWxkc2V0IGVsZW1lbnQuIE90aGVyd2lzZSwgaXQgbXVzdCByZXR1cm4gbnVsbC4KICAgICBDb250
YWluZXJOb2RlKiBmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoIWZpZWxkc2V0IHx8
ICFmaWVsZHNldC0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykpCi0gICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghZmllbGRzZXQgfHwgIWlzSFRNTEZpZWxkU2V0RWxlbWVudChmaWVsZHNldCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvSFRNTEZpZWxkU2V0RWxlbWVu
dChmaWVsZHNldCktPmZvcm0oKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxl
bWVudD4oKmZpZWxkc2V0KS5mb3JtKCk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggM2QyMWM1MmFmYTgzYjMyNjQ3
OGUxNmM0ZDlhMmJjNTdhY2Q4Mjg2YS4uZDM2OGJhZGE1ZGEwYmE2MmM2NTFhNDgxNjc0OTNlYjc5
MmYyNTdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0z
ODc2LDcgKzM4NzYsNyBAQCBVUkwgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNo
aWxkKENvbnRlbnRUeXBlKiBjb250ZW50VHlwZSwgU3RyaW5nKiBrZQogICAgIH0KIAogICAgIFVS
TCBtZWRpYVVSTDsKLSAgICBIVE1MU291cmNlRWxlbWVudCogc291cmNlID0gMDsKKyAgICBIVE1M
U291cmNlRWxlbWVudCogc291cmNlID0gbnVsbHB0cjsKICAgICBTdHJpbmcgdHlwZTsKICAgICBT
dHJpbmcgc3lzdGVtOwogICAgIGJvb2wgbG9va2luZ0ZvclN0YXJ0Tm9kZSA9IG1fbmV4dENoaWxk
Tm9kZVRvQ29uc2lkZXI7CkBAIC0zODk3LDcgKzM4OTcsNyBAQCBVUkwgSFRNTE1lZGlhRWxlbWVu
dDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKENvbnRlbnRUeXBlKiBjb250ZW50VHlwZSwgU3RyaW5n
KiBrZQogICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKCkgIT0gdGhpcykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIHNvdXJjZSA9IHRvSFRNTFNvdXJjZUVsZW1lbnQoJm5vZGUp
OworICAgICAgICBzb3VyY2UgPSBkb3duY2FzdDxIVE1MU291cmNlRWxlbWVudD4oJm5vZGUpOwog
CiAgICAgICAgIC8vIElmIGNhbmRpZGF0ZSBkb2VzIG5vdCBoYXZlIGEgc3JjIGF0dHJpYnV0ZSwg
b3IgaWYgaXRzIHNyYyBhdHRyaWJ1dGUncyB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nIC4uLiBq
dW1wIGRvd24gdG8gdGhlIGZhaWxlZCBzdGVwIGJlbG93CiAgICAgICAgIG1lZGlhVVJMID0gc291
cmNlLT5nZXROb25FbXB0eVVSTEF0dHJpYnV0ZShzcmNBdHRyKTsKQEAgLTQ4ODMsOSArNDg4Myw5
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKICAgICBpZiAoaGFz
TWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVudGVyZWRGdWxsc2Ny
ZWVuKCk7CiAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0
aGlzKSkgewotICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9F
bGVtZW50KHRoaXMpOworICAgICAgICBIVE1MVmlkZW9FbGVtZW50JiBhc1ZpZGVvID0gZG93bmNh
c3Q8SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpOwogICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkpIHsKLSAgICAg
ICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5lbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudChhc1ZpZGVvKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCku
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxl
bWVudCgmYXNWaWRlbyk7CiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS53
ZWJraXRiZWdpbmZ1bGxzY3JlZW5FdmVudCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKaW5kZXggNjYwMTc0NjBiY2FlMjkzYTVl
NDYyZDdhYjg2N2QxMDkzYWI1NTlkOS4uZmVmNDFmZGRlM2VjZmRlOWE0OGM0YWMxNGVlYmI5NTJl
MTljMDY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcApA
QCAtNjYsMTQgKzY2LDE0IEBAIGJvb2wgV2luZG93TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRj
aGVzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0CiBib29sIERvY3VtZW50
TmFtZUNvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gZml4IEhUTUxJbWFn
ZUVsZW1lbnQgdG8gdXBkYXRlIHRoZSBoYXNoIG1hcCBmb3IgdXMgd2hlbiBuYW1lIGF0dHJpYnV0
ZSBoYXMgYmVlbiByZW1vdmVkLgotICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0
VGFnKSB8fCAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYgdG9IVE1MT2JqZWN0RWxl
bWVudChlbGVtZW50KS5pc0RvY05hbWVkSXRlbSgpKQorICAgIHJldHVybiBlbGVtZW50Lmhhc1Rh
Z05hbWUoYXBwbGV0VGFnKSB8fCAoaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSAmJiBkb3du
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0oKSkKICAgICAg
ICAgfHwgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50Lmhhc05hbWUoKSk7
CiB9CiAKIGJvb2wgRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNoZXNJZk5hbWVB
dHRyaWJ1dGVNYXRjaChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiBpc0hU
TUxGb3JtRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZShpZnJhbWVUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQuaGFzVGFn
TmFtZShhcHBsZXRUYWcpIHx8IChlbGVtZW50Lmhhc1RhZ05hbWUob2JqZWN0VGFnKSAmJiB0b0hU
TUxPYmplY3RFbGVtZW50KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCkpCisgICAgICAgIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IChpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1l
bnQpICYmIGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KS5pc0RvY05hbWVkSXRl
bSgpKQogICAgICAgICB8fCBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCk7CiB9CiAKQEAgLTg1
LDggKzg1LDggQEAgYm9vbCBEb2N1bWVudE5hbWVDb2xsZWN0aW9uOjplbGVtZW50TWF0Y2hlcyhj
b25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWMKICAgICAgICAgcmV0dXJuIGVsZW1l
bnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lOwogICAgIGlmIChlbGVtZW50Lmhh
c1RhZ05hbWUoYXBwbGV0VGFnKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0TmFtZUF0dHJp
YnV0ZSgpLmltcGwoKSA9PSBuYW1lIHx8IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkg
PT0gbmFtZTsKLSAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAg
IHJldHVybiAoZWxlbWVudC5nZXROYW1lQXR0cmlidXRlKCkuaW1wbCgpID09IG5hbWUgfHwgZWxl
bWVudC5nZXRJZEF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1lKSAmJiB0b0hUTUxPYmplY3RFbGVt
ZW50KGVsZW1lbnQpLmlzRG9jTmFtZWRJdGVtKCk7CisgICAgaWYgKGlzSFRNTE9iamVjdEVsZW1l
bnQoZWxlbWVudCkpCisgICAgICAgIHJldHVybiAoZWxlbWVudC5nZXROYW1lQXR0cmlidXRlKCku
aW1wbCgpID09IG5hbWUgfHwgZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLmltcGwoKSA9PSBuYW1l
KSAmJiBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuaXNEb2NOYW1lZEl0ZW0o
KTsKICAgICBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZWxlbWVudC5nZXROYW1lQXR0cmlidXRlKCkuaW1wbCgpID09IG5hbWUgfHwgKGVsZW1lbnQuZ2V0
SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gbmFtZSAmJiBlbGVtZW50Lmhhc05hbWUoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApp
bmRleCA5MTc3ZWFhMzBkYWY5Yzk1OGFhNzA0ZmU3YmFjZmFmZmZkODZkNWExLi5jMDVhNDA1ZmYw
MmFiMjhhZmU0MjRjY2YxMWZkZmM2YjlmZmIxY2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcApAQCAtNDM2LDIyICs0MzYsMjIgQEAgdm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6dXBkYXRlRG9jTmFtZWRJdGVtKCkKICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKICAgICB9CiAgICAgaWYgKGlzTmFtZWRJdGVtICE9IHdhc05hbWVkSXRlbSAm
JiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAg
IEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSB0b0hUTUxEb2N1bWVudCgmdGhpcy0+ZG9jdW1lbnQo
KSk7CisgICAgICAgIEhUTUxEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxIVE1MRG9jdW1l
bnQ+KHRoaXMtPmRvY3VtZW50KCkpOwogCiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQg
PSBnZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgaWYgKGlzTmFtZWRJdGVtKQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5hZGREb2N1
bWVudE5hbWVkSXRlbSgqaWQuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQuYWRkRG9jdW1lbnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRoaXMpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgq
aWQuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRG9jdW1l
bnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZ2V0TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICBpZiAo
IW5hbWUuaXNFbXB0eSgpICYmIGlkICE9IG5hbWUpIHsKICAgICAgICAgICAgIGlmIChpc05hbWVk
SXRlbSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+YWRkRG9jdW1lbnROYW1lZEl0ZW0oKm5h
bWUuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRG9jdW1lbnRO
YW1lZEl0ZW0oKm5hbWUuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZG9jdW1lbnQtPnJlbW92ZURvY3VtZW50TmFtZWRJdGVtKCpuYW1lLmltcGwoKSwg
KnRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZURvY3VtZW50TmFtZWRJdGVt
KCpuYW1lLmltcGwoKSwgKnRoaXMpOwogICAgICAgICB9CiAgICAgfQogICAgIG1fZG9jTmFtZWRJ
dGVtID0gaXNOYW1lZEl0ZW07CkBAIC00NjYsNyArNDY2LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxl
bWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KCkgY29uc3QKICAgICAgICAgaWYgKGNoaWxkLmhhc1Rh
Z05hbWUocGFyYW1UYWcpICYmIGVxdWFsSWdub3JpbmdDYXNlKGNoaWxkLmdldE5hbWVBdHRyaWJ1
dGUoKSwgInR5cGUiKQogICAgICAgICAgICAgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBw
bGV0TUlNRVR5cGUoY2hpbGQuZ2V0QXR0cmlidXRlKHZhbHVlQXR0cikuc3RyaW5nKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChjaGlsZC5oYXNUYWdOYW1lKG9iamVj
dFRhZykgJiYgdG9IVE1MT2JqZWN0RWxlbWVudChjaGlsZCkuY29udGFpbnNKYXZhQXBwbGV0KCkp
CisgICAgICAgIGlmIChjaGlsZC5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYgZG93bmNhc3Q8SFRN
TE9iamVjdEVsZW1lbnQ+KGNoaWxkKS5jb250YWluc0phdmFBcHBsZXQoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShhcHBsZXRUYWcpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3Jv
dXBFbGVtZW50LmNwcAppbmRleCBjMGFiNzBkOGVlNjk5NDdjZTRhOTkyYzgxMzNiYWNlOGUzMTAz
MGZhLi45NWQ2YWJjMWZlZTYzYmU5MDg3MmEyNTBjMGUzNzY0ZTA4YzFlMjE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAgLTg2LDEwICs4NiwxMCBA
QCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pYwogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpyZWNh
bGNTZWxlY3RPcHRpb25zKCkKIHsKICAgICBDb250YWluZXJOb2RlKiBzZWxlY3QgPSBwYXJlbnRO
b2RlKCk7Ci0gICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKHNlbGVjdFRh
ZykpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAhaXNIVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpKQog
ICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQot
ICAgICAgICB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdCktPnNldFJlY2FsY0xpc3RJdGVtcygp
OworICAgICAgICBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdCkuc2V0UmVjYWxj
TGlzdEl0ZW1zKCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91cExhYmVs
VGV4dCgpIGNvbnN0CkBAIC0xMDcsMTMgKzEwNywxMyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxl
bWVudDo6Z3JvdXBMYWJlbFRleHQoKSBjb25zdAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRH
cm91cEVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQ29udGFpbmVy
Tm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVj
dC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzSFRNTFNl
bGVjdEVsZW1lbnQoc2VsZWN0KSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2Rl
KCk7CiAgICAgCiAgICAgaWYgKCFzZWxlY3QpCi0gICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVj
dCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PihzZWxlY3QpOwogfQog
CiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAppbmRleCBhNmIxNDcwNTk2NGE1NGZi
MTg4NDA3ZmI3NzMwMDBjZDY3YzY0ODc3Li4xYWI3YTA0MDhiZjRmOGFiY2RkYWNlN2MyMWIxYWU3
OTlkZDAyNDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcApA
QCAtMjU3LDIzICsyNTcsMjMgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCiBIVE1MRGF0YUxpc3RFbGVtZW50KiBIVE1M
T3B0aW9uRWxlbWVudDo6b3duZXJEYXRhTGlzdEVsZW1lbnQoKSBjb25zdAogewogICAgIGZvciAo
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQgOyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGRh
dGFsaXN0VGFnKSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxEYXRhTGlzdEVsZW1lbnQocGFy
ZW50KTsKKyAgICAgICAgaWYgKGlzSFRNTERhdGFMaXN0RWxlbWVudChwYXJlbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQ+KHBhcmVudCk7CiAgICAg
fQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogI2VuZGlmCiAKIEhUTUxT
ZWxlY3RFbGVtZW50KiBIVE1MT3B0aW9uRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50KCkgY29u
c3QKIHsKICAgICBDb250YWluZXJOb2RlKiBzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hp
bGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpCisgICAgd2hpbGUg
KHNlbGVjdCAmJiAhaXNIVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpKQogICAgICAgICBzZWxlY3Qg
PSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKIAogICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0
RWxlbWVudChzZWxlY3QpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4o
c2VsZWN0KTsKIH0KIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKaW5kZXggZjFk
ZjRjNDFlZjBkYmI2MTIyMGU1NDE5ZWNkMDI4MThiODUyZjBhZi4uZjI5MjEyZDViNmY5YTQ1OTIw
MGMyMWI1OWUzMzQwOTdmZjEyM2I5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmNwcApAQCAtNTgsOSArNTgsOSBAQCB2b2lkIEhUTUxPcHRpb25zQ29s
bGVjdGlvbjo6YWRkKFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGVsZW1lbnQsIGludCBp
bmRleAogICAgIGVjID0gMDsKIAogICAgIGlmIChpbmRleCA9PSAtMSB8fCB1bnNpZ25lZChpbmRl
eCkgPj0gbGVuZ3RoKCkpCi0gICAgICAgIHNlbGVjdEVsZW1lbnQoKS5hZGQobmV3T3B0aW9uLCAw
LCBlYyk7CisgICAgICAgIHNlbGVjdEVsZW1lbnQoKS5hZGQobmV3T3B0aW9uLCBudWxscHRyLCBl
Yyk7CiAgICAgZWxzZQotICAgICAgICBzZWxlY3RFbGVtZW50KCkuYWRkKG5ld09wdGlvbiwgdG9I
VE1MT3B0aW9uRWxlbWVudChpdGVtKGluZGV4KSksIGVjKTsKKyAgICAgICAgc2VsZWN0RWxlbWVu
dCgpLmFkZChuZXdPcHRpb24sIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihpdGVtKGluZGV4
KSksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmgKaW5kZXggMWM1ZTY4ODliZjg1OWFjOTU5OWZlMGY3MzgwMTIx
ZGVhNDUxOGQ2Yy4uOWM3OTI1NjVlMTRhYTUzMmE4NmM5OTM5MGVjMDQ1NGViNDc4YTg4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCkBAIC0zNyw4ICsz
Nyw4IEBAIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVjdGlvbiBmaW5hbCA6IHB1YmxpYyBIVE1MQ29s
bGVjdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWY8SFRNTE9wdGlvbnNDb2xsZWN0
aW9uPiBjcmVhdGUoSFRNTFNlbGVjdEVsZW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIHsgcmV0dXJuIHRvSFRNTFNlbGVjdEVs
ZW1lbnQob3duZXJOb2RlKCkpOyB9Ci0gICAgY29uc3QgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVj
dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KG93bmVyTm9kZSgp
KTsgfQorICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50KCkgeyByZXR1cm4gZG93
bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQorICAgIGNvbnN0IEhUTUxT
ZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQogCiAgICAgdm9pZCBhZGQoUGFzc1JlZlB0
cjxIVE1MT3B0aW9uRWxlbWVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGFkZChQYXNz
UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCA0
OTZlZDViMDBhMGJjNGI4NjFmMWVmNWYzZmVhMzZhOWQxYjI0ODMwLi45OGY1Yzg1YzI2ZmFhMjMw
YzkzM2FkODY5MzYzZmQzZDg1YmYxMTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTQxNywxMSArNDE3LDExIEBAIHN0YXRpYyB2b2lk
IGFkZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50TGlzCiAgICAgICAgIGlmIChub2RlLT5pc1BsdWdpbkVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdJbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5F
bGVtZW50KG5vZGUpOwogICAgICAgICAgICAgaWYgKHBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1h
Z2VFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBw
bHVnSW5JbWFnZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgVVJMJiBsb2FkZWRVUkwgPSBwbHVnSW5JbWFnZUVsZW1lbnQtPmxv
YWRlZFVybCgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBvdGhlck1pbWVUeXBlID0gcGx1Z0lu
SW1hZ2VFbGVtZW50LT5sb2FkZWRNaW1lVHlwZSgpOworICAgICAgICAgICAgICAgIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBVUkwmIGxvYWRlZFVS
TCA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRVcmwoKTsKKyAgICAgICAgICAgICAgICBTdHJp
bmcgb3RoZXJNaW1lVHlwZSA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRNaW1lVHlwZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChwbHVnSW5PcmlnaW4gPT0gbG9hZGVkVVJMLmhvc3QoKSAmJiBt
aW1lVHlwZSA9PSBvdGhlck1pbWVUeXBlKQotICAgICAgICAgICAgICAgICAgICBwbHVnSW5MaXN0
LmFwcGVuZChwbHVnSW5JbWFnZUVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBwbHVnSW5M
aXN0LmFwcGVuZCgmcGx1Z0luSW1hZ2VFbGVtZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXgg
NDE0Mjc1OTc4MGYwZGJiYjkyMjc5NzY0NTExNDEzNTM0MzI1YTI2MC4uNDgyYjgyZjg1YWM2MjIw
ZTM5OWJlMjhjYjM0ZDI0YzFjMWEzMmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAKQEAgLTE0OSw4ICsxNDksOCBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50
OjpoYXNQbGFjZWhvbGRlckxhYmVsT3B0aW9uKCkgY29uc3QKICAgICBBU1NFUlQobGlzdEluZGV4
ID49IDApOwogICAgIGlmIChsaXN0SW5kZXggPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobGlzdEl0
ZW1zKClbbGlzdEluZGV4XSk7Ci0gICAgcmV0dXJuICFsaXN0SW5kZXggJiYgb3B0aW9uLT52YWx1
ZSgpLmlzRW1wdHkoKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXMoKVtsaXN0SW5kZXhdKTsKKyAgICByZXR1cm4g
IWxpc3RJbmRleCAmJiBvcHRpb24udmFsdWUoKS5pc0VtcHR5KCk7CiB9CiAKIFN0cmluZyBIVE1M
U2VsZWN0RWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdApAQCAtMjUxLDcgKzI1MSw3
IEBAIFN0cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUoKSBjb25zdAogewogICAgIGZvciAo
YXV0byogaXRlbSA6IGxpc3RJdGVtcygpKSB7CiAgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVt
ZW50KCppdGVtKSkgewotICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IHRv
SFRNTE9wdGlvbkVsZW1lbnQoKml0ZW0pOworICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQm
IG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbSk7CiAgICAgICAgICAg
ICBpZiAob3B0aW9uLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52
YWx1ZSgpOwogICAgICAgICB9CkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKICAgICB1bnNpZ25lZCBvcHRpb25J
bmRleCA9IDA7CiAgICAgZm9yIChhdXRvKiBpdGVtIDogbGlzdEl0ZW1zKCkpIHsKICAgICAgICAg
aWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoKml0ZW0pKSB7Ci0gICAgICAgICAgICBpZiAodG9IVE1M
T3B0aW9uRWxlbWVudCgqaXRlbSkudmFsdWUoKSA9PSB2YWx1ZSkgeworICAgICAgICAgICAgaWYg
KGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbSkudmFsdWUoKSA9PSB2YWx1ZSkgewog
ICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgob3B0aW9uSW5kZXgpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigpCiAgICAgY29uc3QgVmVjdG9yPEhU
TUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChpc0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PnNlbGVjdGVkKCkpOworICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQoaXNI
VE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
ZWxlbWVudCktPnNlbGVjdGVkKCkpOwogICAgIH0KIH0KIApAQCAtNjIwLDcgKzYyMCw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBp
bmRleCkKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgbV9jYWNoZWRT
dGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50
KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKTsKKyAgICAgICAg
bV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQoaXNIVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCktPnNlbGVj
dGVkKCkpOwogICAgIH0KIH0KIApAQCAtNjQ0LDE1ICs2NDQsMTUgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbihib29sIGRlc2VsZWN0T3RoZXJPcHRpb25z
KQogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBpZiAoIWlzSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCkgfHwgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgICAgIGlmICghaXNIVE1MT3B0aW9uRWxlbWVudChl
bGVtZW50KSB8fCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLmlzRGlzYWJs
ZWRGb3JtQ29udHJvbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGkg
Pj0gc3RhcnQgJiYgaSA8PSBlbmQpCi0gICAgICAgICAgICB0b0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpLT5zZXRTZWxlY3RlZFN0YXRlKG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUpOworICAgICAg
ICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0
YXRlKG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUpOwogICAgICAgICBlbHNlIGlmIChkZXNlbGVjdE90
aGVyT3B0aW9ucyB8fCBpID49IG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uc2l6ZSgp
KQotICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRT
dGF0ZShmYWxzZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVs
ZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZXRTZWxlY3RlZFN0YXRlKG1fY2FjaGVk
U3RhdGVGb3JBY3RpdmVTZWxlY3Rpb25baV0pOworICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKG1fY2FjaGVkU3RhdGVGb3JB
Y3RpdmVTZWxlY3Rpb25baV0pOwogICAgIH0KIAogICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7CkBA
IC02NzYsNyArNjc2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdl
KCkKICAgICBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVu
dCA9IGl0ZW1zW2ldOwotICAgICAgICBib29sIHNlbGVjdGVkID0gaXNIVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpOwor
ICAgICAgICBib29sIHNlbGVjdGVkID0gaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiBk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CiAgICAgICAg
IGlmIChzZWxlY3RlZCAhPSBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbltpXSkKICAgICAgICAgICAg
IGZpcmVPbkNoYW5nZSA9IHRydWU7CiAgICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ld
ID0gc2VsZWN0ZWQ7CkBAIC04MDIsMTUgKzgwMiwxNSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpyZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcykgY29uc3QKICAgICAg
ICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50KTsKIAogICAgICAgICAgICAgaWYgKHVw
ZGF0ZVNlbGVjdGVkU3RhdGVzICYmICFtX211bHRpcGxlKSB7Ci0gICAgICAgICAgICAgICAgSFRN
TE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoY3VycmVudCk7Cisg
ICAgICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50PigqY3VycmVudCk7CiAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdE9wdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RPcHRpb24gPSBvcHRpb247Ci0gICAgICAgICAg
ICAgICAgaWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBmaXJz
dE9wdGlvbiA9ICZvcHRpb247CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNlbGVjdGVkKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmRTZWxlY3RlZC0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQgPSBvcHRpb247Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChtX3NpemUgPD0gMSAmJiAhZm91bmRTZWxlY3RlZCAmJiAhb3B0aW9uLT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVk
ID0gb3B0aW9uOworICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gJm9wdGlvbjsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc2l6ZSA8PSAxICYmICFmb3VuZFNlbGVjdGVk
ICYmICFvcHRpb24uaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmRTZWxlY3RlZCA9ICZvcHRpb247CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kU2Vs
ZWN0ZWQtPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtODQxLDcgKzg0MSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0
ZWRJbmRleCgpIGNvbnN0CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7
ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwogICAgICAg
ICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgaWYgKHRv
SFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpCisgICAgICAgICAgICBpZiAo
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0K
QEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RPcHRpb24o
aW50IG9wdGlvbkluZGV4LCBTZWxlY3RPcHRpb25GbGFncyBmbGFncykKICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4
ID0gb3B0aW9uVG9MaXN0SW5kZXgob3B0aW9uSW5kZXgpOwogCi0gICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSAwOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAo
bGlzdEluZGV4ID49IDApIHsKICAgICAgICAgZWxlbWVudCA9IGl0ZW1zW2xpc3RJbmRleF07CiAg
ICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7CkBAIC04ODEsNyArODgx
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0T3B0aW9uKGludCBvcHRpb25JbmRl
eCwgU2VsZWN0T3B0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU2Vs
ZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsKICAgICAgICAgICAgIGlmIChtX2FjdGl2ZVNl
bGVjdGlvbkVuZEluZGV4IDwgMCB8fCBzaG91bGREZXNlbGVjdCkKICAgICAgICAgICAgICAgICBz
ZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgpOwotICAgICAgICAgICAgdG9IVE1M
T3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0
ZSh0cnVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTY5LDcgKzk2OSw3IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbihIVE1MRWxlbWVu
dCogZXhjbHVkZUVsZW1lCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07CiAgICAg
ICAgIGlmIChlbGVtZW50ICE9IGV4Y2x1ZGVFbGVtZW50ICYmIGlzSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCkpCi0gICAgICAgICAgICB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZXRT
ZWxlY3RlZFN0YXRlKGZhbHNlKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogfQogCkBAIC05
ODEsMTAgKzk4MSwxMCBAQCBGb3JtQ29udHJvbFN0YXRlIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZl
Rm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIGlmICghaXNIVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlv
biA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwotICAgICAgICBpZiAoIW9wdGlvbi0+
c2VsZWN0ZWQoKSkKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25jYXN0
PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pOworICAgICAgICBpZiAoIW9wdGlvbi5zZWxl
Y3RlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YXRlLmFwcGVuZChvcHRp
b24tPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5hcHBlbmQob3B0aW9uLnZhbHVlKCkpOwogICAg
ICAgICBpZiAoIW11bHRpcGxlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC05OTgs
NyArOTk4LDcgQEAgc2l6ZV90IEhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRpb25zRm9yVmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgc2l6ZV90IGxpc3QKICAgICBmb3IgKHNpemVfdCBpID0g
bGlzdEluZGV4U3RhcnQ7IGkgPCBsb29wRW5kSW5kZXg7ICsraSkgewogICAgICAgICBpZiAoIWlz
SFRNTE9wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICh0b0hUTUxPcHRpb25FbGVtZW50KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkK
KyAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pLnZhbHVl
KCkgPT0gdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9CiAgICAgcmV0dXJuIG5v
dEZvdW5kOwpAQCAtMTAxNiwxMyArMTAxNiwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpy
ZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3JtQ29udHJvbFN0YXRlJiBzdGF0ZSkKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zU2l6ZTsgKytpKSB7CiAgICAgICAgIGlmICgh
aXNIVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tpXSktPnNldFNlbGVjdGVkU3RhdGUoZmFs
c2UpOworICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKS5zZXRT
ZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoIW11bHRpcGxlKCkpIHsKICAg
ICAgICAgc2l6ZV90IGZvdW5kSW5kZXggPSBzZWFyY2hPcHRpb25zRm9yVmFsdWUoc3RhdGVbMF0s
IDAsIGl0ZW1zU2l6ZSk7CiAgICAgICAgIGlmIChmb3VuZEluZGV4ICE9IG5vdEZvdW5kKQotICAg
ICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tmb3VuZEluZGV4XSktPnNldFNlbGVj
dGVkU3RhdGUodHJ1ZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
Kml0ZW1zW2ZvdW5kSW5kZXhdKS5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHNpemVfdCBzdGFydEluZGV4ID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGF0ZS52YWx1ZVNpemUoKTsgKytpKSB7CkBAIC0xMDMyLDcgKzEwMzIsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3Jt
Q29udHJvbFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gc2VhcmNo
T3B0aW9uc0ZvclZhbHVlKHZhbHVlLCAwLCBzdGFydEluZGV4KTsKICAgICAgICAgICAgIGlmIChm
b3VuZEluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgdG9IVE1MT3B0aW9uRWxlbWVudChpdGVtc1tmb3VuZEluZGV4XSktPnNldFNlbGVjdGVk
U3RhdGUodHJ1ZSk7CisgICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0
ZW1zW2ZvdW5kSW5kZXhdKS5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgICAgICAgICAgc3Rh
cnRJbmRleCA9IGZvdW5kSW5kZXggKyAxOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA2MSw4ICsx
MDYxLDggQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFM
aXN0JiBsaXN0LCBib29sKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0g
ICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkgJiYgIXRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVu
dCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZERh
dGEobmFtZSwgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dmFsdWUoKSk7CisgICAgICAg
IGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSAmJiAhZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgeworICAgICAgICAgICAgbGlz
dC5hcHBlbmREYXRhKG5hbWUsIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
dmFsdWUoKSk7CiAgICAgICAgICAgICBzdWNjZXNzZnVsID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0KQEAgLTEwNzUsOCArMTA3NSw4IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZv
cm1EYXRhKEZvcm1EYXRhTGlzdCYgbGlzdCwgYm9vbCkKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cmVzZXQoKQogewotICAgIEhUTUxPcHRpb25FbGVtZW50KiBmaXJzdE9wdGlvbiA9IDA7Ci0g
ICAgSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGVjdGVkT3B0aW9uID0gMDsKKyAgICBIVE1MT3B0aW9u
RWxlbWVudCogZmlyc3RPcHRpb24gPSBudWxscHRyOworICAgIEhUTUxPcHRpb25FbGVtZW50KiBz
ZWxlY3RlZE9wdGlvbiA9IG51bGxwdHI7CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyArK2kpIHsKQEAgLTEwODQsMTYgKzEwODQsMTcgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6cmVzZXQoKQogICAgICAgICBpZiAoIWlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVu
dCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoaXRlbXNbaV0tPmZhc3RI
YXNBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyKSkgeworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYg
b3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KTsKKyAgICAgICAg
aWYgKG9wdGlvbi5mYXN0SGFzQXR0cmlidXRlKHNlbGVjdGVkQXR0cikpIHsKICAgICAgICAgICAg
IGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhbV9tdWx0aXBsZSkKICAgICAgICAgICAgICAgICBzZWxl
Y3RlZE9wdGlvbi0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7Ci0gICAgICAgICAgICB0b0hUTUxP
cHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwotICAgICAgICAg
ICAgc2VsZWN0ZWRPcHRpb24gPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpOworICAgICAg
ICAgICAgb3B0aW9uLnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgICAgICAgICBzZWxlY3Rl
ZE9wdGlvbiA9ICZvcHRpb247CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdG9IVE1MT3B0
aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAg
ICBvcHRpb24uc2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAKICAgICAgICAgaWYgKCFmaXJzdE9w
dGlvbikKLSAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVt
ZW50KTsKKyAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gJm9wdGlvbjsKICAgICB9CiAKICAgICBp
ZiAoIXNlbGVjdGVkT3B0aW9uICYmIGZpcnN0T3B0aW9uICYmICFtX211bHRpcGxlICYmIG1fc2l6
ZSA8PSAxKQpAQCAtMTI5OSwxMCArMTMwMCwxMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1
cGRhdGVTZWxlY3RlZFN0YXRlKGludCBsaXN0SW5kZXgsIGJvb2wgbXVsdGksIGJvb2wgc2hpZgog
ICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGNsaWNrZWRFbGVtZW50KSkgewogICAgICAgICAv
LyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgYW4gYWN0aXZlIHNlbGVjdGlvbiAobGlrZSBkdXJpbmcg
ZHJhZwogICAgICAgICAvLyBzZWxlY3Rpb24pLCBzaG91bGQgc2VsZWN0IG9yIGRlc2VsZWN0Lgot
ICAgICAgICBpZiAodG9IVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCktPnNlbGVjdGVk
KCkgJiYgbXVsdGlTZWxlY3QpCisgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKmNsaWNrZWRFbGVtZW50KS5zZWxlY3RlZCgpICYmIG11bHRpU2VsZWN0KQogICAgICAgICAg
ICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9IGZhbHNlOwogICAgICAgICBpZiAoIW1fYWN0aXZl
U2VsZWN0aW9uU3RhdGUpCi0gICAgICAgICAgICB0b0hUTUxPcHRpb25FbGVtZW50KGNsaWNrZWRF
bGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNl
KTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW55IHNwZWNpYWwgbXVsdGlwbGUg
c2VsZWN0aW9uIG1vZGUsIHRoZW4gZGVzZWxlY3QgYWxsCkBAIC0xMzE3LDggKzEzMTgsOCBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKGludCBsaXN0SW5kZXgs
IGJvb2wgbXVsdGksIGJvb2wgc2hpZgogICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleChzZWxlY3RlZEluZGV4KCkpOwogCiAgICAgLy8gU2V0IHRoZSBzZWxlY3Rpb24gc3RhdGUg
b2YgdGhlIGNsaWNrZWQgb3B0aW9uLgotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGNsaWNr
ZWRFbGVtZW50KSAmJiAhdG9IVE1MT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCktPmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpKQotICAgICAgICB0b0hUTUxPcHRpb25FbGVtZW50KGNsaWNrZWRF
bGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKKyAgICBpZiAoaXNIVE1MT3B0aW9uRWxl
bWVudChjbGlja2VkRWxlbWVudCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqY2xp
Y2tlZEVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKHRydWUp
OwogCiAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIHNlbGVjdGVkSW5kZXgoKSBmb3IgdGhlIHByZXZp
b3VzIGluaXRpYWxpemF0aW9uLCBvciBJZgogICAgIC8vIHdlJ3JlIGRvaW5nIGEgc2luZ2xlIHNl
bGVjdGlvbiwgb3IgYSBtdWx0aXBsZSBzZWxlY3Rpb24gKHVzaW5nIGNtZCBvcgpAQCAtMTUzOCw3
ICsxNTM5LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5kZXgo
KSBjb25zdAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVt
cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSBpdGVtcy5zaXplKCk7IGk7KSB7CiAgICAgICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbLS1pXTsKLSAgICAgICAgaWYgKGlzSFRNTE9wdGlv
bkVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0
ZWQoKSkKKyAgICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICAgICAg
cmV0dXJuIGk7CiAgICAgfQogICAgIHJldHVybiAtMTsKQEAgLTE1NTksOSArMTU2MCw5IEBAIFN0
cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0CiAg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAg
CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpbmRleF07Ci0gICAgaWYgKCFpc0hU
TUxPcHRpb25FbGVtZW50KGVsZW1lbnQpIHx8IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmICghaXNIVE1MT3B0aW9uRWxlbWVudChl
bGVtZW50KSB8fCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLmlzRGlzYWJs
ZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHRv
SFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFi
ZWwoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50
ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCkBAIC0xNTk2LDggKzE1
OTcsOCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4
KGludCBpbmRleCkKICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKICAgICAgICAgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBpdGVtc1tsaXN0SW5kZXhdOwogICAgICAgICBpZiAoaXNIVE1MT3B0aW9u
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgaWYgKHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCktPnNlbGVjdGVkKCkpCi0gICAgICAgICAgICAgICAgdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICBpZiAoZG93
bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQorICAgICAgICAg
ICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRT
dGF0ZShmYWxzZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2VsZWN0T3B0
aW9uKGluZGV4LCBEaXNwYXRjaENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAppbmRleCBmNjVjYjAw
ODE5NjZlM2M5Yjc1NjU5ODc3MWFjMTVmZDRlYmNjMWM3Li5iMWU0ZWVlYjJjNjA1N2ZmMmYyY2Yz
NDNjNzFjMzc3OTJjNmExZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
dW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVs
ZW1lbnQuY3BwCkBAIC04Nyw4ICs4Nyw4IEBAIEhUTUxEZXRhaWxzRWxlbWVudCogSFRNTFN1bW1h
cnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbWF5RGV0YWls
cyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBhcmVudCh0aGlzKTsKICAgICBpZiAoIW1heURl
dGFpbHMgfHwgIW1heURldGFpbHMtPmhhc1RhZ05hbWUoZGV0YWlsc1RhZykpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiB0b0hUTUxEZXRhaWxzRWxlbWVudChtYXlEZXRhaWxzKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxEZXRhaWxzRWxl
bWVudD4obWF5RGV0YWlscyk7CiB9CiAKIGJvb2wgSFRNTFN1bW1hcnlFbGVtZW50Ojppc01haW5T
dW1tYXJ5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCmlu
ZGV4IDU5ZmVlYmU1MzVlNGVkYzgyNmEzYzRmZGE2YzM1MDZmOGZmYjUxYjkuLmFiNzAxZjMyNGNm
MjZlYzQyZWU2MWViZDkwOWU5NzdiZjIxOWVhMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVFbGVtZW50LmNwcApAQCAtNzAsMTAgKzcwLDEwIEBAIFBhc3NSZWZQdHI8SFRNTFRhYmxl
RWxlbWVudD4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogSFRNTFRhYmxlRWxlbWVudDo6Y2FwdGlvbigp
IGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKGNhcHRpb25UYWcpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQoY2hpbGQpOworICAgICAgICBpZiAoaXNIVE1MVGFibGVDYXB0aW9uRWxlbWVudChjaGls
ZCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+
KGNoaWxkKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0Q2FwdGlvbihQYXNzUmVmUHRyPEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50PiBuZXdDYXB0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAKaW5kZXggZmM3ZTg1YTljODJmNDIw
NDAzNWM3NzYyNWYzNWYwMWMwYTg5YjZhMC4uZjUxMDgyNGVkYmE1YWFhN2RlMDQ0NjM3ZWJkM2Y0
NTUwMDk3NzQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVu
dC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgSFRNTFRhYmxlRWxlbWVudCogSFRNTFRhYmxlUGFydEVs
ZW1lbnQ6OmZpbmRQYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
ID0gcGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChwYXJlbnQgJiYgIWlzSFRNTFRhYmxlRWxlbWVu
dChwYXJlbnQpKQogICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLSAgICBy
ZXR1cm4gdG9IVE1MVGFibGVFbGVtZW50KHBhcmVudCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxUYWJsZUVsZW1lbnQ+KHBhcmVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd0VsZW1lbnQuY3BwCmluZGV4IDRjNGQ5NzkyY2MxMGQyNWZkODZlY2NkMGIxZTJk
MmQxZTNmYjcwODAuLjQ3ZmYzM2JkNzUzZGI0OTNlNjk0NTkzY2I2NTA3YjM0MjM3OGI0NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcApAQCAtNzAsNyAr
NzAsNyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25zdAogCiAgICAg
aW50IHJJbmRleCA9IDA7CiAKLSAgICBpZiAoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGhlYWQg
PSB0b0hUTUxUYWJsZUVsZW1lbnQodGFibGUpLT50SGVhZCgpKSB7CisgICAgaWYgKEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50KiBoZWFkID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxl
KS50SGVhZCgpKSB7CiAgICAgICAgIGZvciAoTm9kZSAqcm93ID0gaGVhZC0+Zmlyc3RDaGlsZCgp
OyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKHJvdyA9
PSB0aGlzKQogICAgICAgICAgICAgICAgIHJldHVybiBySW5kZXg7CkBAIC05MSw3ICs5MSw3IEBA
IGludCBIVE1MVGFibGVSb3dFbGVtZW50Ojpyb3dJbmRleCgpIGNvbnN0CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGZvb3QgPSB0b0hUTUxUYWJs
ZUVsZW1lbnQodGFibGUpLT50Rm9vdCgpKSB7CisgICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50KiBmb290ID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4oKnRhYmxlKS50Rm9vdCgpKSB7
CiAgICAgICAgIGZvciAoTm9kZSAqcm93ID0gZm9vdC0+Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9
IHJvdy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKHJvdyA9PSB0aGlzKQogICAg
ICAgICAgICAgICAgIHJldHVybiBySW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCmluZGV4IDdlNWY2NjQwNmZhNjRhMGNhYWQ1MGVkYTY1
MDlkZGQwMTkxYTlmZTEuLjA0YTk2MDQzNmUxMDU3NjE4NDM5N2Q4OTZhMzE2NWQ1ODljMWMxMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3Bw
CkBAIC05OCw3ICs5OCw3IEBAIEhUTUxUYWJsZVJvd0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xs
ZWN0aW9uOjpyb3dBZnRlcihIVE1MVGFibGVFbGVtZW50KiB0YWJsZSwKICAgICAgICAgY2hpbGQg
PSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhwcmV2aW91cy0+cGFyZW50Tm9kZSgpKTsK
ICAgICBmb3IgKDsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
Y2hpbGQpKSB7CiAgICAgICAgIGlmIChpc0hUTUxUYWJsZVJvd0VsZW1lbnQoY2hpbGQpKQotICAg
ICAgICAgICAgcmV0dXJuIHRvSFRNTFRhYmxlUm93RWxlbWVudChjaGlsZCk7CisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlUm93RWxlbWVudD4oY2hpbGQpOwogICAgICAgICBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBy
b3cgPSBjaGlsZHJlbk9mVHlwZTxIVE1MVGFibGVSb3dFbGVtZW50PigqY2hpbGQpLmZpcnN0KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdzsKQEAgLTEzMSw3ICsxMzEsNyBAQCBIVE1MVGFi
bGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6bGFzdFJvdyhIVE1MVGFibGVF
bGVtZW50KiB0YWJsZSkKIAogICAgIGZvciAoYXV0byogY2hpbGQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpsYXN0Q2hpbGQodGFibGUpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoY2hpbGQpKSB7CiAgICAgICAgIGlmIChpc0hUTUxUYWJsZVJvd0VsZW1lbnQo
Y2hpbGQpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTFRhYmxlUm93RWxlbWVudChjaGlsZCk7
CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlUm93RWxlbWVudD4oY2hpbGQp
OwogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSB7CiAgICAgICAgICAg
ICBpZiAoYXV0byogcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKmNo
aWxkKS5sYXN0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdzsKQEAgLTE2MSw3ICsxNjEs
NyBAQCBQYXNzUmVmPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dzQ29sbGVj
dGlvbjo6Y3JlYXRlKEhUTUxUYWJsZUVsZW1lbgogCiBFbGVtZW50KiBIVE1MVGFibGVSb3dzQ29s
bGVjdGlvbjo6Y3VzdG9tRWxlbWVudEFmdGVyKEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdAogewot
ICAgIHJldHVybiByb3dBZnRlcihjb25zdF9jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPigmdGFibGVF
bGVtZW50KCkpLCB0b0hUTUxUYWJsZVJvd0VsZW1lbnQocHJldmlvdXMpKTsKKyAgICByZXR1cm4g
cm93QWZ0ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oJnRhYmxlRWxlbWVudCgpKSwg
ZG93bmNhc3Q8SFRNTFRhYmxlUm93RWxlbWVudD4ocHJldmlvdXMpKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCmluZGV4IDYzMjJjMzU5
YjIyODg2NDQ3YzVhY2FlMjViZjZjN2IxNDRiZWFmM2MuLmY3Y2E2MDQ0NTFlOTc4YjYyNjA5YWE2
ZmRjZmRhZDJlYzYwOGEwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlUm93c0NvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJv
d3NDb2xsZWN0aW9uLmgKQEAgLTQwLDggKzQwLDggQEAgY2xhc3MgSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb24gZmluYWwgOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBjcmVhdGUoSFRNTFRhYmxlRWxlbWVu
dCYsIENvbGxlY3Rpb25UeXBlKTsKIAotICAgIEhUTUxUYWJsZUVsZW1lbnQmIHRhYmxlRWxlbWVu
dCgpIHsgcmV0dXJuIHRvSFRNTFRhYmxlRWxlbWVudChvd25lck5vZGUoKSk7IH0KLSAgICBjb25z
dCBIVE1MVGFibGVFbGVtZW50JiB0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0hUTUxU
YWJsZUVsZW1lbnQob3duZXJOb2RlKCkpOyB9CisgICAgSFRNTFRhYmxlRWxlbWVudCYgdGFibGVF
bGVtZW50KCkgeyByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4ob3duZXJOb2RlKCkp
OyB9CisgICAgY29uc3QgSFRNTFRhYmxlRWxlbWVudCYgdGFibGVFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4ob3duZXJOb2RlKCkpOyB9CiAKICAgICBz
dGF0aWMgSFRNTFRhYmxlUm93RWxlbWVudCogcm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCosIEhU
TUxUYWJsZVJvd0VsZW1lbnQqKTsKICAgICBzdGF0aWMgSFRNTFRhYmxlUm93RWxlbWVudCogbGFz
dFJvdyhIVE1MVGFibGVFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxh
dGVFbGVtZW50LmNwcAppbmRleCA2OTg5ZGZhNDU2MzVhYzI4N2Q3MGE1NjUwNTZkYWU2OTFjMTBh
MTQ3Li5mMTA4ODQ5MThiNjg3MDk3YmY4MTFiY2ZkODZhZDY3YWQwM2RiZjI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAKQEAgLTc1LDcgKzc1LDcgQEAg
UGFzc1JlZlB0cjxOb2RlPiBIVE1MVGVtcGxhdGVFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVw
KQogCiAgICAgUmVmUHRyPE5vZGU+IGNsb25lID0gY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuKCk7
CiAgICAgaWYgKG1fY29udGVudCkKLSAgICAgICAgY29udGVudCgpLT5jbG9uZUNoaWxkTm9kZXMo
dG9IVE1MVGVtcGxhdGVFbGVtZW50KGNsb25lLmdldCgpKS0+Y29udGVudCgpKTsKKyAgICAgICAg
Y29udGVudCgpLT5jbG9uZUNoaWxkTm9kZXMoZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4o
Y2xvbmUuZ2V0KCkpLT5jb250ZW50KCkpOwogICAgIHJldHVybiBjbG9uZS5yZWxlYXNlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKaW5kZXggOGNiMTUxYmEyOWZjYzdlOTk5ZGI0YTNkNDYyMDJhZDVmNWFmZmMwMS4uMzVm
OGVhZDVmM2JhY2I5NTc3OWQ3NjQ5M2I0NTU5ZjcxOGRiZTMxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTcxNyw3ICs3
MTcsNyBAQCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogZW5jbG9zaW5nVGV4dEZvcm1Db250
cm9sKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgRWxlbWVudCogYW5jZXN0b3IgPSBjb250YWluZXItPnNo
YWRvd0hvc3QoKTsKLSAgICByZXR1cm4gYW5jZXN0b3IgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgqYW5jZXN0b3IpID8gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChhbmNlc3Rv
cikgOiBudWxscHRyOworICAgIHJldHVybiBhbmNlc3RvciAmJiBpc0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KCphbmNlc3RvcikgPyBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dD4oYW5jZXN0b3IpIDogbnVsbHB0cjsKIH0KIAogc3RhdGljIGNvbnN0IEVsZW1lbnQqIHBhcmVu
dEhUTUxFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAppbmRleCA4ZDYzYWYzODFkNjhhMWU3MDE2YzNjZDBjMTc4M2IxZDhiNTdk
ZTIwLi41YmFiYjA1YjQyMjhmNWU3MmEwN2NkM2MyOGQ5YWJkNGRkZjI5ZTc5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKQEAgLTIxMSwxNCArMjExLDE0IEBAIHZvaWQgSW1h
Z2VEb2N1bWVudDo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQogewogICAgIFJlZlB0cjxFbGVt
ZW50PiByb290RWxlbWVudCA9IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNl
KTsKICAgICBhcHBlbmRDaGlsZChyb290RWxlbWVudCk7Ci0gICAgdG9IVE1MSHRtbEVsZW1lbnQo
cm9vdEVsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgZG93bmNhc3Q8SFRN
TEh0bWxFbGVtZW50Pigqcm9vdEVsZW1lbnQpLmluc2VydGVkQnlQYXJzZXIoKTsKIAogICAgIGZy
YW1lKCktPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRTdGFydCk7CiAKICAgICBS
ZWZQdHI8RWxlbWVudD4gYm9keSA9IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZh
bHNlKTsKICAgICBib2R5LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAibWFyZ2luOiAwcHgiKTsK
ICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNQREZNSU1FVHlwZShkb2N1bWVudCgpLmxvYWRl
cigpLT5yZXNwb25zZU1JTUVUeXBlKCkpKQotICAgICAgICB0b0hUTUxCb2R5RWxlbWVudChib2R5
LmdldCgpKS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciwgIndoaXRlIiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCk7CisgICAgICAgIGRvd25j
YXN0PEhUTUxCb2R5RWxlbWVudD4oKmJvZHkpLnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IsICJ3aGl0ZSIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpOwogICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGlsZChib2R5KTsKICAgICAKICAgICBSZWZQ
dHI8SW1hZ2VEb2N1bWVudEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IEltYWdlRG9jdW1lbnRFbGVt
ZW50OjpjcmVhdGUoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJl
bHNOb2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcApp
bmRleCAzMWY2NzVlMTliODBlOGYxOGMzYTU1OThkZDExNzExYzVjNmE3OTBjLi44YzI5NjIwNjBm
MmJkMDhlZGE2NzhiMGEwYjE0Y2VhYTRhNDU0NDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVs
c05vZGVMaXN0LmNwcApAQCAtNDUsNyArNDUsNyBAQCBMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05v
ZGVMaXN0KCkKICAgICAKIGJvb2wgTGFiZWxzTm9kZUxpc3Q6OmVsZW1lbnRNYXRjaGVzKEVsZW1l
bnQmIHRlc3ROb2RlKSBjb25zdAogewotICAgIHJldHVybiBpc0hUTUxMYWJlbEVsZW1lbnQodGVz
dE5vZGUpICYmIHRvSFRNTExhYmVsRWxlbWVudCh0ZXN0Tm9kZSkuY29udHJvbCgpID09ICZvd25l
ck5vZGUoKTsKKyAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50KHRlc3ROb2RlKSAmJiBkb3du
Y2FzdDxIVE1MTGFiZWxFbGVtZW50Pih0ZXN0Tm9kZSkuY29udHJvbCgpID09ICZvd25lck5vZGUo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1
bWVudC5jcHAKaW5kZXggYzliNzczYjRhZGE3YmVlN2I5MmE4ZmMyZTk3OTE1NTBiNjc2MWRkNy4u
MGMyNWIzYmZiZGUyNjFmZDAyYTZhZTQ5ODY0ZDU1MWEyMWFmNThmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL01lZGlhRG9jdW1lbnQuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgTWVkaWFEb2N1bWVu
dFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQogICAgIFJlZlB0cjxFbGVtZW50PiBy
b290RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOwog
ICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBJR05PUkVfRVhDRVBUSU9O
KTsKICAgICBkb2N1bWVudCgpLT5zZXRDU1NUYXJnZXQocm9vdEVsZW1lbnQuZ2V0KCkpOwotICAg
IHRvSFRNTEh0bWxFbGVtZW50KHJvb3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigp
OworICAgIGRvd25jYXN0PEhUTUxIdG1sRWxlbWVudD4oKnJvb3RFbGVtZW50KS5pbnNlcnRlZEJ5
UGFyc2VyKCk7CiAKICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0YXJ0KTsK
QEAgLTk4LDkgKzk4LDkgQEAgdm9pZCBNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVu
dFN0cnVjdHVyZSgpCiAKICAgICBSZWZQdHI8RWxlbWVudD4gbWVkaWFFbGVtZW50ID0gZG9jdW1l
bnQoKS0+Y3JlYXRlRWxlbWVudCh2aWRlb1RhZywgZmFsc2UpOwogCi0gICAgbV9tZWRpYUVsZW1l
bnQgPSB0b0hUTUxWaWRlb0VsZW1lbnQobWVkaWFFbGVtZW50LmdldCgpKTsKLSAgICBtX21lZGlh
RWxlbWVudC0+c2V0QXR0cmlidXRlKGNvbnRyb2xzQXR0ciwgIiIpOwotICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoYXV0b3BsYXlBdHRyLCAiIik7CisgICAgbV9tZWRpYUVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIG1f
bWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCBlbXB0eUF0b20pOworICAg
IG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXV0b3BsYXlBdHRyLCBlbXB0eUF0b20pOwog
CiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lQXR0ciwgIm1lZGlhIik7CiAK
QEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIE1lZGlhRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3Vt
ZW50U3RydWN0dXJlKCkKICAgICBtX21lZGlhRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0
ciwgZWxlbWVudFN0eWxlLnRvU3RyaW5nKCkpOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHNvdXJj
ZUVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHNvdXJjZVRhZywgZmFsc2UpOwot
ICAgIEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UgPSB0b0hUTUxTb3VyY2VFbGVtZW50KCpzb3Vy
Y2VFbGVtZW50KTsKKyAgICBIVE1MU291cmNlRWxlbWVudCYgc291cmNlID0gZG93bmNhc3Q8SFRN
TFNvdXJjZUVsZW1lbnQ+KCpzb3VyY2VFbGVtZW50KTsKICAgICBzb3VyY2Uuc2V0U3JjKGRvY3Vt
ZW50KCktPnVybCgpKTsKIAogICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZG9jdW1l
bnQoKS0+bG9hZGVyKCkpCkBAIC0xNjEsMjIgKzE2MSwyMiBAQCBQYXNzUmVmUHRyPERvY3VtZW50
UGFyc2VyPiBNZWRpYURvY3VtZW50OjpjcmVhdGVQYXJzZXIoKQogc3RhdGljIGlubGluZSBIVE1M
VmlkZW9FbGVtZW50KiBkZXNjZW5kZW50VmlkZW9FbGVtZW50KENvbnRhaW5lck5vZGUmIG5vZGUp
CiB7CiAgICAgaWYgKGlzSFRNTFZpZGVvRWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0dXJuIHRv
SFRNTFZpZGVvRWxlbWVudCgmbm9kZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVmlk
ZW9FbGVtZW50Pigmbm9kZSk7CiAKICAgICBSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gbm9k
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKHZpZGVvVGFnLm5hbWVzcGFjZVVSSSgpLCB2aWRlb1Rh
Zy5sb2NhbE5hbWUoKSk7CiAgICAKLSAgICBpZiAobm9kZUxpc3QuZ2V0KCktPmxlbmd0aCgpID4g
MCkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFZpZGVvRWxlbWVudChub2RlTGlzdC5nZXQoKS0+aXRl
bSgwKSk7CisgICAgaWYgKG5vZGVMaXN0LT5sZW5ndGgoKSA+IDApCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pihub2RlTGlzdC0+aXRlbSgwKSk7CiAKLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGlubGluZSBIVE1MVmlkZW9F
bGVtZW50KiBhbmNlc3RvclZpZGVvRWxlbWVudChOb2RlKiBub2RlKQogewotICAgIHdoaWxlIChu
b2RlICYmICFub2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSkKKyAgICB3aGlsZSAobm9kZSAmJiAh
aXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50T3JT
aGFkb3dIb3N0Tm9kZSgpOwogCi0gICAgcmV0dXJuIHRvSFRNTFZpZGVvRWxlbWVudChub2RlKTsK
KyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4obm9kZSk7CiB9CiAKIHZvaWQg
TWVkaWFEb2N1bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCkBAIC0yNDMs
MTkgKzI0MywxOSBAQCB2b2lkIE1lZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhRG9jdW1lbnQ+JikKIAogICAgIGlmIChIVE1MVmlkZW9FbGVtZW50
KiB2aWRlb0VsZW1lbnQgPSBkZXNjZW5kZW50VmlkZW9FbGVtZW50KCpodG1sQm9keSkpIHsKICAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChl
bWJlZFRhZywgZmFsc2UpOwotICAgICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJlZEVsZW1lbnQg
PSB0b0hUTUxFbWJlZEVsZW1lbnQoZWxlbWVudC5nZXQoKSk7CisgICAgICAgIEhUTUxFbWJlZEVs
ZW1lbnQmIGVtYmVkRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbWJlZEVsZW1lbnQ+KCplbGVtZW50
KTsKIAotICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsICIxMDAl
Iik7Ci0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAl
Iik7Ci0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2lu
Iik7Ci0gICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0
cmluZygpKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsICIx
MDAlIik7CisgICAgICAgIGVtYmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEw
MCUiKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdp
biIpOworICAgICAgICBlbWJlZEVsZW1lbnQuc2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0
cmluZygpKTsKIAogICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBsb2Fk
ZXIoKTsKICAgICAgICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsKICAgICAgICAgaWYgKGRvY3Vt
ZW50TG9hZGVyKQotICAgICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0
dHIsIGRvY3VtZW50TG9hZGVyLT53cml0ZXIoKS5taW1lVHlwZSgpKTsKKyAgICAgICAgICAgIGVt
YmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGRvY3VtZW50TG9hZGVyLT53cml0ZXIo
KS5taW1lVHlwZSgpKTsKIAotICAgICAgICB2aWRlb0VsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVw
bGFjZUNoaWxkKGVtYmVkRWxlbWVudCwgdmlkZW9FbGVtZW50LCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICAgICAgdmlkZW9FbGVtZW50LT5wYXJlbnROb2RlKCktPnJlcGxhY2VDaGlsZCgmZW1iZWRF
bGVtZW50LCB2aWRlb0VsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAppbmRleCBmNzE2YjI3OTk0NzVkMTk4MGUz
ZmNlYzg3ZDg0OTk1OWVlZDI5OGQ1Li44YjBmNTJlZjQ0MzkzZjE0NDkzNzljZjcyZjNjZWQwNDM3
OTA1MGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcApAQCAtNjksNyAr
NjksNyBAQCB2b2lkIFBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVy
ZSgpCiB7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7CiAgICAgZG9jdW1lbnQoKS0+YXBwZW5kQ2hpbGQo
cm9vdEVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwotICAgIHRvSFRNTEh0bWxFbGVtZW50KHJv
b3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIGRvd25jYXN0PEhUTUxI
dG1sRWxlbWVudD4oKnJvb3RFbGVtZW50KS5pbnNlcnRlZEJ5UGFyc2VyKCk7CiAKICAgICBpZiAo
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aW5qZWN0
VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0YXJ0KTsKQEAgLTkyLDcgKzkyLDcgQEAgdm9p
ZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQogICAgICAg
ICAKICAgICBSZWZQdHI8RWxlbWVudD4gZW1iZWRFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChlbWJlZFRhZywgZmFsc2UpOwogICAgICAgICAKLSAgICBtX2VtYmVkRWxlbWVudCA9
IHRvSFRNTEVtYmVkRWxlbWVudChlbWJlZEVsZW1lbnQuZ2V0KCkpOworICAgIG1fZW1iZWRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTEVtYmVkRWxlbWVudD4oZW1iZWRFbGVtZW50LmdldCgpKTsKICAg
ICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgIjEwMCUiKTsKICAgICBt
X2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCmluZGV4IDIzOWE5Y2U2MGFjZmRjNzI2
MGY5ZDYwODlmZDYxMzc1NDVkYWNlZDMuLjZlZGMwZTk1ZjU4MzgzZWRhYTE2NmM5ZTY2ZDllOTBk
Y2U2ZWU3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCkBAIC04Niw3
ICs4Niw3IEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gTG9vayBmb3IgbW9yZSByYWRpbyBidXR0b25zLgog
ICAgICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChub2RlKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXRFbGVtZW50ID0gdG9I
VE1MSW5wdXRFbGVtZW50KG5vZGUpOworICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSk7CiAgICAgICAg
IGlmIChpbnB1dEVsZW1lbnQtPmZvcm0oKSAhPSBlbGVtZW50KCkuZm9ybSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSAmJiBp
bnB1dEVsZW1lbnQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpICYmIGlucHV0RWxlbWVudC0+
aXNGb2N1c2FibGUoKSkgewpAQCAtMTIzLDggKzEyMyw4IEBAIGJvb2wgUmFkaW9JbnB1dFR5cGU6
OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAgICAgLy8g
c2tpcCBhbnkgb3RoZXIgZWxlbWVudHMgaW4gdGhlIGdyb3VwLgogICAgIEVsZW1lbnQqIGN1cnJl
bnRGb2N1c2VkTm9kZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7CiAg
ICAgaWYgKGN1cnJlbnRGb2N1c2VkTm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQoY3VycmVudEZv
Y3VzZWROb2RlKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBmb2N1c2VkSW5wdXQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQoY3VycmVudEZvY3VzZWROb2RlKTsKLSAgICAgICAgaWYgKGZvY3Vz
ZWRJbnB1dC0+aXNSYWRpb0J1dHRvbigpICYmIGZvY3VzZWRJbnB1dC0+Zm9ybSgpID09IGVsZW1l
bnQoKS5mb3JtKCkgJiYgZm9jdXNlZElucHV0LT5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUoKSkK
KyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZm9jdXNlZElucHV0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKmN1cnJlbnRGb2N1c2VkTm9kZSk7CisgICAgICAgIGlmIChmb2N1c2VkSW5w
dXQuaXNSYWRpb0J1dHRvbigpICYmIGZvY3VzZWRJbnB1dC5mb3JtKCkgPT0gZWxlbWVudCgpLmZv
cm0oKSAmJiBmb2N1c2VkSW5wdXQubmFtZSgpID09IGVsZW1lbnQoKS5uYW1lKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1JhZGlvTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0
LmNwcAppbmRleCBiMjA0NGY2NzhkNjRiNmM3MWRjZmNhNTIwYzMxY2E3OGZjN2ZhZDEzLi43MDJm
MjFiNWMxMjExN2JlZDg1N2RmMTQ5OWU3YzQ0YWI5NjAyMjczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
UmFkaW9Ob2RlTGlzdC5jcHAKQEAgLTg3LDkgKzg3LDkgQEAgYm9vbCBSYWRpb05vZGVMaXN0Ojpj
aGVja0VsZW1lbnRNYXRjaGVzUmFkaW9Ob2RlTGlzdEZpbHRlcihjb25zdCBFbGVtZW50JiB0ZXN0
RWwKIHsKICAgICBBU1NFUlQodGVzdEVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IHRl
c3RFbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpOwogICAgIGlmIChpc0hUTUxGb3JtRWxl
bWVudChvd25lck5vZGUoKSkpIHsKLSAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVu
dCA9IDA7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnQgPSBudWxscHRyOwog
ICAgICAgICBpZiAodGVzdEVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAg
ICAgZm9ybUVsZW1lbnQgPSB0b0hUTUxPYmplY3RFbGVtZW50KHRlc3RFbGVtZW50KS5mb3JtKCk7
CisgICAgICAgICAgICBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50Pih0
ZXN0RWxlbWVudCkuZm9ybSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtRWxlbWVu
dCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudCh0ZXN0RWxlbWVudCkuZm9ybSgpOwogICAgICAg
ICBpZiAoIWZvcm1FbGVtZW50IHx8IGZvcm1FbGVtZW50ICE9ICZvd25lck5vZGUoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKaW5kZXggMDAyMzk4NDVkM2VkNDQzZjA1M2My
NGM3MDgxZTc3ZDMzYzEyODg3My4uNjhmMDBmNWFlNGFjNTBhZThiZDZkYjRhMjE1N2M3MDFiOWUz
ZjIzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKQEAgLTM3Miw4ICsz
NzIsOCBAQCB2b2lkIFJhbmdlSW5wdXRUeXBlOjp1cGRhdGVUaWNrTWFya1ZhbHVlcygpCiAgICAg
bV90aWNrTWFya1ZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkob3B0aW9ucy0+bGVuZ3RoKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcHRpb25zLT5sZW5ndGgoKTsgKytpKSB7CiAgICAg
ICAgIE5vZGUqIG5vZGUgPSBvcHRpb25zLT5pdGVtKGkpOwotICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobm9kZSk7Ci0gICAgICAg
IFN0cmluZyBvcHRpb25WYWx1ZSA9IG9wdGlvbkVsZW1lbnQtPnZhbHVlKCk7CisgICAgICAgIEhU
TUxPcHRpb25FbGVtZW50JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCpub2RlKTsKKyAgICAgICAgU3RyaW5nIG9wdGlvblZhbHVlID0gb3B0aW9uRWxlbWVudC52
YWx1ZSgpOwogICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1ZhbGlkVmFsdWUob3B0aW9uVmFsdWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fdGlja01hcmtWYWx1ZXMuYXBwZW5k
KHBhcnNlVG9OdW1iZXIob3B0aW9uVmFsdWUsIERlY2ltYWw6Om5hbigpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXgg
ZmUyMDRlYzNkODAwYWZiYjAxODY0MGJiMDgxYzZhMWQ4MDk1N2U3ZS4uOTM5MDU1NzA4NjI1YmQ2
Y2Q3OWFhN2Y0MDM2YmYwMjNlMGUxNmQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtODUsOCArODUsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNBbGxXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogc3Rh
dGljIGlubGluZSB2b2lkIGluc2VydChIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smIHRhc2spCiB7
CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRhc2sucGFyZW50LT5oYXNU
YWdOYW1lKHRlbXBsYXRlVGFnKSkKLSAgICAgICAgdGFzay5wYXJlbnQgPSB0b0hUTUxUZW1wbGF0
ZUVsZW1lbnQodGFzay5wYXJlbnQuZ2V0KCkpLT5jb250ZW50KCk7CisgICAgaWYgKGlzSFRNTFRl
bXBsYXRlRWxlbWVudCgqdGFzay5wYXJlbnQpKQorICAgICAgICB0YXNrLnBhcmVudCA9IGRvd25j
YXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCp0YXNrLnBhcmVudCkuY29udGVudCgpOwogI2VuZGlm
CiAKICAgICBpZiAoQ29udGFpbmVyTm9kZSogcGFyZW50ID0gdGFzay5jaGlsZC0+cGFyZW50Tm9k
ZSgpKQpAQCAtNTMxLDggKzUzMSw4IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vCiAgICAgICAg
IGZpbmRGb3N0ZXJTaXRlKHRhc2spOwogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0g
ICAgaWYgKHRhc2sucGFyZW50LT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkKLSAgICAgICAgdGFz
ay5wYXJlbnQgPSB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQodGFzay5wYXJlbnQuZ2V0KCkpLT5jb250
ZW50KCk7CisgICAgaWYgKGlzSFRNTFRlbXBsYXRlRWxlbWVudCgqdGFzay5wYXJlbnQpKQorICAg
ICAgICB0YXNrLnBhcmVudCA9IGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCp0YXNrLnBh
cmVudCkuY29udGVudCgpOwogI2VuZGlmCiAKICAgICAvLyBTdHJpbmdzIGNvbXBvc2VkIGVudGly
ZWx5IG9mIHdoaXRlc3BhY2UgYXJlIGxpa2VseSB0byBiZSByZXBlYXRlZC4KQEAgLTYxOCw4ICs2
MTgsOCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sCiBpbmxpbmUgRG9jdW1lbnQmIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpvd25lckRvY3VtZW50Rm9yQ3VycmVudE5vZGUoKQogewogI2lmIEVOQUJM
RShURU1QTEFURV9FTEVNRU5UKQotICAgIGlmIChjdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKHRl
bXBsYXRlVGFnKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFRlbXBsYXRlRWxlbWVudChjdXJyZW50
RWxlbWVudCgpKS0+Y29udGVudCgpLT5kb2N1bWVudCgpOworICAgIGlmIChpc0hUTUxUZW1wbGF0
ZUVsZW1lbnQoY3VycmVudE5vZGUoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGVt
cGxhdGVFbGVtZW50PigqY3VycmVudEVsZW1lbnQoKSkuY29udGVudCgpLT5kb2N1bWVudCgpOwog
I2VuZGlmCiAgICAgcmV0dXJuIGN1cnJlbnROb2RlKCktPmRvY3VtZW50KCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAzMWY1NDky
MzQ4M2Q5NGM2NzZmNDk2ODJiMDZiZmNjM2FhOGIyYTY1Li5iOTM2OGRmODAzNzYzNmRiMmRkNjU3
ZDhhOWEzODA1NzQ3N2ZiMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAKQEAgLTI5Nyw3ICsyOTcsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhU
TUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXImIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVu
dCYgZgogI2VuZGlmCiAKICAgICAgICAgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgp
OwotICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQgfHwgaXNIVE1MRm9ybUVs
ZW1lbnQoY29udGV4dEVsZW1lbnQpID8gdG9IVE1MRm9ybUVsZW1lbnQoY29udGV4dEVsZW1lbnQp
IDogSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvcigqY29udGV4dEVsZW1l
bnQpKTsKKyAgICAgICAgbV90cmVlLnNldEZvcm0oIWNvbnRleHRFbGVtZW50IHx8IGlzSFRNTEZv
cm1FbGVtZW50KGNvbnRleHRFbGVtZW50KSA/IGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oY29u
dGV4dEVsZW1lbnQpIDogSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3Rvcigq
Y29udGV4dEVsZW1lbnQpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAppbmRleCBhMjZmZjRkYmFmMDFhZjk1
MGVlNTkzYjk0YWZkNzUzZDE3YzFmMTkwLi41ZTNhYmQyMDEzZDE0OTdhZDNlOTQyMjYyZWIzMjEw
Y2ZiYzkwNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EZXRhaWxz
TWFya2VyQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGV0YWls
c01hcmtlckNvbnRyb2wuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVt
ZW50PiBEZXRhaWxzTWFya2VyQ29udHJvbDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFBhc3NSZWY8
UmVuCiAKIGJvb2wgRGV0YWlsc01hcmtlckNvbnRyb2w6OnJlbmRlcmVySXNOZWVkZWQoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHJldHVybiB0b0hUTUxTdW1tYXJ5RWxlbWVudChz
aGFkb3dIb3N0KCkpLT5pc01haW5TdW1tYXJ5KCkgJiYgSFRNTERpdkVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQoc3R5bGUpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU3VtbWFyeUVsZW1lbnQ+
KHNoYWRvd0hvc3QoKSktPmlzTWFpblN1bW1hcnkoKSAmJiBIVE1MRGl2RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChzdHlsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBhOTJiODcyMjBkOGUwOWI5ZWQ1
YzI4OWM0Yjc0NjFhMTE5ZDczMzg2Li5kNDJkNWE0Nzk1OGM3YWZiYjRlOWZlMmMwYzQ2NTlmMDRm
YTMwMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCkBAIC0xMTExLDcgKzExMTEsNyBAQCB2b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyAyLiBMZXQgdmlkZW8gYmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxh
eWJhY2sgbWVjaGFuaXNtLgotICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvID0gdG9IVE1MVmlk
ZW9FbGVtZW50KG1lZGlhRWxlbWVudCk7CisgICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW8gPSBk
b3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqbWVkaWFFbGVtZW50KTsKIAogICAgIC8vIDMuIExl
dCBvdXRwdXQgYmUgYW4gZW1wdHkgbGlzdCBvZiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJs
b2NrIGJveGVzLgogICAgIFZlY3RvcjxSZWZQdHI8SFRNTERpdkVsZW1lbnQ+PiBvdXRwdXQ7CkBA
IC0xMTM1LDcgKzExMzUsNyBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQogICAgIC8vIDcuIExldCBjdWVzIGJlIGFuIGVtcHR5IGxp
c3Qgb2YgdGV4dCB0cmFjayBjdWVzLgogICAgIC8vIDguIEZvciBlYWNoIHRyYWNrIHRyYWNrIGlu
IHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMgYWxsIHRoZSBjdWVzIGZyb20KICAgICAvLyB0cmFjaydz
IGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUgdGhlaXIgdGV4dCB0cmFjayBjdWUgYWN0aXZlIGZsYWcg
c2V0LgotICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHZpZGVvLT5jdXJyZW50bHlBY3RpdmVDdWVz
KCk7CisgICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gdmlkZW8uY3VycmVudGx5QWN0aXZlQ3Vlcygp
OwogCiAgICAgLy8gOS4gSWYgcmVzZXQgaXMgZmFsc2UsIHRoZW4sIGZvciBlYWNoIHRleHQgdHJh
Y2sgY3VlIGN1ZSBpbiBjdWVzOiBpZiBjdWUncwogICAgIC8vIHRleHQgdHJhY2sgY3VlIGRpc3Bs
YXkgc3RhdGUgaGFzIGEgc2V0IG9mIENTUyBib3hlcywgdGhlbiBhZGQgdGhvc2UgYm94ZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCmlu
ZGV4IGE1NzYzMzRkZTgzOTFhZjQxNjNlMDFjNjU2YWZhNGU4NWVmYjUyMTIuLjZlYzRlNTUxMmY5
MjE5ZjIzMDJlNzI3MmVkYzYxZTllYTA2NDg2NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcApAQCAtNTEsNyArNTEsNyBAQCBNZXRl
clNoYWRvd0VsZW1lbnQ6Ok1ldGVyU2hhZG93RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAK
IEhUTUxNZXRlckVsZW1lbnQqIE1ldGVyU2hhZG93RWxlbWVudDo6bWV0ZXJFbGVtZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdG9IVE1MTWV0ZXJFbGVtZW50KHNoYWRvd0hvc3QoKSk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1lbnQ+KHNoYWRvd0hvc3QoKSk7CiB9CiAKIGJv
b2wgTWV0ZXJTaGFkb3dFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Byb2dyZXNz
U2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1No
YWRvd0VsZW1lbnQuY3BwCmluZGV4IGRjZDIyOGJiNmZkY2RmM2RhM2UxZDU2MmY1YjZjMmFkODU1
YWQzYmIuLjkwNDE3ZjExYWI1ZGYyMWIzYTA5OThhOWE3ZTUyNjRmZDZiYmMxZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNw
cApAQCAtNDYsNyArNDYsNyBAQCBQcm9ncmVzc1NoYWRvd0VsZW1lbnQ6OlByb2dyZXNzU2hhZG93
RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIEhUTUxQcm9ncmVzc0VsZW1lbnQqIFByb2dy
ZXNzU2hhZG93RWxlbWVudDo6cHJvZ3Jlc3NFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
dG9IVE1MUHJvZ3Jlc3NFbGVtZW50KHNoYWRvd0hvc3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxQcm9ncmVzc0VsZW1lbnQ+KHNoYWRvd0hvc3QoKSk7CiB9CiAKIGJvb2wgUHJvZ3Jlc3NT
aGFkb3dFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCmluZGV4IDIwNjI4YzcyMzAyOGUzZmI2MmNmZGZiNzBiYjJjNTAzNmQwYzk0
NjAuLjE5MmY4ZTAwNjNmYTVhMDhlOGY0ODIxZmRlZGUwM2ZmZTIwYWQwMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIFBhc3NSZWZQdHI8U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uRWxlbWVudD4gU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3JlCiB2b2lkIFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQogewogICAgIC8vIE9uIG1vdXNlZG93biwgYnJpbmcgdXAgYSBtZW51LCBpZiBuZWVk
ZWQKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChzaGFk
b3dIb3N0KCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKTsKICAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgp
ICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAg
ICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKQEAgLTE5Miw3ICsx
OTIsNyBAQCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6d2lsbERldGFjaFJl
bmRlcmVycygpCiB2b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdmlz
aWJsZSwgb24gbW91c2V1cCwgY2xlYXIgdGhlIHZhbHVlLCBhbmQgc2V0IHNlbGVjdGlvbgotICAg
IFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dCh0b0hUTUxJbnB1dEVsZW1lbnQoc2hhZG93
SG9zdCgpKSk7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KHNoYWRvd0hvc3QoKSkpOwogICAgIGlmICghaW5wdXQgfHwgaW5wdXQt
PmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpIHsKICAgICAgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhh
bmRsZWQoKSkKICAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAjaWYgIVBMQVRGT1JN
KElPUykKIGJvb2wgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpCiB7Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSB0b0hUTUxJbnB1dEVsZW1lbnQoc2hhZG93SG9zdCgpKTsKKyAgICBjb25zdCBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNoYWRvd0hvc3QoKSk7
CiAgICAgaWYgKGlucHV0ICYmICFpbnB1dC0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IGZiZTg4ZDVlMTU5ZGU1OThhOTU5MmViM2VmZTQ0YTcxZTU5Y2Rj
MGIuLjJjNzNkYjlmZDRiZWNkYTQ0NGRlOWYzYjgwMzc4NzZhYTI4YTczN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtOTc1LDcgKzk3
NSw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0
b3JTdHlsZVNoZWV0KERvY3VtZW50KiBkb2N1bWVuCiAKICAgICBDU1NTdHlsZVNoZWV0KiBjc3NT
dHlsZVNoZWV0ID0gbnVsbHB0cjsKICAgICBpZiAoc3R5bGVFbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkpCi0gICAgICAgIGNzc1N0eWxlU2hlZXQgPSB0b0hUTUxTdHlsZUVsZW1lbnQoc3R5bGVFbGVt
ZW50LmdldCgpKS0+c2hlZXQoKTsKKyAgICAgICAgY3NzU3R5bGVTaGVldCA9IGRvd25jYXN0PEhU
TUxTdHlsZUVsZW1lbnQ+KCpzdHlsZUVsZW1lbnQpLnNoZWV0KCk7CiAgICAgZWxzZSBpZiAoc3R5
bGVFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgY3NzU3R5bGVTaGVldCA9IGRvd25j
YXN0PFNWR1N0eWxlRWxlbWVudD4oKnN0eWxlRWxlbWVudCkuc2hlZXQoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggZDJkZjRhODdh
NGUwZTdkNmNkMTk3OGQ0ZmNjODU1MWY5ZDQ5YzJjYi4uYmJhMzlmNjZmMTUxYjU5MjZhNGYwZjNh
NjUwMGVkYWFmOGU1ZmU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCkBAIC0xMjk3LDggKzEyOTcsOCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
Tm9kZQogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZW1wbGF0ZVRhZykpCi0gICAgICAg
ICAgICB2YWx1ZS0+c2V0VGVtcGxhdGVDb250ZW50KGJ1aWxkT2JqZWN0Rm9yTm9kZSh0b0hUTUxU
ZW1wbGF0ZUVsZW1lbnQoZWxlbWVudCktPmNvbnRlbnQoKSwgMCwgbm9kZXNNYXApKTsKKyAgICAg
ICAgaWYgKGlzSFRNTFRlbXBsYXRlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgICAgIHZhbHVl
LT5zZXRUZW1wbGF0ZUNvbnRlbnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvd25jYXN0PEhUTUxUZW1w
bGF0ZUVsZW1lbnQ+KCplbGVtZW50KS5jb250ZW50KCksIDAsIG5vZGVzTWFwKSk7CiAjZW5kaWYK
IAogICAgIH0gZWxzZSBpZiAobm9kZS0+aXNEb2N1bWVudE5vZGUoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKaW5kZXggNTI3OGY0YWM1MDZjODk2MzE0MmU5Nzhh
MzY4MjFmMTUwMTE1NTFlYS4uZTA2YjU2ZDcwNzExNjcxNjc0ZjRmYWEzZjhiZDgwMjNkMDllZTRm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCkBAIC0xOTAsNyAr
MTkwLDcgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0
ZShIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IEEKICAgICAgICAgaWYgKCFlbGVtZW50Lmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICAgICAgY29udHJvbC5hcHBlbmRGb3JtRGF0
YSgqZG9tRm9ybURhdGEsIGlzTXVsdGlQYXJ0Rm9ybSk7CiAgICAgICAgIGlmIChpc0hUTUxJbnB1
dEVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KTsKICAgICAg
ICAgICAgIGlmIChpbnB1dC5pc1RleHRGaWVsZCgpKSB7CiAgICAgICAgICAgICAgICAgZm9ybVZh
bHVlcy5hcHBlbmQoc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPihpbnB1dC5uYW1lKCkuc3RyaW5n
KCksIGlucHV0LnZhbHVlKCkpKTsKICAgICAgICAgICAgICAgICBpbnB1dC5hZGRTZWFyY2hSZXN1
bHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGNkNzE2ZDk1N2Uy
MGVmZGIxNzg0Yjk1ZGQ1MWYwZDA1MzE1YTk4ZWIuLmNjNDAzN2E3ZTkxN2Y0Y2E5ZGY1ZDJmNWVh
ODM5NmFkMzg5NGVlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAt
MTAzMyw5ICsxMDMzLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2V0T3BlbmVyKEZyYW1lKiBvcGVu
ZXIpCiB2b2lkIEZyYW1lTG9hZGVyOjpoYW5kbGVGYWxsYmFja0NvbnRlbnQoKQogewogICAgIEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBtX2ZyYW1lLm93bmVyRWxlbWVudCgpOwotICAg
IGlmICghb3duZXIgfHwgIW93bmVyLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgaWYgKCFv
d25lciB8fCAhaXNIVE1MT2JqZWN0RWxlbWVudChvd25lcikpCiAgICAgICAgIHJldHVybjsKLSAg
ICB0b0hUTUxPYmplY3RFbGVtZW50KG93bmVyKS0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7Cisg
ICAgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KCpvd25lcikucmVuZGVyRmFsbGJhY2tDb250
ZW50KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKaW5kZXggOWJhZDliNDdlNGM2ZmY1ZWI5
NmY4YWJhZWY5MmE3MmY1NmY0MjU0MS4uOTc1NDk3YWRjNWExYmQyYWNlNDJkYTgwMTJkMTVlMjRj
NGUxMDlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCkBAIC00MDYsMTQg
KzQwNiwxNCBAQCB2b2lkIEltYWdlTG9hZGVyOjpkaXNwYXRjaFBlbmRpbmdCZWZvcmVMb2FkRXZl
bnQoKQogICAgIH0KICAgICBpZiAobV9pbWFnZSkgewogICAgICAgICBtX2ltYWdlLT5yZW1vdmVD
bGllbnQodGhpcyk7Ci0gICAgICAgIG1faW1hZ2UgPSAwOworICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKICAgICB9CiAKICAgICBsb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCgqdGhpcyk7
CiAgICAgbV9oYXNQZW5kaW5nTG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKGlzSFRN
TE9iamVjdEVsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgdG9IVE1MT2JqZWN0RWxlbWVudChl
bGVtZW50KCkpLnJlbmRlckZhbGxiYWNrQ29udGVudCgpOworICAgICAgICBkb3duY2FzdDxIVE1M
T2JqZWN0RWxlbWVudD4oZWxlbWVudCgpKS5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKIAogICAg
IC8vIE9ubHkgY29uc2lkZXIgdXBkYXRpbmcgdGhlIHByb3RlY3Rpb24gcmVmLWNvdW50IG9mIHRo
ZSBFbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSByZXR1cm5pbmcKICAgICAvLyBmcm9tIHRoaXMg
ZnVuY3Rpb24gYXMgZG9pbmcgc28gbWlnaHQgcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBvZiB0
aGlzIEltYWdlTG9hZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAK
aW5kZXggZjlhZGY2Y2U3YjdiMmUxMzVhMjEyZTQ4ODdjNmE1ODZkNThkYzNlOC4uOTdiZGFjMTc0
YzZmYjE2ZGNkZWI1ZTUwMWE5OGUzZTMwZTdmMWU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
U3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgYm9vbCBTdWJmcmFtZUxvYWRl
cjo6cmVxdWVzdE9iamVjdChIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBvd25lckVsZW1lbnQsIGNv
bnN0IFMKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIGNvbXBsZXRlZFVSTCA9IGNv
bXBsZXRlVVJMKHVybCk7CiAKLSAgICBib29sIGhhc0ZhbGxiYWNrQ29udGVudCA9IGlzSFRNTE9i
amVjdEVsZW1lbnQob3duZXJFbGVtZW50KSAmJiB0b0hUTUxPYmplY3RFbGVtZW50KG93bmVyRWxl
bWVudCkuaGFzRmFsbGJhY2tDb250ZW50KCk7CisgICAgYm9vbCBoYXNGYWxsYmFja0NvbnRlbnQg
PSBpc0hUTUxPYmplY3RFbGVtZW50KG93bmVyRWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9iamVj
dEVsZW1lbnQ+KG93bmVyRWxlbWVudCkuaGFzRmFsbGJhY2tDb250ZW50KCk7CiAKICAgICBib29s
IHVzZUZhbGxiYWNrOwogICAgIGlmIChzaG91bGRVc2VQbHVnaW4oY29tcGxldGVkVVJMLCBtaW1l
VHlwZSwgb3duZXJFbGVtZW50LnNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMoKSwgaGFzRmFs
bGJhY2tDb250ZW50LCB1c2VGYWxsYmFjaykpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBl
YTQwNzljNjc0ZmU1ZTNmZDJmNjgwYWM2NTMzNGQ4NTQ1MDVmNzVhLi5kMzJkMzY5ZGJjOTE5NDQ1
YWEwM2Q0ZDZjNTA1OWY1ZjNmMjc3MjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC00MDks
OSArNDA5LDkgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0KQogICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5pbm5lck5vblNo
YXJlZEVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gR2V0IHRvb2x0aXAgcmVwcmVzZW50aW5n
IGZvcm0gYWN0aW9uLCBpZiByZWxldmFudAogICAgICAgICAgICAgaWYgKGlzSFRNTElucHV0RWxl
bWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1
dC0+aXNTdWJtaXRCdXR0b24oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoSFRNTEZvcm1F
bGVtZW50KiBmb3JtID0gaW5wdXQtPmZvcm0oKSkgeworICAgICAgICAgICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pc1N1Ym1pdEJ1dHRvbigpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBpbnB1dC5mb3JtKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBmb3JtLT5hY3Rpb24oKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChmb3JtLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBmb3JtLT5yZW5kZXJlcigpLT5zdHlsZSgpLmRp
cmVjdGlvbigpOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlwKGNv
bnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICBpZiAodG9vbFRpcC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpIHsK
LSAgICAgICAgICAgICAgICB0b29sVGlwID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpLT5k
ZWZhdWx0VG9vbFRpcCgpOworICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqZWxlbWVudCkuZGVmYXVsdFRvb2xUaXAoKTsKIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb2J0YWluIHRleHQgZGlyZWN0aW9uIG9mIHRvb2x0aXAg
ZnJvbQogICAgICAgICAgICAgICAgIC8vIENocm9tZUNsaWVudCBvciBwbGF0Zm9ybS4gQXMgb2Yg
T2N0b2JlciAyMDExLCBhbGwgY2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCmluZGV4IDUxNTk2MjQ2ZTdmOGRkZWFjNmE2MmRiOTUxYzFlZTAxZTIxOTg0MTMuLjVhZDMz
YmMxNjhlMThjZGZiNDJhOTRmZjMyMmQzZTY0MDlmOTIwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC02MjMsNyArNjIzLDcgQEAgRWxlbWVudCogRHJhZ0NvbnRy
b2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50
KiBzdGEKIHsKICAgICBzdGF0ZS50eXBlID0gKHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5jb250
YWlucyhkcmFnT3JpZ2luKSkgPyBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uIDogRHJhZ1NvdXJj
ZUFjdGlvbk5vbmU7CiAgICAgaWYgKCFzdGFydEVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZvciAoYXV0byByZW5kZXJlciA9IHN0YXJ0
RWxlbWVudC0+cmVuZGVyZXIoKTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVu
dCgpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci0+bm9uUHNldWRvRWxl
bWVudCgpOwpAQCAtNjQ2LDcgKzY0Niw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFn
Z2FibGVFbGVtZW50KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3Vy
Y2VBY3Rpb25MaW5rKQogICAgICAgICAgICAgICAgICYmIGlzSFRNTEFuY2hvckVsZW1lbnQoZWxl
bWVudCkKLSAgICAgICAgICAgICAgICAmJiB0b0hUTUxBbmNob3JFbGVtZW50KGVsZW1lbnQpLT5p
c0xpdmVMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICAmJiBkb3duY2FzdDxIVE1MQW5jaG9yRWxl
bWVudD4oKmVsZW1lbnQpLmlzTGl2ZUxpbmsoKSkgewogICAgICAgICAgICAgICAgIHN0YXRlLnR5
cGUgPSBzdGF0aWNfY2FzdDxEcmFnU291cmNlQWN0aW9uPihzdGF0ZS50eXBlIHwgRHJhZ1NvdXJj
ZUFjdGlvbkxpbmspOwogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAg
ICAgfQpAQCAtNjU0LDcgKzY1NCw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2Fi
bGVFbGVtZW50KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAgfQog
CiAgICAgLy8gV2UgZWl0aGVyIGhhdmUgbm90aGluZyB0byBkcmFnIG9yIHdlIGhhdmUgYSBzZWxl
Y3Rpb24gYW5kIHdlJ3JlIG5vdCBvdmVyIGEgZHJhZ2dhYmxlIGVsZW1lbnQuCi0gICAgcmV0dXJu
IChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQg
OiAwOworICAgIHJldHVybiAoc3RhdGUudHlwZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24p
ID8gc3RhcnRFbGVtZW50IDogbnVsbHB0cjsKIH0KIAogc3RhdGljIENhY2hlZEltYWdlKiBnZXRD
YWNoZWRJbWFnZShFbGVtZW50JiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCmluZGV4IDU0OTQ5ZWUzNTUwY2I3MjNlOWEwNGNkY2UyNmU4YTExYTRiYTliNDAuLmNlZjE4
MWY4MjNkMDg2ZDhmMDNjZjQ4NjY2M2I4OGE5Yzc0NTk3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTEyNjcsNyArMTI2Nyw3IEBAIEZyYW1lKiBFdmVudEhhbmRsZXI6
OnN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShOb2RlKiBub2RlKQogI2lmIEVOQUJMRShDVVJTT1JfU1VQ
UE9SVCkKIHN0YXRpYyBib29sIGlzU3VibWl0SW1hZ2UoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1
cm4gbm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgJiYgdG9IVE1MSW5wdXRFbGVtZW50
KG5vZGUpLT5pc0ltYWdlQnV0dG9uKCk7CisgICAgcmV0dXJuIG5vZGUgJiYgaXNIVE1MSW5wdXRF
bGVtZW50KG5vZGUpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS5pc0ltYWdl
QnV0dG9uKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdzIGVkaXRhYmxlIGJs
b2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcAppbmRleCA3NWQ4YzVkZjIxNWFhMzRkYmYyYmE1NjliZDgxOTQ1
NTY4N2M0MWFkLi5hMDNhYTBkNmZlZGQ4NGRiNzE5Njg5Y2Y3OGIxZmI4MTU0YmQxOGRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC04ODUsOSArODg1LDkgQEAg
Ym9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBLZXlib2EKICAgICAgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFi
bGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlvbiwg
Zm9jdXNlZEVsZW1lbnQpOwogICAgICAgICAgICAgc3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFi
c29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNlZEVsZW1lbnQsIHRydWUgLyogaWdub3JlIGJvcmRlciAq
Lyk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNIVE1MQXJlYUVsZW1lbnQoZm9jdXNlZEVsZW1lbnQp
KSB7Ci0gICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnQqIGFyZWEgPSB0b0hUTUxBcmVhRWxlbWVu
dChmb2N1c2VkRWxlbWVudCk7Ci0gICAgICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5j
bG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGFyZWEt
PmltYWdlRWxlbWVudCgpKTsKLSAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IHZpcnR1YWxSZWN0
Rm9yQXJlYUVsZW1lbnRBbmREaXJlY3Rpb24oYXJlYSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IEhUTUxBcmVhRWxlbWVudCYgYXJlYSA9IGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oKmZvY3Vz
ZWRFbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVFbmNsb3NpbmdC
b3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlvbiwgYXJlYS5pbWFnZUVs
ZW1lbnQoKSk7CisgICAgICAgICAgICBzdGFydGluZ1JlY3QgPSB2aXJ0dWFsUmVjdEZvckFyZWFF
bGVtZW50QW5kRGlyZWN0aW9uKCZhcmVhLCBkaXJlY3Rpb24pOwogICAgICAgICB9CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZjVhMGRkZWJkMjRjYzZiYjhkOWVlYTA3
MjEzMGUyNGUxYWRkMjhmMy4uYTg2ZTQwYzU3MDNmMWNlNGZiMGI1NThlNGYxN2IxYWYwZDk0ODBi
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTQxNiw3ICsxNDE2LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OmFkZEVtYmVkZGVkT2JqZWN0VG9VcGRhdGUoUmVuZGVyRW1iZWRkZWRPYmpl
Y3QmIGVtYmVkZGVkT2JqZWN0KQogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCA9
IGVtYmVkZGVkT2JqZWN0LmZyYW1lT3duZXJFbGVtZW50KCk7CiAgICAgaWYgKGlzSFRNTE9iamVj
dEVsZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MRW1iZWRFbGVtZW50KGVsZW1lbnQpKSB7CiAgICAg
ICAgIC8vIFRlbGwgdGhlIERPTSBlbGVtZW50IHRoYXQgaXQgbmVlZHMgYSB3aWRnZXQgdXBkYXRl
LgotICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5FbGVtZW50ID0gdG9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50KGVsZW1lbnQpOworICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50JiBwbHVnaW5FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxl
bWVudCk7CiAgICAgICAgIGlmICghcGx1Z2luRWxlbWVudC5uZWVkc0NoZWNrRm9yU2l6ZUNoYW5n
ZSgpKQogICAgICAgICAgICAgcGx1Z2luRWxlbWVudC5zZXROZWVkc1dpZGdldFVwZGF0ZSh0cnVl
KTsKICAgICB9CkBAIC0yNzg5LDcgKzI3ODksNyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRW1i
ZWRkZWRPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogCiAgICAg
aWYgKGVtYmVkZGVkT2JqZWN0LmlzU25hcHNob3R0ZWRQbHVnSW4oKSkgewogICAgICAgICBpZiAo
aXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxFbWJlZEVsZW1lbnQoZWxlbWVu
dCkpIHsKLSAgICAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQg
PSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdl
RWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LmNoZWNrU25hcHNo
b3RTdGF0dXMoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC0yODAwLDcgKzI4MDAs
NyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRW1iZWRkZWRPYmplY3QoUmVuZGVyRW1iZWRkZWRP
YmplY3QmIGVtYmVkZGVkT2JqZWN0KQogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIHR1cm4gaW50
byBhIHJlYWwgdmlydHVhbCBkaXNwYXRjaCBpZiB3ZSBkZWZpbmVkCiAgICAgLy8gdXBkYXRlV2lk
Z2V0KFBsdWdpbkNyZWF0aW9uT3B0aW9uKSBvbiBIVE1MRWxlbWVudC4KICAgICBpZiAoaXNIVE1M
T2JqZWN0RWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxFbWJlZEVsZW1lbnQoZWxlbWVudCkgfHwg
aXNIVE1MQXBwbGV0RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50JiBwbHVnaW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGVsZW1lbnQp
OworICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5FbGVtZW50ID0gZG93bmNh
c3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCk7CiAgICAgICAgIGlmIChwbHVnaW5F
bGVtZW50Lm5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCkpIHsKICAgICAgICAgICAgIHBsdWdpbkVs
ZW1lbnQuY2hlY2tTbmFwc2hvdFN0YXR1cygpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCA2ZWEwY2RhYTA5Y2VlNmU2NTAyYjJj
OThjMzEwYzE2ODZkZGNlY2ExLi44OTA5MzhjMzc0ZWZhMTIzYTcxYmY4NzQzYzdlOGY4ZGM0YzBm
MTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMjMxLDE5ICsy
MzEsMTkgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1l
KQogICAgICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKHRvU3R5bGVkRWxl
bWVudChlbGVtZW50KS0+aW5saW5lU3R5bGUoKSwgZG9jdW1lbnQpOwogCiAgICAgICAgIGlmIChp
c0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGltYWdlRWxlbWVudCA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAg
ICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwoaW1hZ2VFbGVtZW50LT5mYXN0R2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOwotICAgICAgICAgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOwotICAgICAgICAgICAg
YWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgaW1hZ2VFbGVtZW50LT5yZW5kZXJlcigp
LCB1cmwpOwotICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsaW5rVGFnKSkgewotICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50KiBsaW5rRWxlbWVudCA9
IHRvSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKENTU1N0eWxlU2hl
ZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCkpIHsKLSAgICAgICAgICAgICAgICBVUkwg
dXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCYgaW1hZ2VF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKmVsZW1lbnQpOworICAgICAgICAg
ICAgVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQuZmFzdEdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICAgICAgICAgIENhY2hlZEltYWdlKiBj
YWNoZWRJbWFnZSA9IGltYWdlRWxlbWVudC5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgYWRk
SW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCksIHVy
bCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNIVE1MTGlua0VsZW1lbnQoZWxlbWVudCkpIHsKKyAg
ICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlu
a0VsZW1lbnQ+KCplbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzaGVl
dCA9IGxpbmtFbGVtZW50LnNoZWV0KCkpIHsKKyAgICAgICAgICAgICAgICBVUkwgdXJsID0gZG9j
dW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Omhy
ZWZBdHRyKSk7CiAgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzaGVldCwg
dXJsKTsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJs
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNIVE1MU3R5bGVFbGVtZW50
KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc2hlZXQgPSB0b0hU
TUxTdHlsZUVsZW1lbnQoZWxlbWVudCktPnNoZWV0KCkpCisgICAgICAgICAgICBpZiAoQ1NTU3R5
bGVTaGVldCogc2hlZXQgPSBkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50PigqZWxlbWVudCkuc2hl
ZXQoKSkKICAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KHNoZWV0LCBVUkwo
KSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uY3BwCmluZGV4IGI4Yzg4NTE5NjVhOTE0NDZjNmZlZjQ5NThiZjMxYjNiZWFmY2Q4M2QuLjlk
NjIzYTE2ZDI5YzhlOWQ4NDA0YzBmYzg5ZDdlYTVmMzIzYTAyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC02NywxMyArNjcsMTMgQEAgRm9jdXNDYW5k
aWRhdGU6OkZvY3VzQ2FuZGlkYXRlKE5vZGUqIG5vZGUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlv
bikKICAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKIAogICAgIGlmIChpc0hUTUxB
cmVhRWxlbWVudChub2RlKSkgewotICAgICAgICBIVE1MQXJlYUVsZW1lbnQqIGFyZWEgPSB0b0hU
TUxBcmVhRWxlbWVudChub2RlKTsKLSAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UgPSBh
cmVhLT5pbWFnZUVsZW1lbnQoKTsKKyAgICAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVhID0gZG93
bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlID0gYXJlYS5pbWFnZUVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFpbWFnZSB8fCAhaW1h
Z2UtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmlzaWJsZU5v
ZGUgPSBpbWFnZTsKLSAgICAgICAgcmVjdCA9IHZpcnR1YWxSZWN0Rm9yQXJlYUVsZW1lbnRBbmRE
aXJlY3Rpb24oYXJlYSwgZGlyZWN0aW9uKTsKKyAgICAgICAgcmVjdCA9IHZpcnR1YWxSZWN0Rm9y
QXJlYUVsZW1lbnRBbmREaXJlY3Rpb24oJmFyZWEsIGRpcmVjdGlvbik7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA1MTQ4MDdiOTAwNjZlZTg4MDM0NTExMjIx
Y2M0MTA0ZDU3YmQ1MGM2Li5iODJmOWViMjRiODczNmJhZmU1NTM1ZGUxMWUzYjY2OTIwNDI5YTVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtMzUxLDggKzM1MSw4IEBAIHN0
YXRpYyBOb2RlKiBhbmNlc3RvclJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIGhpdFRlc3RSZXN1bHQsCiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW50ZXJlc3Rl
ZCBhYm91dCB0aGUgZnJhbWUsIHVzZSBpdC4KICAgICAgICAgICAgIGlmIChub2RlQm91bmRzKSB7
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoaXMg
bm9kZSBpcyBhbiBhcmVhIGVsZW1lbnQuICBUaGUgb25seSB3YXkgdGhpcyBjYW4gaGFwcGVuIGlz
IGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoZWNrLgotICAgICAgICAgICAgICAgIGlmIChub2RlID09
IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSAhPSBoaXRUZXN0UmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhVGFnKSkK
LSAgICAgICAgICAgICAgICAgICAgKm5vZGVCb3VuZHMgPSBzbmFwcGVkSW50UmVjdCh0b0hUTUxB
cmVhRWxlbWVudChub2RlKS0+Y29tcHV0ZVJlY3QoaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKS0+cmVuZGVyZXIoKSkpOworICAgICAgICAgICAgICAgIGlmIChub2RlID09IGhpdFRl
c3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSAhPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpICYmIGlzSFRNTEFyZWFFbGVtZW50KG5vZGUpKQorICAgICAgICAgICAgICAgICAg
ICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4o
Km5vZGUpLmNvbXB1dGVSZWN0KGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPnJl
bmRlcmVyKCkpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlICYmIG5vZGUtPnJlbmRl
cmVyKCkpCiAgICAgICAgICAgICAgICAgICAgICpub2RlQm91bmRzID0gbm9kZS0+cmVuZGVyZXIo
KS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggOTU5M2I3NjA0MTk5NTJk
MGJjMjBhMTRiZjdlMjY0MTgwNTRkMDg5Zi4uMDlkNjc1OGJjN2IxZWVmYmI5ZGI5NjA1YTMyMTE1
MzY2MjNkY2U4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cApAQCAtNDQsMTAgKzQ0LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5j
bHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU1ZHQUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
IApAQCAtMjcyLDE0ICsyNzMsMTQgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OmFsdERpc3BsYXlT
dHJpbmcoKSBjb25zdAogICAgIGlmICghbV9pbm5lck5vblNoYXJlZE5vZGUpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICAKLSAgICBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50KG1faW5uZXJO
b25TaGFyZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9
IHRvSFRNTEltYWdlRWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybiBkaXNwbGF5U3RyaW5nKGltYWdlLT5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpLCBt
X2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudCgq
bV9pbm5lck5vblNoYXJlZE5vZGUpKSB7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQmIGltYWdl
ID0gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKm1faW5uZXJOb25TaGFyZWROb2RlKTsKKyAg
ICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW1hZ2UuZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRy
KSwgbV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpOwogICAgIH0KICAgICAKLSAgICBpZiAoaXNI
VE1MSW5wdXRFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKSkgewotICAgICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChtX2lubmVyTm9uU2hh
cmVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBkaXNwbGF5U3RyaW5nKGlucHV0LT5hbHQo
KSwgbV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpOworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1l
bnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBp
bnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVkTm9kZSk7
CisgICAgICAgIHJldHVybiBkaXNwbGF5U3RyaW5nKGlucHV0LmFsdCgpLCBtX2lubmVyTm9uU2hh
cmVkTm9kZS5nZXQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMzM1LDE1
ICszMzYsMTUgQEAgVVJMIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMKCkgY29uc3QKICAg
ICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1cm4gVVJMKCk7CiAKLSAg
ICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSAmJiAhbV9p
bm5lck5vblNoYXJlZE5vZGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICBpZiAoIWlzSFRN
TEVtYmVkRWxlbWVudCgqbV9pbm5lck5vblNoYXJlZE5vZGUpICYmICFpc0hUTUxPYmplY3RFbGVt
ZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpCiAgICAgICAgIHJldHVybiBVUkwoKTsKIAotICAg
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpOwotICAgIFVSTCB1cmwgPSBtX2lubmVyTm9u
U2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGlu
Z0hUTUxTcGFjZXMoZWxlbWVudC0+dXJsKCkpKTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oKm1faW5uZXJOb25T
aGFyZWROb2RlKTsKKyAgICBVUkwgdXJsID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50
KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGVsZW1lbnQu
dXJsKCkpKTsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBVUkwoKTsK
IAotICAgIGlmIChlbGVtZW50LT5zZXJ2aWNlVHlwZSgpID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8
IChlbGVtZW50LT5zZXJ2aWNlVHlwZSgpLmlzRW1wdHkoKSAmJiB1cmwucGF0aCgpLmxvd2VyKCku
ZW5kc1dpdGgoIi5wZGYiKSkpCisgICAgaWYgKGVsZW1lbnQuc2VydmljZVR5cGUoKSA9PSAiYXBw
bGljYXRpb24vcGRmIiB8fCAoZWxlbWVudC5zZXJ2aWNlVHlwZSgpLmlzRW1wdHkoKSAmJiB1cmwu
cGF0aCgpLmVuZHNXaXRoKCIucGRmIiwgZmFsc2UpKSkKICAgICAgICAgcmV0dXJuIHVybDsKICAg
ICByZXR1cm4gVVJMKCk7CiB9CkBAIC00MjQsMTIgKzQyNSwxMiBAQCB2b2lkIEhpdFRlc3RSZXN1
bHQ6OnRvZ2dsZU1lZGlhRnVsbHNjcmVlblN0YXRlKCkgY29uc3QKIHZvaWQgSGl0VGVzdFJlc3Vs
dDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAogewogI2lmIEVOQUJMRShWSURFTykK
LSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdChtZWRpYUVsZW1lbnQoKSk7Ci0gICAgaWYg
KG1lZGlhRWx0ICYmIGlzSFRNTFZpZGVvRWxlbWVudChtZWRpYUVsdCkpIHsKLSAgICAgICAgSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbHQgPSB0b0hUTUxWaWRlb0VsZW1lbnQobWVkaWFFbHQpOwot
ICAgICAgICBpZiAoIXZpZGVvRWx0LT5pc0Z1bGxzY3JlZW4oKSAmJiBtZWRpYUVsdC0+c3VwcG9y
dHNGdWxsc2NyZWVuKCkpIHsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQodGhp
cy0+bWVkaWFFbGVtZW50KCkpOworICAgIGlmIChtZWRpYUVsZW1lbnQgJiYgaXNIVE1MVmlkZW9F
bGVtZW50KG1lZGlhRWxlbWVudCkpIHsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9F
bGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlhRWxlbWVudCk7CisgICAg
ICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1lZGlhRWxlbWVudC0+c3Vw
cG9ydHNGdWxsc2NyZWVuKCkpIHsKICAgICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICAgICAgICAgIHZp
ZGVvRWx0LT5lbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIHZpZGVvRWxlbWVudC5lbnRl
ckZ1bGxzY3JlZW4oKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtNDM4LDggKzQzOSw4
IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8oKSBjb25zdAog
Ym9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYUNvbnRyb2xzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKFZJREVPKQotICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsdCA9IG1lZGlh
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gbWVkaWFFbHQtPmNvbnRyb2xzKCk7CisgICAgaWYg
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRoaXMtPm1lZGlhRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5jb250cm9scygpOwogI2VuZGlmCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtNTE3LDEwICs1MTgsMTAgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojpp
c0xpdmVMaW5rKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJVUkxFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVudChtX2lubmVyVVJMRWxl
bWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxBbmNob3JFbGVtZW50KG1faW5uZXJV
UkxFbGVtZW50LmdldCgpKS0+aXNMaXZlTGluaygpOworICAgIGlmIChpc0hUTUxBbmNob3JFbGVt
ZW50KCptX2lubmVyVVJMRWxlbWVudCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5j
aG9yRWxlbWVudD4oKm1faW5uZXJVUkxFbGVtZW50KS5pc0xpdmVMaW5rKCk7CiAKLSAgICBpZiAo
bV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFUYWcpKQorICAgIGlmIChp
c1NWR0FFbGVtZW50KCptX2lubmVyVVJMRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBtX2lubmVy
VVJMRWxlbWVudC0+aXNMaW5rKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTUsMTEgKzU1
NiwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKICAg
ICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKSkK
KyAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2lubmVy
Tm9uU2hhcmVkTm9kZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxJbnB1dEVsZW1lbnQo
bV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgpOworICAgIGlmIChpc0hU
TUxJbnB1dEVsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVkTm9kZSkuaXNUZXh0Rmll
bGQoKTsKIAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCBm
NGRhY2ZhZTNjMGYzYTEzZjQ5OWFhMTA5MGM4OTE0MDQyMzE0ZjY5Li4xMzljYjk3MmY1N2EwMDAw
OGYxMTEwYjkyOTRhNDBmZjgyOTFkMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8gSWYgd2UncmUgYW4gaW5wdXQgZWxlbWVudCwgd2Ug
bWF5IG5lZWQgdG8gY2hhbmdlIG91ciBidXR0b24gdGV4dC4KICAgICBpZiAoaXNIVE1MSW5wdXRF
bGVtZW50KGZvcm1Db250cm9sRWxlbWVudCgpKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChmb3JtQ29udHJvbEVsZW1lbnQoKSk7CisgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Zm9ybUNvbnRyb2xFbGVtZW50KCkpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC52YWx1
ZVdpdGhEZWZhdWx0KCk7CiAgICAgICAgIHNldFRleHQodmFsdWUpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBiZWRkMWM3NDZkM2RiZDU4
MDZhYmJhZDdiMTU4Mzg0NjJlNDViOWJjLi40OTcwYzA0ZWI4NTcwYzA5ODllOTU5NGRhY2QwNTFm
NGY4M2UyY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291
bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
CkBAIC0xNDIsOCArMTQyLDggQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
cmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShvbFRhZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSFRNTE9MaXN0RWxlbWVudChl
bGVtZW50KS0+c3RhcnQoKTsKKyAgICAgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxl
bWVudCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1l
bnQ+KCplbGVtZW50KS5zdGFydCgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggY2I5MjBh
ZjYyNjdhYzI5OTZlOWNhNzdkZjFhZWQxYjdmYmM4MDE5OS4uYmE3M2VjNzhlNWQxNjUzMGZkYmY1
NzFmYmIzMmQyZWNhZTY0NDM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0yMzgsOCArMjM4LDcgQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQuaXNQbHVnSW5JbWFnZUVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIHNuYXBzaG90ID0gdG9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KHBsdWdJbkVsZW1lbnQpLnNuYXBzaG90SW1hZ2UoKTsKLSAgICBpZiAoc25h
cHNob3QpCisgICAgaWYgKEltYWdlKiBzbmFwc2hvdCA9IGRvd25jYXN0PEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ+KHBsdWdJbkVsZW1lbnQpLnNuYXBzaG90SW1hZ2UoKSkKICAgICAgICAgcGFpbnRT
bmFwc2hvdEltYWdlKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHNuYXBzaG90KTsKIH0KIApAQCAt
NDk1LDcgKzQ5NCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAg
aWYgKCF3YXNNaXNzaW5nV2lkZ2V0ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRTaXplLndpZHRo
KCkgJiYgbmV3U2l6ZS5oZWlnaHQoKSA+PSBvbGRTaXplLmhlaWdodCgpKSB7CiAgICAgICAgIEhU
TUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCA9IGZyYW1lT3duZXJFbGVtZW50KCk7CiAgICAg
ICAgIGlmIChlbGVtZW50LmlzUGx1Z2luRWxlbWVudCgpICYmIHRvSFRNTFBsdWdJbkVsZW1lbnQo
ZWxlbWVudCkuaXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KGVsZW1lbnQpOworICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0lu
SW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCk7
CiAgICAgICAgICAgICBpZiAocGx1Z0luSW1hZ2VFbGVtZW50LmRpc3BsYXlTdGF0ZSgpID4gSFRN
TFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCAmJiBwbHVnSW5JbWFnZUVsZW1lbnQu
c25hcHNob3REZWNpc2lvbigpID09IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6Ok1heVNuYXBzaG90
V2hlblJlc2l6ZWQpIHsKICAgICAgICAgICAgICAgICBwbHVnSW5JbWFnZUVsZW1lbnQuc2V0TmVl
ZHNDaGVja0ZvclNpemVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICB2aWV3KCkuZnJhbWVWaWV3
KCkuYWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oCmluZGV4IGE0MDVhYTRkNmQ4NjZlNWVhMzEyNjQwMTM3Yzk0
YmY1MGM3ZWU1MWQuLjlmNjcyZDdhNjE4ZDBjYTBlOGFkNjIwNmQwNGEzZTkxNTkxMGMyMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC0zOCw3ICszOCw3
IEBAIHB1YmxpYzoKICAgICBlbnVtIEZpbmRMZWdlbmRPcHRpb24geyBJZ25vcmVGbG9hdGluZ09y
T3V0T2ZGbG93LCBJbmNsdWRlRmxvYXRpbmdPck91dE9mRmxvdyB9OwogICAgIFJlbmRlckJveCog
ZmluZExlZ2VuZChGaW5kTGVnZW5kT3B0aW9uID0gSWdub3JlRmxvYXRpbmdPck91dE9mRmxvdykg
Y29uc3Q7CiAKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50JiBmaWVsZFNldEVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiB0b0hUTUxGaWVsZFNldEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsg
fQorICAgIEhUTUxGaWVsZFNldEVsZW1lbnQmIGZpZWxkU2V0RWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3Bw
CmluZGV4IDUwMWM1MWVhNGMzOGM0NTJjZTU3MWY5MGU0YWZjYzdiODc0NzQ0MWEuLjI5NTFjZmE5
ZGI2ZTA4YTRmMmQ2ZTJiMzg0ZjliODc2MDM0YzJlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAtNzAsNyArNzAs
NyBAQCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZpbGVVcGxvYWRDb250cm9sKCkK
IAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmlucHV0RWxlbWVu
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChub2RlRm9yTm9uQW5v
bnltb3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlRm9y
Tm9uQW5vbnltb3VzKCkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRh
dGVGcm9tRWxlbWVudCgpCkBAIC0yNTUsNyArMjU1LDcgQEAgSFRNTElucHV0RWxlbWVudCogUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGlucHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlu
cHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBidXR0
b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hUTUxJbnB1dEVsZW1l
bnQoYnV0dG9uTm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgOiAwOworICAg
IHJldHVybiBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpc0hU
TUxJbnB1dEVsZW1lbnQoYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihi
dXR0b25Ob2RlKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bDo6YnV0dG9uVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAK
aW5kZXggZDhiYTMxYTBmZjVlN2Y3M2RkYjA3ZGVjMjEzZTllMzljYTM0NjA2Mi4uNDM5MzhjZjQw
YTMyOTJiYzJmZWNjZjU0NjEyNTZjMDIyZWEzNDQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWUuY3BwCkBAIC0zNSw3ICszNSw3IEBAIFJlbmRlckZyYW1lOjpSZW5kZXJG
cmFtZShIVE1MRnJhbWVFbGVtZW50JiBmcmFtZSwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUp
CiAKIEhUTUxGcmFtZUVsZW1lbnQmIFJlbmRlckZyYW1lOjpmcmFtZUVsZW1lbnQoKSBjb25zdAog
ewotICAgIHJldHVybiB0b0hUTUxGcmFtZUVsZW1lbnQoUmVuZGVyRnJhbWVCYXNlOjpmcmFtZU93
bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudD4oUmVu
ZGVyRnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogRnJhbWVFZGdlSW5mbyBS
ZW5kZXJGcmFtZTo6ZWRnZUluZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHAKaW5kZXggNDQ4NTEzN2NkMGMzYWQ4YTZlNWE0ZDFhMTAyZTZjNzFm
OWQzMWE5Ny4uMTc3MTdkODBlYmRhM2RkY2E0NzA5MzU2ODJjYjNiZTdmYjFkZmNjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC01OSw3ICs1OSw3
IEBAIFJlbmRlckZyYW1lU2V0Ojp+UmVuZGVyRnJhbWVTZXQoKQogCiBIVE1MRnJhbWVTZXRFbGVt
ZW50JiBSZW5kZXJGcmFtZVNldDo6ZnJhbWVTZXRFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gdG9IVE1MRnJhbWVTZXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
CiB9CiAKIFJlbmRlckZyYW1lU2V0OjpHcmlkQXhpczo6R3JpZEF4aXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCmluZGV4IGU0MmZlOGQyMjhlMmEx
NDRmZTQ1ZTQwYmQ2ZjFiZDA1MDgyOGI0N2YuLjYyMWNmMjhjMGYwOTRlNzc2MzJmOGRhOWE0MGFi
MDE1OTEwZDMzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJI
VE1MQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENh
bnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHkKIAogSFRN
TENhbnZhc0VsZW1lbnQmIFJlbmRlckhUTUxDYW52YXM6OmNhbnZhc0VsZW1lbnQoKSBjb25zdAog
ewotICAgIHJldHVybiB0b0hUTUxDYW52YXNFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlRm9yTm9uQW5vbnlt
b3VzKCkpOwogfQogCiBib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAppbmRleCAwZWRjZTJk
YmQ2ZTg5NWExNjMwY2NhYzJjZDYzOWNhOWEzZDk3OTlhLi45MGM2MzU3YmU5MTdmMjQ2M2FkYTA5
NDJiZDYwODUzNTRiNjdlZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySUZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZy
YW1lLmNwcApAQCAtNDYsNyArNDYsNyBAQCBSZW5kZXJJRnJhbWU6OlJlbmRlcklGcmFtZShIVE1M
SUZyYW1lRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bAogCiBIVE1M
SUZyYW1lRWxlbWVudCYgUmVuZGVySUZyYW1lOjppZnJhbWVFbGVtZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gdG9IVE1MSUZyYW1lRWxlbWVudChSZW5kZXJGcmFtZUJhc2U6OmZyYW1lT3duZXJF
bGVtZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oUmVuZGVy
RnJhbWVCYXNlOjpmcmFtZU93bmVyRWxlbWVudCgpKTsKIH0KIAogYm9vbCBSZW5kZXJJRnJhbWU6
OnNob3VsZENvbXB1dGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAppbmRleCBkNjE1NWZjNmQ2ZTQ4NjYwNTc3NDA2OWFiYmYzNzNi
ZDZlNGZhOGVmLi5lODU4NTgyYWM3NGJkYTgyMzQwZTI4NTEwNTA2Mjc2ZTQ0NjM5NmNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTEzMSw3ICsxMzEsNyBA
QCBSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5k
ZXJTdHlsZT4gc3R5bGUsIFN0eWxlSW1hZwogICAgIGltYWdlUmVzb3VyY2UoKS5pbml0aWFsaXpl
KHRoaXMpOwogCiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
bV9oYXNTaGFkb3dDb250cm9scyA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KS5oYXNTaGFk
b3dDb250cm9scygpOworICAgICAgICBtX2hhc1NoYWRvd0NvbnRyb2xzID0gZG93bmNhc3Q8SFRN
TEltYWdlRWxlbWVudD4oZWxlbWVudCkuaGFzU2hhZG93Q29udHJvbHMoKTsKIH0KIAogUmVuZGVy
SW1hZ2U6OlJlbmRlckltYWdlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxSZW5kZXJTdHls
ZT4gc3R5bGUsIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UpCkBAIC01MTcsMjAgKzUxNywyMCBAQCB2
b2lkIFJlbmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50SW5mbyYgcGFp
bnRJbmZvKQogICAgIGlmICghZm9jdXNlZEVsZW1lbnQgfHwgIWlzSFRNTEFyZWFFbGVtZW50KGZv
Y3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEFyZWFFbGVtZW50KiBh
cmVhRWxlbWVudCA9IHRvSFRNTEFyZWFFbGVtZW50KGZvY3VzZWRFbGVtZW50KTsKLSAgICBpZiAo
YXJlYUVsZW1lbnQtPmltYWdlRWxlbWVudCgpICE9IGVsZW1lbnQoKSkKKyAgICBIVE1MQXJlYUVs
ZW1lbnQmIGFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVs
ZW1lbnQpOworICAgIGlmIChhcmVhRWxlbWVudC5pbWFnZUVsZW1lbnQoKSAhPSBlbGVtZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW4gaWYgdGhlIHRoZW1lIGhhbmRsZXMgZm9j
dXMgcmluZyBkcmF3aW5nIGZvciBlbnRpcmUgZWxlbWVudHMsIGl0IHdvbid0IGRvIGl0IGZvcgog
ICAgIC8vIGFuIGFyZWEgd2l0aGluIGFuIGltYWdlLCBzbyB3ZSBkb24ndCBjYWxsIFJlbmRlclRo
ZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyBoZXJlLgogCi0gICAgUGF0aCBwYXRoID0gYXJlYUVsZW1l
bnQtPmNvbXB1dGVQYXRoKHRoaXMpOworICAgIFBhdGggcGF0aCA9IGFyZWFFbGVtZW50LmNvbXB1
dGVQYXRoKHRoaXMpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgYWRkaXRpb25hbCBjb2RlIHRvIGNsaXAgdGhlIHBh
dGggdG8gdGhlIGltYWdlJ3MgYm91bmRpbmcgYm94PwogCi0gICAgUmVuZGVyU3R5bGUqIGFyZWFF
bGVtZW50U3R5bGUgPSBhcmVhRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIFJlbmRlclN0
eWxlKiBhcmVhRWxlbWVudFN0eWxlID0gYXJlYUVsZW1lbnQuY29tcHV0ZWRTdHlsZSgpOwogICAg
IHVuc2lnbmVkIHNob3J0IG91dGxpbmVXaWR0aCA9IGFyZWFFbGVtZW50U3R5bGUtPm91dGxpbmVX
aWR0aCgpOwogICAgIGlmICghb3V0bGluZVdpZHRoKQogICAgICAgICByZXR1cm47CkBAIC01NjAs
OCArNTYwLDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAoIWltZyB8fCBpbWct
PmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZUVsdCA9IChlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkpID8gdG9I
VE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgOiAwOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3Io
KSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVt
ZW50ID0gKGVsZW1lbnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKSkgPyBkb3du
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWxlbWVudCA/IGltYWdlRWxlbWVu
dC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgSW1hZ2Uq
IGltYWdlID0gaW1hZ2VSZXNvdXJjZSgpLmltYWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBp
bWFnZSwgTGF5b3V0U2l6ZShyZWN0LnNpemUoKSkpOwogICAgIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKCkpOwpAQCAtNjIyLDggKzYyMiw4IEBAIExheW91dFVuaXQgUmVuZGVySW1hZ2U6Om1pbmlt
dW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6
aW1hZ2VNYXAoKSBjb25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBlbGVtZW50KCkg
JiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyB0b0hUTUxJbWFnZUVsZW1lbnQoZWxl
bWVudCgpKSA6IDA7Ci0gICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChp
LT5mYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpKSA6IDA7CisgICAgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UgPSBlbGVtZW50KCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQoKSkgPyBk
b3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gaW1hZ2UgPyBpbWFnZS0+dHJlZVNjb3BlKCkuZ2V0SW1hZ2VNYXAoaW1hZ2UtPmZhc3RHZXRB
dHRyaWJ1dGUodXNlbWFwQXR0cikpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5kZXJJbWFnZTo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKQEAgLTY1NSwxMCArNjU1LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRl
eHQoKQogICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNI
VE1MSW5wdXRFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTElu
cHV0RWxlbWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAoaXNIVE1MSW1h
Z2VFbGVtZW50KGVsZW1lbnQoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTEltYWdlRWxl
bWVudChlbGVtZW50KCkpLT5hbHRUZXh0KCk7CisgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudCgq
ZWxlbWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKmVsZW1lbnQoKSkuYWx0VGV4dCgpOworICAgIGVsc2UgaWYgKGlzSFRNTEltYWdlRWxlbWVu
dCgqZWxlbWVudCgpKSkKKyAgICAgICAgbV9hbHRUZXh0ID0gZG93bmNhc3Q8SFRNTEltYWdlRWxl
bWVudD4oKmVsZW1lbnQoKSkuYWx0VGV4dCgpOwogfQogCiBib29sIFJlbmRlckltYWdlOjpjYW5I
YXZlQ2hpbGRyZW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAppbmRleCAyMWEwMTAzYzRhNTdmMjk1MGMzYWFkZTdhYzhmM2FiNGI5
MDEyNTAzLi4zNzFkZjQwZWFmNjAzMTY5ZmIzZDI4OTNlNzljNTc2NjUwY2M3MDA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNzQs
NyArNzQsNyBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0aW5nU3Ry
YXRlZ3koY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcgogewogICAgIEFTU0VSVChyZW5kZXJl
ci5pc0NhbnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlci5ub2RlKCkpOworICAgIGNvbnN0IEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVy
ZXIubm9kZSgpKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFz
LT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0Fj
Y2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFzOwpAQCAtMzAw
LDcgKzMwMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhp
Y3NMYXllcigpCiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKENBKQogICAgIGlmICghY29t
cG9zaXRvcigpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSAmJiByZW5kZXJlcigpLmlzQ2Fu
dmFzKCkpIHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRN
TENhbnZhc0VsZW1lbnQocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgICAgICBjb25zdCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRl
cmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNhbnZhcy0+c2hvdWxkQWNjZWxlcmF0ZShj
YW52YXMtPnNpemUoKSkpCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFjY2VsZXJh
dGVzRHJhd2luZyh0cnVlKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdF
QkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRl
cmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkp
ID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5kZXJlcigpLmVsZW1lbnQoKSk7
CisgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1M
Q2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAgICAgICBpZiAoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQog
ICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihj
b250ZXh0LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJGb3JD
YW52YXMpOwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxNTUz
ODIyNDhmMjZhNjUwNjU2ZDg3MDRkOGZiNmIzYWQwY2Q2ODkwLi40YmU0NjkxZDAzYWIyNTAwNmQ0
Y2UyNjMxYzk1NWU4NzQxZTBjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMjQzNSw3ICsyNDM1LDcgQEAgYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYKICNpZiBVU0UoQ09NUE9TSVRJTkdfRk9SX1NNQUxMX0NBTlZBU0VT
KQogICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcgPSB0
cnVlOwogI2Vsc2UKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRNTENh
bnZhc0VsZW1lbnQocmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5lbGVtZW50
KCkpOwogICAgICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcg
PSBjYW52YXMtPnNpemUoKS5hcmVhKCkgPj0gY2FudmFzQXJlYVRocmVzaG9sZFJlcXVpcmluZ0Nv
bXBvc2l0aW5nOwogI2VuZGlmCiAgICAgICAgIENhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kgY29t
cG9zaXRpbmdTdHJhdGVneSA9IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDU3NTlhYmMz
NzhmNDAzZjA5NTBiNWE1YmM3ZGJjNGU4OGQzOWZjNGYuLjYyYWVkYzNhNzFjYzQ2YzIzZmViZTIx
ODhhODQ3M2Q0ZDg2ZmQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBSZW5kZXJMaXN0Qm94Ojp+UmVuZGVyTGlzdEJv
eCgpCiAKIEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJMaXN0Qm94OjpzZWxlY3RFbGVtZW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlRm9yTm9uQW5vbnlt
b3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4obm9kZUZvck5v
bkFub255bW91cygpKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVu
dCgpCkBAIC0xMTcsOSArMTE3LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxl
bWVudCgpCiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZv
bnQgPSBzdHlsZSgpLmZvbnQoKTsKICAgICAgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50
KGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVs
ZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgICAgICAg
ICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVu
dGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXNIVE1MT3B0
R3JvdXBFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9IHRvSFRNTE9w
dEdyb3VwRWxlbWVudChlbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAgICAgICAgICAgICAg
ICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFi
ZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5m
b250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldl
aWdodCgpKTsKICAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0
dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKQEAgLTM4NywxMyArMzg3LDEz
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgU3RyaW5nIGl0ZW1UZXh0OwogICAgIGJv
b2wgaXNPcHRpb25FbGVtZW50ID0gaXNIVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQp
OwogICAgIGlmIChpc09wdGlvbkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0gdG9IVE1MT3B0
aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExh
YmVsKCk7CisgICAgICAgIGl0ZW1UZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCps
aXN0SXRlbUVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICBl
bHNlIGlmIChpc0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSkKLSAgICAgICAg
aXRlbVRleHQgPSB0b0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KS0+Z3JvdXBM
YWJlbFRleHQoKTsKKyAgICAgICAgaXRlbVRleHQgPSBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVt
ZW50PigqbGlzdEl0ZW1FbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgIGFwcGx5VGV4dFRy
YW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRleHRDb2xvciA9
IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVy
U3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUo
KS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKGlzT3B0
aW9uRWxlbWVudCAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCktPnNlbGVj
dGVkKCkpIHsKKyAgICBpZiAoaXNPcHRpb25FbGVtZW50ICYmIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChmcmFt
ZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNl
ZEVsZW1lbnQoKSA9PSAmc2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0g
dGhlbWUoKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiAgICAgICAg
IC8vIEhvbm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBkaXNhYmxlZCBpdGVtcwpAQCAtNDI2
LDcgKzQyNiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgSFRNTEVsZW1lbnQqIGxp
c3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29sb3IgYmFja0Nv
bG9yOwotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCkgJiYgdG9I
VE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT5zZWxlY3RlZCgpKSB7CisgICAgaWYg
KGlzSFRNTE9wdGlvbkVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkuc2VsZWN0ZWQoKSkgewogICAgICAgICBpZiAo
ZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudCgpLmZv
Y3VzZWRFbGVtZW50KCkgPT0gJnNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgICAgIGJhY2tDb2xv
ciA9IHRoZW1lKCkuYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogICAg
ICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApp
bmRleCAzNjhlZDllMmJlZWIxZjg4YjU1NDZiN2ZkNjgzNGJlNjFlNmJhMjdhLi5mYTAxMmM5ZThi
YmMzYTY3MzczYjIwNDAzYmU1MWUwMDE5NmQzM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBpbmxpbmUgaW50IFJl
bmRlckxpc3RJdGVtOjpjYWxjVmFsdWUoKSBjb25zdAogICAgICAgICByZXR1cm4gbV9leHBsaWNp
dFZhbHVlOwogCiAgICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QodGhpcyk7Ci0gICAg
SFRNTE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlzdC0+aGFzVGFnTmFt
ZShvbFRhZykpID8gdG9IVE1MT0xpc3RFbGVtZW50KGxpc3QpIDogbnVsbHB0cjsKKyAgICBIVE1M
T0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNUYWdOYW1lKG9s
VGFnKSkgPyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxwdHI7CiAgICAg
aW50IHZhbHVlU3RlcCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlzdEVsZW1lbnQt
PmlzUmV2ZXJzZWQoKSkKICAgICAgICAgdmFsdWVTdGVwID0gLTE7CkBAIC01MDEsNyArNTAxLDcg
QEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBib29sIGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0gICAgSFRNTE9M
aXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5oYXNUYWdO
YW1lKG9sVGFnKSkgPyB0b0hUTUxPTGlzdEVsZW1lbnQobGlzdE5vZGUpIDogbnVsbHB0cjsKKyAg
ICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYgbGlzdE5vZGUt
Pmhhc1RhZ05hbWUob2xUYWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3ROb2Rl
KSA6IG51bGxwdHI7CiAgICAgaWYgKG9MaXN0RWxlbWVudCkgewogICAgICAgICBvTGlzdEVsZW1l
bnQtPml0ZW1Db3VudENoYW5nZWQoKTsKICAgICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVs
ZW1lbnQtPmlzUmV2ZXJzZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJx
dWVlLmNwcAppbmRleCBiZGVhOTc5MjkyOTZkZDBhNTZiMzZhY2I5M2JiYjlhYThkY2I5Y2IyLi4y
NWE5N2U2YjNhNThlOTg4ZDZhYTQ2NTEzODlkZjc2ODNhMDAyNDRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03Myw4ICs3Myw4IEBAIGludCBSZW5k
ZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1bHQgPSBtX2xh
eWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZVNwZWVkKCk7CiAgICAgRWxlbWVudCogZWxl
bWVudCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykpCi0gICAgICAgIHJlc3VsdCA9IHN0ZDo6
bWF4KHJlc3VsdCwgdG9IVE1MTWFycXVlZUVsZW1lbnQoZWxlbWVudCktPm1pbmltdW1EZWxheSgp
KTsKKyAgICBpZiAoZWxlbWVudCAmJiBpc0hUTUxNYXJxdWVlRWxlbWVudChlbGVtZW50KSkKKyAg
ICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxIVE1MTWFycXVlZUVsZW1l
bnQ+KCplbGVtZW50KS5taW5pbXVtRGVsYXkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggMTM0Y2Y5
NDBmOGM5MzFiYTM0MTdkZDBmMmMxMjA5YjgwZjlkZmVjOS4uMzdlZWE1ZWU3MjNiZGY4ZGQ1ZTU5
MDUxZTU5OGM5OWI4OWM0NDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBzaXplX3Qgc2VsZWN0ZWRPcHRp
b25Db3VudChjb25zdCBSZW5kZXJNZW51TGlzdCYgcmVuZGVyTWVudUxpc3QpCiAKICAgICBzaXpl
X3QgY291bnQgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsg
KytpKSB7Ci0gICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAm
JiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAg
IGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSkgJiYgZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICArK2Nv
dW50OwogICAgIH0KICAgICByZXR1cm4gY291bnQ7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBS
ZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAKIEhUTUxTZWxlY3RFbGVtZW50JiBS
ZW5kZXJNZW51TGlzdDo6c2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRN
TFNlbGVjdEVsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6dXBkYXRlT3B0aW9uc1dpZHRoKCkKICAgICAgICAgaWYgKCFpc0hUTUxPcHRpb25FbGVtZW50
KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQg
PSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAg
IGFwcGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCB0ZXh0LCAnICcpOwogICAgICAgICBpZiAodGhl
bWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBB
ZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNl
bnRhZ2UgdmFsdWVzIGZvciBub3cuCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJNZW51
TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAgIGlmIChpID49IDAg
JiYgaSA8IHNpemUpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsK
ICAgICAgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgICAg
IHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3Bl
Y3RHcm91cExhYmVsKCk7CisgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAg
ICAgICAgICBtX29wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNDUxLDkgKzQ1MSw5IEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6aXRl
bVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIFN0cmluZyBpdGVtU3RyaW5nOwog
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoaXNI
VE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtU3RyaW5nID0gdG9IVE1M
T3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOworICAgICAgICBpdGVt
U3RyaW5nID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFi
ZWxUZXh0KCk7CiAgICAgZWxzZSBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAg
ICAgICAgaXRlbVN0cmluZyA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnRleHRJbmRl
bnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICAgICAgaXRlbVN0cmluZyA9IGRvd25jYXN0
PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBM
YWJlbCgpOwogCiAgICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1TdHJpbmcsICcg
Jyk7CiAgICAgcmV0dXJuIGl0ZW1TdHJpbmc7CkBAIC02NTQsNyArNjU0LDcgQEAgYm9vbCBSZW5k
ZXJNZW51TGlzdDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAg
IGlmIChsaXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAg
cmV0dXJuIGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KS0+c2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gaXNIVE1MT3B0aW9uRWxlbWVudChl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVk
KCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBs
aXN0SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAppbmRleCBl
NjI0Njg2YzVhNDRjYjA0NzAxOGJhMTJjMTUzZWFlM2Y2YmFkNzMzLi45ZWRiYmQ5OWI1MGZmZDBh
OTRmNzY4ODY5MzQ4YjlmYWEzNzhiYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZXRlci5jcHAKQEAgLTQ0LDEwICs0NCwxMCBAQCBIVE1MTWV0ZXJFbGVtZW50KiBSZW5kZXJN
ZXRlcjo6bWV0ZXJFbGVtZW50KCkgY29uc3QKICAgICBBU1NFUlQoZWxlbWVudCgpKTsKIAogICAg
IGlmIChpc0hUTUxNZXRlckVsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRN
TE1ldGVyRWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1l
dGVyRWxlbWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hv
c3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCktPnNoYWRvd0hv
c3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1lbnQ+KGVsZW1lbnQoKS0+
c2hhZG93SG9zdCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRo
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCmluZGV4IDI0
MjVmMDYyMzFmZTg5MTViZTg5MTZkZTkyMTI3YWMxZGUxMDIxYjYuLjJiNGYwNTdhYTEzZTdjZjMz
NzYyN2NiMjcwZjMyNzIyNDJiZDY2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclByb2dyZXNzLmNwcApAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBSZW5kZXJQcm9ncmVz
czo6dXBkYXRlQW5pbWF0aW9uU3RhdGUoKQogSFRNTFByb2dyZXNzRWxlbWVudCogUmVuZGVyUHJv
Z3Jlc3M6OnByb2dyZXNzRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50KCkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc0hU
TUxQcm9ncmVzc0VsZW1lbnQoZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSFRNTFByb2dy
ZXNzRWxlbWVudChlbGVtZW50KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudD4oZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hv
c3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChlbGVtZW50KCktPnNoYWRv
d0hvc3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQ+KGVsZW1l
bnQoKS0+c2hhZG93SG9zdCgpKTsKIH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggYWViODhiZTE4YWNk
OWRiOWE2MzgxZTNmNmMwMGQ2NjliYTNhZTk3MS4uMTA3OTc5ZTFlZjlmZTNiMDAzNWMzZjc2N2Y3
ZDc5YjA3M2RjMGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAKQEAgLTYwLDcgKzYwLDcgQEAgUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVyKCkKIAogSFRN
TElucHV0RWxlbWVudCYgUmVuZGVyU2xpZGVyOjplbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gdG9IVE1MSW5wdXRFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAK
IGludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIC8q
Zmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bi5jcHAKaW5kZXggNzk3OGZlMjFlNGRjZDZkNzlmYjRiNGZiNDAwOTJlOTIxZmFiY2YxNi4uZGUz
NzI2ZDJjMzZlZDNiNWE1YWJiY2Q4YmRlMzBmYjY2YjllNmRjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCkBAIC02NCw3
ICs2NCw3IEBAIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjp+UmVuZGVyU25hcHNob3R0ZWRQbHVn
SW4oKQogCiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6
cGx1Z0luSW1hZ2VFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50KFJlbmRlckVtYmVkZGVkT2JqZWN0OjpmcmFtZU93bmVyRWxlbWVudCgpKTsKKyAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oUmVuZGVyRW1iZWRkZWRP
YmplY3Q6OmZyYW1lT3duZXJFbGVtZW50KCkpOwogfQogCiB2b2lkIFJlbmRlclNuYXBzaG90dGVk
UGx1Z0luOjpsYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAKaW5kZXggOGIwZDBlZmJiM2Q1ZmI2MGVjNWE4MjE3OGEyMzMxNDRmOGI1Mjlk
NC4uNDAzNWY2NjA0MTllYWY1MDgzYWRiM2QzZWI4MWMyZDlhMTk4Nzc5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00OCw3ICs0OCw3
IEBAIFJlbmRlclRleHRDb250cm9sOjp+UmVuZGVyVGV4dENvbnRyb2woKQogCiBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudCYgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1l
bnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KG5v
ZGVGb3JOb25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiBUZXh0Q29udHJvbElu
bmVyVGV4dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sOjppbm5lclRleHRFbGVtZW50KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwCmluZGV4IDkxZGI1M2Q5MDU1NzkwMWJjOWVjY2VmZThmY2Q2M2EwNzBl
Y2QyY2UuLjUyNzE4ZGEzYjE1MDU2ZTczYzgyYzViNzA2NWJkNDZhNTQ5OTFjYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcApAQCAtNDUsNyArNDUsNyBAQCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6flJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lKCkKIAogSFRNTFRleHRBcmVhRWxlbWVudCYgUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmU6OnRleHRBcmVhRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRvSFRNTFRleHRBcmVhRWxlbWVudChSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEZvcm1Db250
cm9sRWxlbWVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4o
UmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9CiAKIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDU5
NTdlZTdhNjhiOTJiZGJjMjZkMDJjYWIwMGJmYzlkYjkyYWQ2MmQuLmMyZWM3ZDY3NDYwNTAzZTli
ZmNjZWEwMTQ4ZGI3M2FkYmZmYmU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC00ODEsNyArNDgx
LDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Ny
b2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KIAogSFRNTElucHV0RWxlbWVudCYgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVy
biB0b0hUTUxJbnB1dEVsZW1lbnQoUmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3JtQ29udHJvbEVs
ZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KFJlbmRlclRl
eHRDb250cm9sOjp0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBhMTUwOGI4OGJiODk5ZGYwNTgxZTJk
NDYwZDRjODgwYWM1M2Q4MzBkLi5mYjVlZTVjZTNmMmFkZTA4ZGRiNzMwYTQzMzczODNmMjc3MzAw
MGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTk4MCw3
ICs5ODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghaW5wdXQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0ID0gdG9IVE1M
RGF0YUxpc3RFbGVtZW50KGlucHV0LT5saXN0KCkpOworICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQq
IGRhdGFMaXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQtPmxpc3QoKSk7
CiAgICAgaWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDM2LDggKzEwMzYs
OCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRG
aWxsQ29sb3Ioby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSog
bm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBBU1NFUlQoaXNIVE1MT3B0
aW9uRWxlbWVudChub2RlKSk7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVt
ZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChub2RlKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0g
b3B0aW9uRWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlv
bkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOworICAgICAgICBT
dHJpbmcgdmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7CiAgICAgICAgIGlmICghaW5wdXQt
PmlzVmFsaWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZG91
YmxlIHBhcnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5wdXQtPnNhbml0
aXplVmFsdWUodmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQppbmRleCA5NGUxYmRiM2ZhYWZmY2Q4YzgxOTI0Yjg0YTJhYTRlMWMwYzM5ZjhkLi43ODli
ZWY1NjFiNTJjNTI1OWQ1NjdkMzJkZjAyN2YxZTFhZDc2ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC02NzIsNyArNjcyLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYgYm94LCBjb24KIAogICAgIC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAgICBpZiAoYm94
LmlzTWVudUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5tdWx0aXBs
ZSgpKSB7CisgICAgaWYgKGJveC5pc01lbnVMaXN0KCkgJiYgZG93bmNhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQ+KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CiAgICAgICAgIGludCBzaXplID0gMjsK
ICAgICAgICAgaW50IGNvdW50ID0gMzsKICAgICAgICAgaW50IHBhZGRpbmcgPSAzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IGQ0Y2FiMmIyYzk3NjVh
OGQ0YmU5ZTg1NTFlZTBjNmJiMzVhOTY2NzQuLmM1YWZlYmQzMWMyYjVlMTg3NTU3YjI4MGEwNGY2
ZmU1ZjQ2MjQ2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KQEAgLTE2NzgsNyArMTY3OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQCiAKICAgICBO
U1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAgICBpZiAoIWlu
cHV0LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaW5wdXQtPmlzVGV4dEZvcm1Db250cm9s
KCkgJiYgIXRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoaW5wdXQpLT5pc1JlYWRPbmx5KCkp
KQorICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIChpbnB1dC0+aXNU
ZXh0Rm9ybUNvbnRyb2woKSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCppbnB1dCkuaXNSZWFkT25seSgpKSkKICAgICAgICAgdXBkYXRlUHJlc3NlZFN0YXRlKFtzZWFy
Y2ggY2FuY2VsQnV0dG9uQ2VsbF0sIG8pOwogICAgIGVsc2UgaWYgKFtbc2VhcmNoIGNhbmNlbEJ1
dHRvbkNlbGxdIGlzSGlnaGxpZ2h0ZWRdKQogICAgICAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25D
ZWxsXSBzZXRIaWdobGlnaHRlZDpOT107CkBAIC0xODYxLDEzICsxODYxLDEzIEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9i
amVjdCYgbywgY29uc3QKICAgICBpZiAoIXBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1hZ2VFbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHBsdWdJbkVs
ZW1lbnQpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9
IGRvd25jYXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCpwbHVnSW5FbGVtZW50KTsKIAotICAg
IEltYWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC0+c25hcHNob3RJbWFnZSgpOwor
ICAgIEltYWdlKiBzbmFwc2hvdCA9IHBsdWdJbkltYWdlRWxlbWVudC5zbmFwc2hvdEltYWdlKCk7
CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbiogcGx1Z0luUmVuZGVyZXIgPSB0b1JlbmRlclNuYXBzaG90dGVkUGx1
Z0luKHBsdWdJbkltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW4qIHBsdWdJblJlbmRlcmVyID0gdG9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbihwbHVn
SW5JbWFnZUVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgRmxvYXRQb2ludCBzbmFwc2hvdEFic1Bv
cyA9IHBsdWdJblJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICBzbmFwc2hvdEFic1Bv
cy5tb3ZlKHBsdWdJblJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBwbHVnSW5SZW5kZXJlci0+cGFk
ZGluZ0xlZnQoKSwgcGx1Z0luUmVuZGVyZXItPmJvcmRlclRvcCgpICsgcGx1Z0luUmVuZGVyZXIt
PnBhZGRpbmdUb3AoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWRlby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3Bw
CmluZGV4IDVjOTYwNmZiNjhjNGVhZmVhNzY4ZTcwMWZhMzZjOWIzNDUwY2IwNTIuLjZlYWZmMzNi
YjUxZjUwNTRhNWJmZGU0YzFiNTBlNzk3MjYyYzMwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZGVvLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgUmVuZGVyVmlkZW86
OmxheW91dCgpCiAgICAgCiBIVE1MVmlkZW9FbGVtZW50JiBSZW5kZXJWaWRlbzo6dmlkZW9FbGVt
ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MVmlkZW9FbGVtZW50KFJlbmRlck1lZGlh
OjptZWRpYUVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+
KFJlbmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyVmlkZW86OnVw
ZGF0ZUZyb21FbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZUNhY2hlLmNwcAppbmRleCA3NDg2NjBmYzQ5MmIzNjEzM2VlZTM1ZjIzOTA5ODZkOTdjNDc2MWQ5
Li4zZjIxMTFmNTNkNGVlYjdhZDA1Y2IzNjA0NzU5YTY0OGM1OGIyNzIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC05Myw3ICs5Myw3IEBA
IEltYWdlKiBTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7CiAg
ICAgaWYgKG5vZGUgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJsU3RyaW5nID0gdG9IVE1MSW1hZ2VFbGVtZW50KG5vZGUpLT5pbWFn
ZVNvdXJjZVVSTCgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVybFN0cmluZyA9IGRv
d25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCpub2RlKS5pbWFnZVNvdXJjZVVSTCgpOwogICAgICAg
ICBVUkwgdXJsID0gbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwogICAg
ICAgICBpbWFnZUZvckNvbnRhaW5lci0+c2V0VVJMKHVybCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL3N2Z3RhZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFn
cy5pbgppbmRleCA2N2Y3MmQ4NDQ2MzVmYTIxMDdkM2UzNjE5ZmM3M2Q5ZGE3NTgwZWI4Li5iNzcw
OGMxMTFjYmZiMDJhNzA4M2RkZmYwZGRmNTI5NjhkYWY3MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvc3ZndGFncy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvc3ZndGFncy5p
bgpAQCAtMyw3ICszLDcgQEAgbmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIKIGZhbGxiYWNrSW50ZXJmYWNlTmFtZT0iU1ZHVW5rbm93bkVsZW1lbnQiCiBmYWxsYmFja0pT
SW50ZXJmYWNlTmFtZT0iU1ZHRWxlbWVudCIKIAotYQorYSBnZW5lcmF0ZVR5cGVIZWxwZXJzCiAj
aWYgRU5BQkxFX1NWR19GT05UUwogYWx0R2x5cGggZ2VuZXJhdGVUeXBlSGVscGVycwogYWx0R2x5
cGhEZWYgZ2VuZXJhdGVUeXBlSGVscGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CmluZGV4IGRmNzdkOTM4ZDlhMzhjODFhODVhZGYyNGEzY2QyMzEwNmMwMDUyMGYuLjc5OGQ5OTEy
YmFhYzlkYzQzODBmOGVhYzRlOTNjNWMzMDFkN2JkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEludGVybmFsczo6c2V0U2hhZG93
UHNldWRvSWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQwog
U3RyaW5nIEludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAgICAgaWYgKGVsZW1lbnQgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVu
dCkpIHsKLSAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRGb3Jt
Q29udHJvbEVsZW1lbnQgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCplbGVtZW50KTsK
KyAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRGb3JtQ29udHJv
bEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQp
OwogICAgICAgICBpZiAoIXRleHRGb3JtQ29udHJvbEVsZW1lbnQuaXNQbGFjZWhvbGRlclZpc2li
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgaWYgKEhUTUxFbGVt
ZW50KiBwbGFjZWhvbGRlckVsZW1lbnQgPSB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LnBsYWNlaG9s
ZGVyRWxlbWVudCgpKQpAQCAtOTEyLDkgKzkxMiw4IEBAIGJvb2wgSW50ZXJuYWxzOjp3YXNMYXN0
Q2hhbmdlVXNlckVkaXQoRWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0
RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNl
ckVkaXQoKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgaGFzVGFnTmFtZSBp
bnN0ZWFkIGJ1dCBXaW5kb3dzIHBvcnQgZG9lc24ndCBsaW5rIFF1YWxpZmllZE5hbWVzIHByb3Bl
cmx5LgotICAgIGlmICh0ZXh0RmllbGQtPnRhZ05hbWUoKSA9PSAiVEVYVEFSRUEiKQotICAgICAg
ICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KHRleHRGaWVsZCktPmxhc3RDaGFuZ2VXYXNV
c2VyRWRpdCgpOworICAgIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQodGV4dEZpZWxkKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxh
c3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCiAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyMCw4ICsxOTE5LDggQEAgdm9pZCBJbnRlcm5hbHM6
OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNr
cyhOb2RlKgogICAgICAgICBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGVsc2Ug
aWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIGRvY3VtZW50ID0gdG9Eb2N1bWVu
dChub2RlKTsKLSAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1l
VGFnKSkKLSAgICAgICAgZG9jdW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG5vZGUpLT5jb250
ZW50RG9jdW1lbnQoKTsKKyAgICBlbHNlIGlmIChpc0hUTUxJRnJhbWVFbGVtZW50KG5vZGUpKQor
ICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pigqbm9kZSkuY29u
dGVudERvY3VtZW50KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGVjID0gVHlwZUVycm9yOwogICAg
ICAgICByZXR1cm47CkBAIC0yMDg4LDkgKzIwODcsOSBAQCBib29sIEludGVybmFsczo6aXNTZWxl
Y3RQb3B1cFZpc2libGUoTm9kZSogbm9kZSkKICAgICBpZiAoIWlzSFRNTFNlbGVjdEVsZW1lbnQo
bm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUpOworICAgIEhUTUxTZWxlY3RFbGVtZW50
JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOwogCi0gICAgYXV0
byByZW5kZXJlciA9IHNlbGVjdC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gc2Vs
ZWN0LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNNZW51TGlzdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCBkMmZlN2MwZDkzN2Q4YTRjMjlhYmY2
Y2I4OWMzY2M2NjRlYjM2YmNiLi45YTFmOGY1MGE4Mjc2NGJlY2E1NWIxYmRlZTM2ZTdmNzBhNDlj
NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyTGlieG1sMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwCkBAIC04NTAsMTYgKzg1MCwxNiBAQCB2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0
IHhtbENoYQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
LSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRlVGFnKSkK
LSAgICAgICAgcHVzaEN1cnJlbnROb2RlKHRvSFRNTFRlbXBsYXRlRWxlbWVudChuZXdFbGVtZW50
LmdldCgpKS0+Y29udGVudCgpKTsKKyAgICBpZiAoaXNIVE1MVGVtcGxhdGVFbGVtZW50KCpuZXdF
bGVtZW50KSkKKyAgICAgICAgcHVzaEN1cnJlbnROb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVs
ZW1lbnQ+KCpuZXdFbGVtZW50KS5jb250ZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgcHVzaEN1
cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwogI2Vsc2UKICAgICBwdXNoQ3VycmVudE5vZGUo
bmV3RWxlbWVudC5nZXQoKSk7CiAjZW5kaWYKIAotICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aHRtbFRhZykpCi0gICAgICAgIHRvSFRNTEh0bWxFbGVtZW50KG5ld0Vs
ZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgaWYgKGlzSFRNTEh0bWxFbGVt
ZW50KCpuZXdFbGVtZW50KSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVtZW50PigqbmV3
RWxlbWVudCkuaW5zZXJ0ZWRCeVBhcnNlcigpOwogCiAgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVu
dCAmJiBpc0ZpcnN0RWxlbWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50SU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50SU9TLm1tCmluZGV4IGY2NjRmOTViZTkxNjEyMDVlZjBmNzg0ZjVhNzZlZTE4M2E3ZmU5
ODkuLjJiNjViYjBhYjY3NGZlNzU3ZjUyMDgyMTliMzBkMDcwYjdkYzk1YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1Mu
bW0KQEAgLTMxNCwxMSArMzE0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpmb2N1c2Vk
RWxlbWVudENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxl
bWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmICghaW5w
dXRFbGVtZW50LT5pc1RleHQoKSkKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dEVs
ZW1lbnQuaXNUZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhbGxGb3JtRGVsZWdhdGUo
d2ViVmlldygpLCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTopLCBraXQoaW5w
dXRFbGVtZW50KSwga2l0KGlucHV0RWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CisgICAg
Q2FsbEZvcm1EZWxlZ2F0ZSh3ZWJWaWV3KCksIEBzZWxlY3RvcihkaWRGb2N1c1RleHRGaWVsZDpp
bkZyYW1lOiksIGtpdCgmaW5wdXRFbGVtZW50KSwga2l0KGlucHV0RWxlbWVudC5kb2N1bWVudCgp
LmZyYW1lKCkpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OnNob3dQbGF5YmFja1Rh
cmdldFBpY2tlcihib29sIGhhc1ZpZGVvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
RE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3Bl
cmF0aW9ucy5tbQppbmRleCA1MGE5ZDhmZGJjZTJkYmIyNGU0ODY1MTVlZmUwZWE3Njc0OGJjZjkx
Li5iMWMyMDM1NTEyM2MwNjk0MmY3NDYzZGZlMWRjNjUwYWUxZWFjZDBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIEBpbXBs
ZW1lbnRhdGlvbiBET01IVE1MSW5wdXRFbGVtZW50IChXZWJET01IVE1MSW5wdXRFbGVtZW50T3Bl
cmF0aW9uc1ByaXZhdGUpCiAKIC0gKHZvaWQpX3NldEF1dG9maWxsZWQ6KEJPT0wpYXV0b2ZpbGxl
ZAogewotICAgIHRvSFRNTElucHV0RWxlbWVudChjb3JlKChET01FbGVtZW50ICopc2VsZikpLT5z
ZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KGNvcmUoKERPTUVsZW1lbnQgKilzZWxmKSktPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQppbmRleCAyMjU0ZTJlZjc5NWMxMDk2MzM1Yzk2YzEzZjFjYmIyNTY5NWUx
YzdkLi4yNGRlNjdhNzIzNTgxM2JhNWUyMjJlM2M2ZGM4ZmFhMGMwZTc1YWNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBA
IC0yMjMsMTEgKzIyMywxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZEVsZW1lbnRD
aGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxl
bWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0RWxlbWVu
dC0+aXNUZXh0KCkpCisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpOworICAgIGlmICghaW5wdXRFbGVtZW50Lmlz
VGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmll
dywgQHNlbGVjdG9yKGRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6KSwga2l0KGlucHV0RWxlbWVu
dCksIGtpdChpbnB1dEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOworICAgIENhbGxGb3Jt
RGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTop
LCBraXQoJmlucHV0RWxlbWVudCksIGtpdChpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgp
KSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1l
KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQppbmRleCA3YjYyOTZlNzgyY2Y1ZGEyMTM0NzYyMzFmZWQzMTZkODdiM2M5MGU3Li5h
Njk0OTJjOTYwODQ0ZThkMTJjYzZiMzM2MGRmNDVlYjIyYTVhNDQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC03MDgs
NyArNzA4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGlu
ZyhFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1l
bnQgPSBraXQodG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKTsKKyAgICBET01IVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxl
bWVudCkpOwogICAgIEZvcm1EZWxlZ2F0ZUxvZyhpbnB1dEVsZW1lbnQpOwogICAgIENhbGxGb3Jt
RGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nOmlu
RnJhbWU6KSwgaW5wdXRFbGVtZW50LCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7
CiB9CkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERp
ZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9N
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAg
ICBDYWxsRm9ybURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHRleHRGaWVsZERpZEVuZEVk
aXRpbmc6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIGtpdChlbGVtZW50LT5kb2N1bWVudCgpLmZy
YW1lKCkpKTsKIH0KQEAgLTczMyw3ICs3MzMsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4
dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICNlbmRpZgogCi0gICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRv
SFRNTElucHV0RWxlbWVudChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAg
ICBGb3JtRGVsZWdhdGVMb2coaW5wdXRFbGVtZW50KTsKICAgICBDYWxsRm9ybURlbGVnYXRlKG1f
d2ViVmlldywgQHNlbGVjdG9yKHRleHREaWRDaGFuZ2VJblRleHRGaWVsZDppbkZyYW1lOiksIGlu
cHV0RWxlbWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwogfQpAQCAtNzY2
LDcgKzc2Niw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9t
RXZlbnQoRWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVuCiAgICAgaWYgKCFpc0hUTUxJbnB1
dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIERPTUhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkp
OworICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKGlucHV0RWxl
bWVudCk7CiAgICAgaWYgKFNFTCBjb21tYW5kU2VsZWN0b3IgPSBzZWxlY3RvckZvcktleUV2ZW50
KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIENhbGxGb3JtRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFu
KE5PLCBtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RmllbGQ6ZG9Db21tYW5kQnlTZWxlY3Rvcjpp
bkZyYW1lOiksIGlucHV0RWxlbWVudCwgY29tbWFuZFNlbGVjdG9yLCBraXQoZWxlbWVudC0+ZG9j
dW1lbnQoKS5mcmFtZSgpKSk7CkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKICAgICBp
ZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KHRvSFRNTElucHV0RWxlbWVu
dChlbGVtZW50KSk7CisgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0
KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBGb3JtRGVsZWdhdGVM
b2coaW5wdXRFbGVtZW50KTsKICAgICAvLyBXZSdyZSB1c2luZyB0aGUgZGVsZXRlQmFja3dhcmQg
c2VsZWN0b3IgZm9yIGFsbCBkZWxldGlvbiBvcGVyYXRpb25zIHNpbmNlIHRoZSBhdXRvZmlsbCBj
b2RlIHRyZWF0cyBhbGwgZGVsZXRpb25zIHRoZSBzYW1lIHdheS4KICAgICBDYWxsRm9ybURlbGVn
YXRlUmV0dXJuaW5nQm9vbGVhbihOTywgbV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4dEZpZWxkOmRv
Q29tbWFuZEJ5U2VsZWN0b3I6aW5GcmFtZTopLCBpbnB1dEVsZW1lbnQsIEBzZWxlY3RvcihkZWxl
dGVCYWNrd2FyZDopLCBraXQoZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKSk7CkBAIC03ODks
NyArNzg5LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVh
KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVu
dCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRB
cmVhRWxlbWVudCA9IGtpdCh0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkpOworICAgIERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhRWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50PihlbGVtZW50KSk7CiAgICAgRm9ybURlbGVnYXRlTG9nKHRleHRBcmVh
RWxlbWVudCk7CiAgICAgQ2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0
RGlkQ2hhbmdlSW5UZXh0QXJlYTppbkZyYW1lOiksIHRleHRBcmVhRWxlbWVudCwga2l0KGVsZW1l
bnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAwOWRkYzFkODVjMzNlZTkwOTBj
YzU0NTgwYzQxNTYzNzI0NWI2ZDFhLi4wOTJlNThkN2I0M2ZjYzk0NjA2ZDM4OWMwZjY0N2JkNGU3
ODQyOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbQpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKERPTUVsZW1lbnQgKillbGVtZW50
V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCiBzdGF0
aWMgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBFbGVtZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICBy
ZXR1cm4gbm9kZSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgPyB0b0hUTUxJbnB1dEVsZW1l
bnQobm9kZSkgOiAwOworICAgIHJldHVybiBub2RlICYmIGlzSFRNTElucHV0RWxlbWVudChub2Rl
KSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cjsKIH0KIAogLSAo
Qk9PTCllbGVtZW50RG9lc0F1dG9Db21wbGV0ZTooRE9NRWxlbWVudCAqKWVsZW1lbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAppbmRleCBiMzhjNzdhNmU2ZjYzMzAzNWE2ZDU5MzBk
OWI3MTgyMDc2YTA5Nzk2Li41OWUwZmI1MzVlNzU3NmNkODRkOTk0ZWEzYzMwMDk2MzA1OWU3YWYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCkBAIC0yNTAsNyArMjUwLDcgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OlVSTCgKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpyZXN1bHQgPSBCU3Ry
aW5nKHRvSFRNTERvY3VtZW50KG1fZG9jdW1lbnQpLT51cmwoKSkucmVsZWFzZSgpOworICAgICpy
ZXN1bHQgPSBCU3RyaW5nKGRvd25jYXN0PEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCktPnVybCgp
KS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0yNjEsOSArMjYxLDkg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmJvZHkoCiAgICAg
aWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jID0gdG9IVE1MRG9j
dW1lbnQobV9kb2N1bWVudCk7CisgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gZG93bmNhc3Q8
SFRNTERvY3VtZW50PigqbV9kb2N1bWVudCk7CiAgICAgQ09NUHRyPElET01FbGVtZW50PiBkb21F
bGVtZW50OwotICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUlu
c3RhbmNlKGh0bWxEb2MtPmJvZHkoKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRN
TEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGh0bWxEb2MuYm9keSgpKSk7CiAgICAgaWYgKGRvbUVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBkb21FbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURP
TUhUTUxFbGVtZW50LCAodm9pZCoqKSBib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIEVfRkFJTDsK
QEAgLTMwNCw4ICszMDQsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxEb2N1
bWVudDo6Zm9ybXMoCiAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50KiBo
dG1sRG9jID0gdG9IVE1MRG9jdW1lbnQobV9kb2N1bWVudCk7Ci0gICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBmb3JtcyA9IGh0bWxEb2MtPmZvcm1zKCk7CisgICAgSFRNTERvY3VtZW50JiBodG1s
RG9jID0gZG93bmNhc3Q8SFRNTERvY3VtZW50PigqbV9kb2N1bWVudCk7CisgICAgUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBmb3JtcyA9IGh0bWxEb2MuZm9ybXMoKTsKICAgICAqY29sbGVjdGlvbiA9
IERPTUhUTUxDb2xsZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShmb3Jtcy5nZXQoKSk7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CkBAIC01NjAsNyArNTYwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01IVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAq
LyBCU1RSKiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxGb3JtRWxl
bWVudChtX2VsZW1lbnQpKTsKLSAgICBXVEY6OlN0cmluZyBhY3Rpb25TdHJpbmcgPSB0b0hUTUxG
b3JtRWxlbWVudChtX2VsZW1lbnQpLT5hY3Rpb24oKTsKKyAgICBXVEY6OlN0cmluZyBhY3Rpb25T
dHJpbmcgPSBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KCptX2VsZW1lbnQpLmFjdGlvbigpOwog
ICAgICpyZXN1bHQgPSBCU3RyaW5nKGFjdGlvblN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVy
biBTX09LOwogfQpAQCAtNTkwLDcgKzU5MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RE9NSFRNTEZvcm1FbGVtZW50OjptZXRob2QoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
QlNUUiogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MRm9ybUVsZW1l
bnQobV9lbGVtZW50KSk7Ci0gICAgV1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0gdG9IVE1MRm9y
bUVsZW1lbnQobV9lbGVtZW50KS0+bWV0aG9kKCk7CisgICAgV1RGOjpTdHJpbmcgbWV0aG9kU3Ry
aW5nID0gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigqbV9lbGVtZW50KS5tZXRob2QoKTsKICAg
ICAqcmVzdWx0ID0gQlN0cmluZyhtZXRob2RTdHJpbmcpLnJlbGVhc2UoKTsKICAgICByZXR1cm4g
U19PSzsKIH0KQEAgLTcwMiwxMyArNzAyLDEzIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RE9NSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMoCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CiAKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0
RWxlbWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MU2VsZWN0
RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9l
bGVtZW50KTsKIAotICAgIGlmICghc2VsZWN0RWxlbWVudC0+b3B0aW9ucygpKQorICAgIGlmICgh
c2VsZWN0RWxlbWVudC5vcHRpb25zKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICAq
cmVzdWx0ID0gMDsKLSAgICBSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBvcHRpb25zID0g
c2VsZWN0RWxlbWVudC0+b3B0aW9ucygpOworICAgICpyZXN1bHQgPSBudWxscHRyOworICAgIFJl
ZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IG9wdGlvbnMgPSBzZWxlY3RFbGVtZW50Lm9wdGlv
bnMoKTsKICAgICAqcmVzdWx0ID0gRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpjcmVhdGVJbnN0
YW5jZShvcHRpb25zLmdldCgpKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTgwNCwxMiArODA0
LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFNlbGVjdEVsZW1lbnQ6OmFj
dGl2YXRlSXRlbUF0SW5kZXgoCiAgICAgLyogW2luXSAqLyBpbnQgaW5kZXgpCiB7CiAgICAgQVNT
RVJUKG1fZWxlbWVudCk7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0
b0hUTUxTZWxlY3RFbGVtZW50KG1fZWxlbWVudCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNl
bGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAK
LSAgICBpZiAoaW5kZXggPj0gc2VsZWN0RWxlbWVudC0+bGVuZ3RoKCkpCisgICAgaWYgKGluZGV4
ID49IHNlbGVjdEVsZW1lbnQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAg
ICBzZWxlY3RFbGVtZW50LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KTsKKyAgICBzZWxlY3RFbGVt
ZW50LnNldFNlbGVjdGVkSW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC04
NjAsOSArODYwLDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MT3B0aW9uRWxl
bWVudDo6dGV4dCgKIAogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxP
cHRpb25FbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25F
bGVtZW50ID0gdG9IVE1MT3B0aW9uRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25F
bGVtZW50JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2Vs
ZW1lbnQpOwogCi0gICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+dGV4dCgpKS5y
ZWxlYXNlKCk7CisgICAgKnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC50ZXh0KCkpLnJl
bGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTg5Nyw5ICs4OTcsOSBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCgKIAog
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpc0hUTUxPcHRpb25FbGVtZW50KG1f
ZWxlbWVudCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1M
T3B0aW9uRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb25F
bGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpOwogCi0gICAg
KnJlc3VsdCA9IEJTdHJpbmcob3B0aW9uRWxlbWVudC0+bGFiZWwoKSkucmVsZWFzZSgpOworICAg
ICpyZXN1bHQgPSBCU3RyaW5nKG9wdGlvbkVsZW1lbnQubGFiZWwoKSkucmVsZWFzZSgpOwogICAg
IHJldHVybiBTX09LOwogfQogICAgIApAQCAtOTkxLDExICs5OTEsMTEgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKAogewogICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpyZXN1bHQgPSAwOworICAgICpy
ZXN1bHQgPSBudWxscHRyOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVt
ZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRv
SFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIENP
TVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKLSAgICBkb21FbGVtZW50LmFkb3B0UmVmKERP
TUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZShpbnB1dEVsZW1lbnQtPmZvcm0oKSkpOworICAg
IGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGlucHV0
RWxlbWVudC5mb3JtKCkpKTsKICAgICBpZiAoZG9tRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGRv
bUVsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NSFRNTEVsZW1lbnQsICh2b2lkKiopIHJl
c3VsdCk7CiAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTEwNzUsOCArMTA3NSw4IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6ZGlzYWJsZWQoCiAgICAgICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gQk9PTCogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1l
bnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpy
ZXN1bHQgPSBpbnB1dEVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gVFJVRSA6IEZB
TFNFOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAgICAgCkBAIC0xMTE5LDggKzExMTksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERP
TUhUTUxJbnB1dEVsZW1lbnQ6OnJlYWRPbmx5KAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICov
IEJPT0wqIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxl
bWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50
LT5pc1JlYWRPbmx5KCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAg
KnJlc3VsdCA9IGlucHV0RWxlbWVudC5pc1JlYWRPbmx5KCkgPyBUUlVFIDogRkFMU0U7CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0xMTg0LDkgKzExODQsOSBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUoCiAgICAgICAgIC8qIFtp
bl0gKi8gQlNUUiB0eXBlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRF
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAg
IFdURjo6U3RyaW5nIHR5cGVTdHJpbmcodHlwZSwgU3lzU3RyaW5nTGVuKHR5cGUpKTsKLSAgICBp
bnB1dEVsZW1lbnQtPnNldFR5cGUodHlwZVN0cmluZyk7CisgICAgaW5wdXRFbGVtZW50LnNldFR5
cGUodHlwZVN0cmluZyk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCkBAIC0xMjA4LDggKzEy
MDgsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZh
bHVlKAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKICAgICBB
U1NFUlQobV9lbGVtZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVt
ZW50KTsKLSAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlucHV0RWxlbWVudC0+dmFsdWUo
KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IGlu
cHV0RWxlbWVudC52YWx1ZSgpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKHZhbHVlU3RyaW5nKS5y
ZWxlYXNlKCk7CiAgICAgaWYgKHZhbHVlU3RyaW5nLmxlbmd0aCgpICYmICEqcmVzdWx0KQogICAg
ICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKQEAgLTEyMjAsOCArMTIyMCw4IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoCiAgICAgICAg
IC8qIFtpbl0gKi8gQlNUUiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzSFRN
TElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQt
PnNldFZhbHVlKFN0cmluZygoVUNoYXIqKSB2YWx1ZSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOwor
ICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCptX2VsZW1lbnQpOworICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZShTdHJpbmcoKFVD
aGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKICAgICByZXR1cm4gU19PSzsKIH0K
IApAQCAtMTIzMCwxNiArMTIzMCwxNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhU
TUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcigKIHsKICAgICBBU1NFUlQobV9lbGVtZW50
KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQp
OwotICAgIGlucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0aWNfY2FzdDxV
Q2hhcio+KHZhbHVlKSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOworICAgIEhUTUxJbnB1dEVsZW1l
bnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQp
OworICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZUZvclVzZXIoU3RyaW5nKHN0YXRpY19jYXN0PFVD
aGFyKj4odmFsdWUpLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0
KCB2b2lkKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1f
ZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElu
cHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+c2VsZWN0KCk7CisgICAg
SFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50LnNlbGVjdCgpOwogICAgIHJldHVybiBT
X09LOwogfQogICAgIApAQCAtMTI1Myw4ICsxMjUzLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCgKICAgICAvKiBbaW5d
ICovIGxvbmcgc3RhcnQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVs
ZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
dG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRTZWxl
Y3Rpb25TdGFydChzdGFydCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRFbGVtZW50
LnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI2
Miw4ICsxMjYyLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3Rpb25TdGFydCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIGxvbmcgKnN0YXJ0
KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVu
dCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxl
bWVudChtX2VsZW1lbnQpOwotICAgICpzdGFydCA9IGlucHV0RWxlbWVudC0+c2VsZWN0aW9uU3Rh
cnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICAqc3RhcnQgPSBpbnB1dEVsZW1lbnQuc2Vs
ZWN0aW9uU3RhcnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI3MSw4ICsxMjcxLDgg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxl
Y3Rpb25FbmQoCiAgICAgLyogW2luXSAqLyBsb25nIGVuZCkKIHsKICAgICBBU1NFUlQobV9lbGVt
ZW50ICYmIGlzSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICBp
bnB1dEVsZW1lbnQtPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwor
ICAgIGlucHV0RWxlbWVudC5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKICAgICByZXR1cm4gU19PSzsK
IH0KIApAQCAtMTI4MCw4ICsxMjgwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBs
b25nICplbmQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxJbnB1dEVsZW1lbnQo
bV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1M
SW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgKmVuZCA9IGlucHV0RWxlbWVudC0+c2VsZWN0
aW9uRW5kKCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgKmVuZCA9IGlucHV0RWxlbWVudC5z
ZWxlY3Rpb25FbmQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTI5Miw4ICsxMjkyLDgg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRG
aWVsZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1MSW5wdXRF
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpyZXN1bHQgPSBpbnB1dEVsZW1l
bnQtPmlzVGV4dEZpZWxkKCkgPyBUUlVFIDogRkFMU0U7CisgICAgSFRNTElucHV0RWxlbWVudCYg
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7Cisg
ICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5pc1RleHRGaWVsZCgpID8gVFJVRSA6IEZBTFNFOwog
ICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMzI4LDEzICsxMzI4LDEzIEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6cmVwbGFjZUNoYXJhY3RlcnNJblJh
bmdlKAogCiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzSFRNTElucHV0RWxl
bWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0
b0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKIAotICAg
IFN0cmluZyBuZXdWYWx1ZSA9IGlucHV0RWxlbWVudC0+dmFsdWUoKTsKKyAgICBTdHJpbmcgbmV3
VmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWUoKTsKICAgICBTdHJpbmcgd2ViQ29yZVJlcGxhY2Vt
ZW50U3RyaW5nKHN0YXRpY19jYXN0PFVDaGFyKj4ocmVwbGFjZW1lbnRTdHJpbmcpLCBTeXNTdHJp
bmdMZW4ocmVwbGFjZW1lbnRTdHJpbmcpKTsKICAgICBuZXdWYWx1ZS5yZXBsYWNlKHN0YXJ0VGFy
Z2V0LCBlbmRUYXJnZXQgLSBzdGFydFRhcmdldCwgd2ViQ29yZVJlcGxhY2VtZW50U3RyaW5nKTsK
LSAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlKG5ld1ZhbHVlKTsKLSAgICBpbnB1dEVsZW1lbnQt
PnNldFNlbGVjdGlvblJhbmdlKGluZGV4LCBuZXdWYWx1ZS5sZW5ndGgoKSk7CisgICAgaW5wdXRF
bGVtZW50LnNldFZhbHVlKG5ld1ZhbHVlKTsKKyAgICBpbnB1dEVsZW1lbnQuc2V0U2VsZWN0aW9u
UmFuZ2UoaW5kZXgsIG5ld1ZhbHVlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBTX09LOwogfQpA
QCAtMTM0NSw5ICsxMzQ1LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5w
dXRFbGVtZW50OjpzZWxlY3RlZFJhbmdlKAogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAg
IEFTU0VSVChpc0hUTUxJbnB1dEVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAg
KnN0YXJ0ID0gaW5wdXRFbGVtZW50LT5zZWxlY3Rpb25TdGFydCgpOwotICAgICplbmQgPSBpbnB1
dEVsZW1lbnQtPnNlbGVjdGlvbkVuZCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxl
bWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAgICpzdGFy
dCA9IGlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCgpOworICAgICplbmQgPSBpbnB1dEVsZW1l
bnQuc2VsZWN0aW9uRW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzNTYsOCArMTM1
Niw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0
QXV0b2ZpbGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXNIVE1M
SW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgIGlucHV0RWxlbWVudC0+
c2V0QXV0b2ZpbGxlZCghIWZpbGxlZCk7CisgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CisgICAgaW5wdXRF
bGVtZW50LnNldEF1dG9maWxsZWQoISFmaWxsZWQpOwogICAgIHJldHVybiBTX09LOwogfQogCkBA
IC0xMzY2LDggKzEzNjYsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1
dEVsZW1lbnQ6OmlzQXV0b2ZpbGxlZCgKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBB
U1NFUlQoaXNIVE1MSW5wdXRFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpOwotICAgICpy
ZXN1bHQgPSBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpID8gVFJVRSA6IEZBTFNFOworICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCptX2VsZW1lbnQpOworICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNBdXRvZmlsbGVk
KCkgPyBUUlVFIDogRkFMU0U7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzODQsNyArMTM4
NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNV
c2VyRWRpdGVkKAogICAgIEJPT0wgdGV4dEZpZWxkID0gRkFMU0U7CiAgICAgaWYgKEZBSUxFRChp
c1RleHRGaWVsZCgmdGV4dEZpZWxkKSkgfHwgIXRleHRGaWVsZCkKICAgICAgICAgcmV0dXJuIFNf
T0s7Ci0gICAgaWYgKHRvSFRNTElucHV0RWxlbWVudChtX2VsZW1lbnQpLT5sYXN0Q2hhbmdlV2Fz
VXNlckVkaXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVu
dCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQgPSBUUlVFOwogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMTQyOCw5ICsxNDI4LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpmb3JtKAogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogICAgICpyZXN1bHQgPSAwOwogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1M
VGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRl
eHRhcmVhRWxlbWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOworICAgIEhU
TUxUZXh0QXJlYUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVu
dDsKLSAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5j
ZSh0ZXh0YXJlYUVsZW1lbnQtPmZvcm0oKSkpOworICAgIGRvbUVsZW1lbnQuYWRvcHRSZWYoRE9N
SFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKHRleHRhcmVhRWxlbWVudC5mb3JtKCkpKTsKICAg
ICBpZiAoZG9tRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnQtPlF1ZXJ5SW50ZXJm
YWNlKElJRF9JRE9NSFRNTEVsZW1lbnQsICh2b2lkKiopIHJlc3VsdCk7CiAgICAgcmV0dXJuIEVf
RkFJTDsKQEAgLTE1NDUsOCArMTU0NSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9N
SFRNTFRleHRBcmVhRWxlbWVudDo6dmFsdWUoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
QlNUUiogcmVzdWx0KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXNIVE1MVGV4dEFyZWFF
bGVtZW50KG1fZWxlbWVudCkpOwotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRhcmVhRWxl
bWVudCA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpOwotICAgIFdURjo6U3RyaW5n
IHZhbHVlU3RyaW5nID0gdGV4dGFyZWFFbGVtZW50LT52YWx1ZSgpOworICAgIEhUTUxUZXh0QXJl
YUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KCptX2VsZW1lbnQpOworICAgIFdURjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gdGV4dGFyZWFFbGVt
ZW50LnZhbHVlKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcodmFsdWVTdHJpbmcpLnJlbGVhc2Uo
KTsKICAgICBpZiAodmFsdWVTdHJpbmcubGVuZ3RoKCkgJiYgISpyZXN1bHQpCiAgICAgICAgIHJl
dHVybiBFX09VVE9GTUVNT1JZOwpAQCAtMTU1NywxNiArMTU1NywxNiBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKAogICAgICAgICAv
KiBbaW5dICovIEJTVFIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxU
ZXh0QXJlYUVsZW1lbnQobV9lbGVtZW50KSk7Ci0gICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4
dGFyZWFFbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fZWxlbWVudCk7Ci0gICAgdGV4
dGFyZWFFbGVtZW50LT5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xl
bih2YWx1ZSkpKTsKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKKyAgICB0ZXh0YXJlYUVs
ZW1lbnQuc2V0VmFsdWUoU3RyaW5nKChVQ2hhciopIHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUp
KSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdCggdm9pZCkKIHsKICAgICBBU1NFUlQobV9l
bGVtZW50ICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpKTsKLSAgICBIVE1MVGV4
dEFyZWFFbGVtZW50KiB0ZXh0YXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQobV9l
bGVtZW50KTsKLSAgICB0ZXh0YXJlYUVsZW1lbnQtPnNlbGVjdCgpOworICAgIEhUTUxUZXh0QXJl
YUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KCptX2VsZW1lbnQpOworICAgIHRleHRhcmVhRWxlbWVudC5zZWxlY3QoKTsKICAgICByZXR1cm4g
U19PSzsKIH0KIApAQCAtMTU4MCw3ICsxNTgwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojppc1VzZXJFZGl0ZWQoCiAKICAgICAqcmVzdWx0ID0g
RkFMU0U7CiAgICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpc0hUTUxUZXh0QXJlYUVsZW1lbnQobV9l
bGVtZW50KSk7Ci0gICAgaWYgKHRvSFRNTFRleHRBcmVhRWxlbWVudChtX2VsZW1lbnQpLT5sYXN0
Q2hhbmdlV2FzVXNlckVkaXQoKSkKKyAgICBpZiAoZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVu
dD4oKm1fZWxlbWVudCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQg
PSBUUlVFOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTYwNiwxMCArMTYwNiwxMCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJRnJhbWVFbGVtZW50Ojpjb250ZW50RnJhbWUo
CiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnJl
c3VsdCA9IDA7CisgICAgKnJlc3VsdCA9IG51bGxwdHI7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7
Ci0gICAgSFRNTElGcmFtZUVsZW1lbnQqIGlGcmFtZUVsZW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVt
ZW50KG1fZWxlbWVudCk7Ci0gICAgQ09NUHRyPElXZWJGcmFtZT4gd2ViRnJhbWUgPSBraXQoaUZy
YW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkpOworICAgIEhUTUxJRnJhbWVFbGVtZW50JiBpRnJh
bWVFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KCptX2VsZW1lbnQpOworICAg
IENPTVB0cjxJV2ViRnJhbWU+IHdlYkZyYW1lID0ga2l0KGlGcmFtZUVsZW1lbnQuY29udGVudEZy
YW1lKCkpOwogICAgIGlmICghd2ViRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAg
cmV0dXJuIHdlYkZyYW1lLmNvcHlSZWZUbyhyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCmlu
ZGV4IDc4OGEyZTgwZjFjZmE5ZTgzZDIzNTM5Yzg3MDcyNWY4YmQyZjEyNDMuLjhjNmM0NWMzMjlj
OTgyZTNhMzUzZDE1MGVlNjE4ZDVhMGNkOGM5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKQEAg
LTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgRWxlbWVudCAqZWxlbWVudEZyb21ET01FbGVtZW50KElE
T01FbGVtZW50ICplbGVtZW50KQogc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRG
cm9tRE9NRWxlbWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIElET01F
bGVtZW50UHJpdmF0ZSogZWxlUHJpdjsKICAgICBIUkVTVUxUIGhyID0gZWxlbWVudC0+UXVlcnlJ
bnRlcmZhY2UoSUlEX0lET01FbGVtZW50UHJpdmF0ZSwgKHZvaWQqKikgJmVsZVByaXYpOwpAQCAt
MjAzLDE1ICsyMDMsMTUgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9t
RE9NRWxlbWVudChJRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAgICAgaHIgPSBlbGVQcml2LT5j
b3JlRWxlbWVudCgodm9pZCoqKSZlbGUpOwogICAgICAgICBlbGVQcml2LT5SZWxlYXNlKCk7CiAg
ICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGVsZSAmJiBpc0hUTUxGb3JtRWxlbWVudChlbGUp
KQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVtZW50KGVsZSk7CisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGUpOwogICAgIH0KLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQogewogICAg
IGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgSURPTUVsZW1lbnRQcml2YXRlKiBlbGVQcml2OwogICAgIEhSRVNVTFQgaHIgPSBl
bGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnRQcml2YXRlLCAodm9pZCoqKSAm
ZWxlUHJpdik7CkBAIC0yMjAsOSArMjIwLDkgQEAgc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBlbGVtZW50KQogICAgICAgICBo
ciA9IGVsZVByaXYtPmNvcmVFbGVtZW50KCh2b2lkKiopJmVsZSk7CiAgICAgICAgIGVsZVByaXYt
PlJlbGVhc2UoKTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxlICYmIGlzSFRNTElu
cHV0RWxlbWVudChlbGUpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChl
bGUpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZSk7
CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBXZWJG
cmFtZVByaXZhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlLmNwcAppbmRleCAxZGMwYjRiNTAzMDc0YzJiMWE1NTNjZDg5MDBiZDUxYzUyYWU2OGQ0Li5j
NjEyYzJjMGJhM2IyZjAwM2JmYWRmOGQyNWVlNWRlNzYwNGYzMjRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTE5OSw1NSArMTk5LDU1IEBA
IFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlOjp2aXNpYmxlUmFuZ2UoKSBjCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjpzZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKSkKKyAgICBpZiAoIWlz
SFRNTElucHV0RWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdG9IVE1M
SW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSktPnNldFZhbHVlRm9yVXNlcih2YWx1ZSk7CisgICAg
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0VmFsdWVGb3JVc2VyKHZhbHVl
KTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzSFRNTElucHV0RWxlbWVu
dEF1dG9maWxsZWQoKSBjb25zdAogewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9k
ZS5nZXQoKSkpCisgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KG1fbm9k
ZS5nZXQoKSktPmlzQXV0b2ZpbGxlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PigqbV9ub2RlKS5pc0F1dG9maWxsZWQoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZU5vZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKGJvb2wgZmlsbGVkKQog
ewotICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkpCisgICAgaWYgKCFp
c0hUTUxJbnB1dEVsZW1lbnQoKm1fbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRvSFRN
TElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT5zZXRBdXRvZmlsbGVkKGZpbGxlZCk7CisgICAg
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSkuc2V0QXV0b2ZpbGxlZChmaWxsZWQp
OwogfQogCiBib29sIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6aHRtbElucHV0RWxlbWVudExh
c3RDaGFuZ2VXYXNVc2VyRWRpdCgpCiB7Ci0gICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQobV9u
b2RlLmdldCgpKSkKKyAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudCgqbV9ub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHRvSFRNTElucHV0RWxlbWVudChtX25vZGUu
Z2V0KCkpLT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm1fbm9kZSkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiB9CiAKIGJv
b2wgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpodG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5n
ZVdhc1VzZXJFZGl0KCkKIHsKLSAgICBpZiAoIWlzSFRNTFRleHRBcmVhRWxlbWVudChtX25vZGUu
Z2V0KCkpKQorICAgIGlmICghaXNIVE1MVGV4dEFyZWFFbGVtZW50KCptX25vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fbm9k
ZS5nZXQoKSktPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIHJldHVybiBkb3duY2FzdDxI
VE1MVGV4dEFyZWFFbGVtZW50PigqbV9ub2RlKS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIH0K
IAogYm9vbCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmlzVGV4dEZpZWxkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSkgJiYgdG9IVE1MSW5w
dXRFbGVtZW50KG1fbm9kZS5nZXQoKSktPmlzVGV4dCgpOworICAgIHJldHVybiBpc0hUTUxJbnB1
dEVsZW1lbnQoKm1fbm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fbm9kZSku
aXNUZXh0KCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxUYWJsZUNlbGxFbGVtZW50Q2VsbEFib3ZlKCkKIHsK
ICAgICBpZiAoIW1fbm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBnZXRPckNyZWF0ZShzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KG1fbm9kZS5nZXQoKSktPmNlbGxBYm92ZSgpKTsK
KyAgICByZXR1cm4gZ2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQm
PigqbV9ub2RlKS5jZWxsQWJvdmUoKSk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViRnJhbWU+IEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZTo6ZG9jdW1lbnRGcmFtZSgpCkBAIC0yNzYsMTAgKzI3NiwxMCBA
QCBQYXNzUmVmUHRyPFdlYkZyYW1lPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omh0bWxGcmFt
ZUVsZW1lbnRDb250ZW50RnJhbWUoKQogCiBQYXNzUmVmUHRyPFdlYkZyYW1lPiBJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6Omh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCkKIHsKLSAgICBp
ZiAoIW1fbm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQorICAgIGlmICghaXNIVE1MSUZyYW1l
RWxlbWVudCgqbV9ub2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBGcmFtZSog
ZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG1fbm9kZS5nZXQoKSktPmNvbnRlbnRGcmFtZSgp
OworICAgIEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqbV9ub2Rl
KS5jb250ZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCmluZGV4IGYwNWZkMjUzOWI1
ZTA4NDZhYTRkODcwMzJiZjM5ZGZjYzkzZmZkY2EuLjBjNGE2Y2I5ODFjOTA0NWQxZWJiYjg3Y2Uy
Mjc0NGU1ZDI1ZDA0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KQEAg
LTYxLDcgKzYxLDcgQEAgdm9pZCBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uOjp1cGRhdGVHZW9t
ZXRyeSgpCiAKIHZvaWQgUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6Y29tbWl0KCkKIHsKLSAg
ICBjaG9pY2VBbm5vdGF0aW9uKCkuc3RyaW5nVmFsdWUgPSB0b0hUTUxTZWxlY3RFbGVtZW50KGVs
ZW1lbnQoKSktPnZhbHVlKCk7CisgICAgY2hvaWNlQW5ub3RhdGlvbigpLnN0cmluZ1ZhbHVlID0g
ZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KGVsZW1lbnQoKSktPnZhbHVlKCk7CiAKICAgICBQ
REZQbHVnaW5Bbm5vdGF0aW9uOjpjb21taXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0
aW9uLm1tCmluZGV4IGE1ZDJmNWU2YmI5MzUwMWViNzYwM2U2NTIzOTNjZTE0YjkwMDhkZWQuLmUy
NDBmYzgwYTRmYzc4OGVhMWIwYzg0OTEwMzJmYTE3NjMyYjkxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24u
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5U
ZXh0QW5ub3RhdGlvbi5tbQpAQCAtMTA1LDkgKzEwNSw5IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4g
UERGUGx1Z2luVGV4dEFubm90YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KCkKICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWdu
LCBjc3NBbGlnbm1lbnRWYWx1ZUZvck5TVGV4dEFsaWdubWVudCh0ZXh0QW5ub3RhdGlvbi5hbGln
bm1lbnQpKTsKIAogICAgIGlmIChpc011bHRpbGluZSkKLSAgICAgICAgdG9IVE1MVGV4dEFyZWFF
bGVtZW50KHN0eWxlZEVsZW1lbnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1
ZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQp
LT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAg
ICB0b0hUTUxJbnB1dEVsZW1lbnQoc3R5bGVkRWxlbWVudCktPnNldFZhbHVlKHRleHRBbm5vdGF0
aW9uLnN0cmluZ1ZhbHVlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc3R5
bGVkRWxlbWVudCktPnNldFZhbHVlKHRleHRBbm5vdGF0aW9uLnN0cmluZ1ZhbHVlKTsKIAogICAg
IHJldHVybiBlbGVtZW50OwogfQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUERGUGx1Z2luVGV4
dEFubm90YXRpb246OmNvbW1pdCgpCiAKIFN0cmluZyBQREZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6
dmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
KGVsZW1lbnQoKSktPnZhbHVlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50PihlbGVtZW50KCkpLT52YWx1ZSgpOwogfQogCiBib29sIFBERlBsdWdpblRl
eHRBbm5vdGF0aW9uOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMTAzZjg1NzYyYzBi
YjkxYjgyNjM4NzBmMjc2ZjNkYzQ1ZWJkMjU1OC4uNzYzODM2YmY0MTYzMTNiMWYxZDQ3YjQyNzVi
NGZhMTk1ODQ5OGY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcApAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5p
dGlhbGl6ZVBsdWdpbigpCiAgICAgfQogCiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURf
UExVR0lOX0hFVVJJU1RJQykKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFn
ZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVtZW50LmdldCgp
KTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQuZ2V0KCkpOwogICAg
IG1fZGlkUGx1Z0luU3RhcnRPZmZTY3JlZW4gPSAhbV93ZWJQYWdlLT5wbHVnSW5JbnRlcnNlY3Rz
U2VhcmNoUmVjdCgqcGx1Z0luSW1hZ2VFbGVtZW50KTsKICNlbmRpZgogICAgIG1fcGx1Z2luLT5p
bml0aWFsaXplKHRoaXMsIG1fcGFyYW1ldGVycyk7CkBAIC0xNzEzLDcgKzE3MTMsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fcGx1
Z2luKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMp
Ci0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50KG1fcGx1Z2luRWxlbWVudC5nZXQoKSk7CisgICAgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbklt
YWdlRWxlbWVudD4obV9wbHVnaW5FbGVtZW50LmdldCgpKTsKICAgICBib29sIGlzUGx1Z0luT25T
Y3JlZW4gPSBtX3dlYlBhZ2UtPnBsdWdJbkludGVyc2VjdHNTZWFyY2hSZWN0KCpwbHVnSW5JbWFn
ZUVsZW1lbnQpOwogICAgIGJvb2wgcGx1Z0luQ2FtZU9uU2NyZWVuID0gaXNQbHVnSW5PblNjcmVl
biAmJiBtX2RpZFBsdWdJblN0YXJ0T2ZmU2NyZWVuOwogICAgIGJvb2wgc25hcHNob3RGb3VuZCA9
IGZhbHNlOwpAQCAtMTc4MSw3ICsxNzgxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5EaWRS
ZWNlaXZlVXNlckludGVyYWN0aW9uKCkKIAogICAgIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlv
biA9IHRydWU7CiAKLSAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5J
bWFnZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobV9wbHVnaW5FbGVtZW50Lmdl
dCgpKTsKKyAgICBXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5JbWFnZUVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihtX3BsdWdpbkVsZW1lbnQu
Z2V0KCkpOwogICAgIFN0cmluZyBwYWdlT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKTsK
ICAgICBTdHJpbmcgcGx1Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2FkZWRVcmwo
KS5ob3N0KCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2Fk
ZWRNaW1lVHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGYzYzliZGQ1ZWYwZjU0
NDA4MzRmYWZmOWU3YzI0MDFjYjEzOGNiMjUuLmI1MTc2M2VhNTBkNzE0NDQ0YzczNmU4ZjEwZTM0
YTI2MzhlZmRkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTE4MSwxMyArMTgxLDEz
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCog
ZWxlbWVudCkKICAgICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5w
dXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHQoKSkKKyAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQuaXNUZXh0KCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZy
YW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7
Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS5kaWRGb2N1c1RleHRGaWVs
ZChtX3BhZ2UsIGlucHV0RWxlbWVudCwgd2ViRnJhbWUpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVGb3JtQ2xpZW50KCkuZGlkRm9jdXNUZXh0RmllbGQobV9wYWdlLCAmaW5wdXRFbGVtZW50
LCB3ZWJGcmFtZSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFu
Z2VkKEZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBiZmY3NmYyZTRh
YjRkN2MyYjE4YTZmMjEwM2ZkMDUzYjY1YzA2Zjc0Li4xMjE0MTdlOWRhNjBhODViMzM3MDllZWM5
MDRjNjFhY2FmNjBlZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0zMDEsNyArMzAx
LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVt
ZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29y
ZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFt
ZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KSwgd2ViRnJh
bWUpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkudGV4dEZpZWxkRGlk
QmVnaW5FZGl0aW5nKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCks
IHdlYkZyYW1lKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVk
aXRpbmcoRWxlbWVudCogZWxlbWVudCkKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogICAgIFdl
YkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1
bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9wYWdlLCB0
b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHRGaWVsZERpZEVuZEVkaXRpbmcobV9wYWdlLCBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQp
CkBAIC0zMjUsNyArMzI1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJ
blRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdl
YkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAg
IEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVu
dCgpLnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChl
bGVtZW50KSwgd2ViRnJhbWUsIGluaXRpYXRlZEJ5VXNlclR5cGluZyk7CisgICAgbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQobV9wYWdl
LCBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSwgd2ViRnJhbWUsIGluaXRpYXRl
ZEJ5VXNlclR5cGluZyk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdl
SW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQog
ICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50
LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CiAKLSAgICBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnRleHREaWRDaGFuZ2VJblRleHRBcmVhKG1f
cGFnZSwgdG9IVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpLCB3ZWJGcmFtZSk7CisgICAgbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSht
X3BhZ2UsIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLCB3ZWJGcmFtZSk7
CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDAzLDcgKzQwMyw3IEBAIGJvb2wgV2ViRWRp
dG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwg
S2V5Ym9hcmRFdmVuCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3Jl
RnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CiAgICAgQVNTRVJUKHdlYkZyYW1l
KTsKIAotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3Vs
ZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIHRvSFRNTElucHV0RWxlbWVudChlbGVt
ZW50KSwgdG9JbnB1dEZpZWxkQWN0aW9uKGFjdGlvblR5cGUpLCB3ZWJGcmFtZSk7CisgICAgcmV0
dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuc2hvdWxkUGVyZm9ybUFjdGlv
bkluVGV4dEZpZWxkKG1fcGFnZSwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCks
IHRvSW5wdXRGaWVsZEFjdGlvbihhY3Rpb25UeXBlKSwgd2ViRnJhbWUpOwogfQogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBlbGVt
ZW50KQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJl
RGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgV2ViRnJhbWUqIHdlYkZy
YW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUo
KSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKIAotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVG
b3JtQ2xpZW50KCkuc2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxkKG1fcGFnZSwgdG9IVE1M
SW5wdXRFbGVtZW50KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJbnB1dEZpZWxkQWN0
aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVu
ZGxlRm9ybUNsaWVudCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3BhZ2UsIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rpb24oV0tJ
bnB1dEZpZWxkQWN0aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKIH0KIAogYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdl
YkNvcmU6OlRleHRDaGVja2luZ1R5cGUgdHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlNjJhY2ZkOWM0NmE4NTUxYzNlODQ0
NjJlYTBhMTJlYmVjMTJiZjg2Li41YTdiMmMzMWQ1M2Y0Mzk0ZTljY2ZmYmU5NWIxZGJjYzg4Yjdm
NmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC02MjQsNyArNjI0LDcgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBs
dWdpbihXZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHUKICAgICBTdHJpbmcg
cGFnZVVSTFN0cmluZyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBT
SE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1
Z2luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCpwbHVnaW5FbGVtZW50
KTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5JbWFnZUVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqcGx1Z2luRWxlbWVudCk7CiAgICAgdW5zaWdu
ZWQgcGx1Z2luQXJlYSA9IDA7CiAgICAgUGx1Z2luUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUgPSBw
bHVnaW5FbGVtZW50LT5kaXNwbGF5U3RhdGUoKSA9PSBIVE1MUGx1Z0luRWxlbWVudDo6V2FpdGlu
Z0ZvclNuYXBzaG90ICYmICEocGx1Z0luSXNQcmltYXJ5U2l6ZShwbHVnaW5JbWFnZUVsZW1lbnQs
IHBsdWdpbkFyZWEpICYmICFwbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdChwbHVnaW5JbWFnZUVs
ZW1lbnQpKSA/IFBsdWdpblByb2Nlc3NUeXBlU25hcHNob3QgOiBQbHVnaW5Qcm9jZXNzVHlwZU5v
cm1hbDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMTViOWM5MGFlOTRkZGI2Yjc0MTMyYTI4NzYxODJmOTli
NDkyNTFhYy4uZTc2YjMyMDRiNzRkZjQyNDc4NDA3YTk4OTUxNDExNDVhOWM3Mjg1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQpAQCAtNjEyLDkgKzYxMiw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoIW1fYXNzaXN0ZWROb2RlKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQo
KSkpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCAqZWxlbWVudCA9IHRvSFRNTElucHV0RWxl
bWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZh
bHVlLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQoKm1fYXNzaXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAg
ICAgZWxlbWVudC5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsK
ICAgICB9CiAgICAgLy8gRklYTUU6IHNob3VsZCBhbHNvIGhhbmRsZSB0aGUgY2FzZSBvZiBIVE1M
U2VsZWN0RWxlbWVudC4KIH0KQEAgLTYyMywxOCArNjIzLDE4IEBAIHZvaWQgV2ViUGFnZTo6c2V0
QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiB7CiAgICAgaWYgKCFtX2Fz
c2lzdGVkTm9kZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQo
bV9hc3Npc3RlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQgKmVsZW1l
bnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAgICAgICBl
bGVtZW50LT5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBEaXNw
YXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQoKm1f
YXNzaXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgZWxlbWVu
dC5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBEaXNwYXRjaElu
cHV0QW5kQ2hhbmdlRXZlbnQpOwogICAgIH0KIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRBc3Npc3Rl
ZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxl
Y3Rpb24pCiB7Ci0gICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNIVE1MU2VsZWN0RWxlbWVu
dChtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpCisgICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXNI
VE1MU2VsZWN0RWxlbWVudCgqbV9hc3Npc3RlZE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICBI
VE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSk7Ci0gICAgc2VsZWN0LT5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1
ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVj
dCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOworICAgIHNl
bGVjdC5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVj
dGlvbik7CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTk5MywxMCArMTk5MywxMCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBc3Npc3RhYmxlTm9kZShOb2RlKiBub2RlKQogICAgIGlm
IChpc0hUTUxTZWxlY3RFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBp
ZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gIXRvSFRNTFRl
eHRBcmVhRWxlbWVudChub2RlKS0+aXNSZWFkT25seU5vZGUoKTsKKyAgICAgICAgcmV0dXJuICFk
b3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Pigqbm9kZSkuaXNSZWFkT25seU5vZGUoKTsKICAg
ICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiAh
ZWxlbWVudC0+aXNSZWFkT25seU5vZGUoKSAmJiAoZWxlbWVudC0+aXNUZXh0RmllbGQoKSB8fCBl
bGVtZW50LT5pc0RhdGVGaWVsZCgpIHx8IGVsZW1lbnQtPmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkg
fHwgZWxlbWVudC0+aXNNb250aEZpZWxkKCkgfHwgZWxlbWVudC0+aXNUaW1lRmllbGQoKSk7Cisg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5pc1JlYWRPbmx5Tm9kZSgpICYm
IChlbGVtZW50LmlzVGV4dEZpZWxkKCkgfHwgZWxlbWVudC5pc0RhdGVGaWVsZCgpIHx8IGVsZW1l
bnQuaXNEYXRlVGltZUxvY2FsRmllbGQoKSB8fCBlbGVtZW50LmlzTW9udGhGaWVsZCgpIHx8IGVs
ZW1lbnQuaXNUaW1lRmllbGQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCk7CkBAIC0yMDY2LDgxICsyMDY2LDgyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9u
KQogICAgIGluZm9ybWF0aW9uLmhhc05leHROb2RlID0gaGFzRm9jdXNhYmxlRWxlbWVudChtX2Fz
c2lzdGVkTm9kZS5nZXQoKSwgbV9wYWdlLmdldCgpLCB0cnVlKTsKICAgICBpbmZvcm1hdGlvbi5o
YXNQcmV2aW91c05vZGUgPSBoYXNGb2N1c2FibGVFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgp
LCBtX3BhZ2UuZ2V0KCksIGZhbHNlKTsKIAotICAgIGlmIChpc0hUTUxTZWxlY3RFbGVtZW50KG1f
YXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVu
dCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOworICAgIGlmIChp
c0hUTUxTZWxlY3RFbGVtZW50KCptX2Fzc2lzdGVkTm9kZSkgeworICAgICAgICBIVE1MU2VsZWN0
RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3Rl
ZE5vZGUpOwogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6U2Vs
ZWN0OwotICAgICAgICBzaXplX3QgY291bnQgPSBlbGVtZW50LT5saXN0SXRlbXMoKS5zaXplKCk7
CisgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGVsZW1lbnQubGlz
dEl0ZW1zKCk7CisgICAgICAgIHNpemVfdCBjb3VudCA9IGl0ZW1zLnNpemUoKTsKICAgICAgICAg
aW50IHBhcmVudEdyb3VwSUQgPSAwOwogICAgICAgICAvLyBUaGUgcGFyZW50IGdyb3VwIElEIGlu
ZGljYXRlcyB0aGUgZ3JvdXAgdGhlIG9wdGlvbiBiZWxvbmdzIHRvIGFuZCBpcyAwIGZvciBncm91
cCBlbGVtZW50cy4KICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbiBlbGVtZW50cyBpbiBi
ZXR3ZWVuIGdyb3VwcywgdGhleSBhcmUgZ2l2ZW4gaXQncyBvd24gZ3JvdXAgaWRlbnRpZmllci4K
ICAgICAgICAgLy8gSWYgYSBzZWxlY3QgZG9lcyBub3QgaGF2ZSBncm91cHMsIGFsbCB0aGUgb3B0
aW9uIGVsZW1lbnRzIGhhdmUgZ3JvdXAgSUQgMC4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogaXRlbSA9IGVsZW1l
bnQtPmxpc3RJdGVtcygpW2ldOworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGl0ZW0gPSBpdGVt
c1tpXTsKICAgICAgICAgICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGl0ZW0pKSB7Ci0gICAg
ICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQoaXRlbSk7Ci0gICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0aW9ucy5hcHBl
bmQoT3B0aW9uSXRlbShvcHRpb24tPnRleHQoKSwgZmFsc2UsIHBhcmVudEdyb3VwSUQsIG9wdGlv
bi0+c2VsZWN0ZWQoKSwgb3B0aW9uLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6ZGlzYWJsZWRBdHRyKSkpOworICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBv
cHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOworICAgICAgICAgICAg
ICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0ZW0ob3B0aW9uLnRl
eHQoKSwgZmFsc2UsIHBhcmVudEdyb3VwSUQsIG9wdGlvbi5zZWxlY3RlZCgpLCBvcHRpb24uZmFz
dEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cikpKTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNIVE1MT3B0R3JvdXBFbGVtZW50KGl0ZW0pKSB7Ci0gICAgICAg
ICAgICAgICAgSFRNTE9wdEdyb3VwRWxlbWVudCogZ3JvdXAgPSB0b0hUTUxPcHRHcm91cEVsZW1l
bnQoaXRlbSk7CisgICAgICAgICAgICAgICAgSFRNTE9wdEdyb3VwRWxlbWVudCYgZ3JvdXAgPSBk
b3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqaXRlbSk7CiAgICAgICAgICAgICAgICAgcGFy
ZW50R3JvdXBJRCsrOwotICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMu
YXBwZW5kKE9wdGlvbkl0ZW0oZ3JvdXAtPmdyb3VwTGFiZWxUZXh0KCksIHRydWUsIDAsIGZhbHNl
LCBncm91cC0+ZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0
cikpKTsKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmFwcGVuZChP
cHRpb25JdGVtKGdyb3VwLmdyb3VwTGFiZWxUZXh0KCksIHRydWUsIDAsIGZhbHNlLCBncm91cC5m
YXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdGVkSW5kZXgg
PSBlbGVtZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIGluZm9ybWF0aW9uLmlzTXVsdGlT
ZWxlY3QgPSBlbGVtZW50LT5tdWx0aXBsZSgpOwotICAgIH0gZWxzZSBpZiAoaXNIVE1MVGV4dEFy
ZWFFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAgICAgICBIVE1MVGV4dEFyZWFF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MVGV4dEFyZWFFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdl
dCgpKTsKLSAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gc3RhdGljX2Nh
c3Q8V2ViQXV0b2NhcGl0YWxpemVUeXBlPihlbGVtZW50LT5hdXRvY2FwaXRhbGl6ZVR5cGUoKSk7
Ci0gICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LT5hdXRvY29ycmVj
dCgpOworICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RlZEluZGV4ID0gZWxlbWVudC5zZWxlY3Rl
ZEluZGV4KCk7CisgICAgICAgIGluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3QgPSBlbGVtZW50Lm11
bHRpcGxlKCk7CisgICAgfSBlbHNlIGlmIChpc0hUTUxUZXh0QXJlYUVsZW1lbnQoKm1fYXNzaXN0
ZWROb2RlKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiBlbGVtZW50ID0gZG93bmNh
c3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgaW5mb3Jt
YXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gc3RhdGljX2Nhc3Q8V2ViQXV0b2NhcGl0YWxpemVU
eXBlPihlbGVtZW50LmF1dG9jYXBpdGFsaXplVHlwZSgpKTsKKyAgICAgICAgaW5mb3JtYXRpb24u
aXNBdXRvY29ycmVjdCA9IGVsZW1lbnQuYXV0b2NvcnJlY3QoKTsKICAgICAgICAgaW5mb3JtYXRp
b24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlRleHRBcmVhOwotICAgICAgICBpbmZvcm1hdGlv
bi5pc1JlYWRPbmx5ID0gZWxlbWVudC0+aXNSZWFkT25seSgpOwotICAgICAgICBpbmZvcm1hdGlv
bi52YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7Ci0gICAgfSBlbHNlIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwotICAg
ICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBlbGVtZW50LT5mb3JtKCk7CisgICAgICAgIGlu
Zm9ybWF0aW9uLmlzUmVhZE9ubHkgPSBlbGVtZW50LmlzUmVhZE9ubHkoKTsKKyAgICAgICAgaW5m
b3JtYXRpb24udmFsdWUgPSBlbGVtZW50LnZhbHVlKCk7CisgICAgfSBlbHNlIGlmIChpc0hUTUxJ
bnB1dEVsZW1lbnQoKm1fYXNzaXN0ZWROb2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsK
KyAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAg
IGlmIChmb3JtKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdl
dFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOwotICAgICAgICBp
bmZvcm1hdGlvbi5hdXRvY2FwaXRhbGl6ZVR5cGUgPSBzdGF0aWNfY2FzdDxXZWJBdXRvY2FwaXRh
bGl6ZVR5cGU+KGVsZW1lbnQtPmF1dG9jYXBpdGFsaXplVHlwZSgpKTsKLSAgICAgICAgaW5mb3Jt
YXRpb24uaXNBdXRvY29ycmVjdCA9IGVsZW1lbnQtPmF1dG9jb3JyZWN0KCk7Ci0gICAgICAgIGlm
IChlbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgaW5mb3JtYXRpb24uYXV0b2Nh
cGl0YWxpemVUeXBlID0gc3RhdGljX2Nhc3Q8V2ViQXV0b2NhcGl0YWxpemVUeXBlPihlbGVtZW50
LmF1dG9jYXBpdGFsaXplVHlwZSgpKTsKKyAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvY29ycmVj
dCA9IGVsZW1lbnQuYXV0b2NvcnJlY3QoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQuaXNQYXNzd29y
ZEZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlw
ZTo6UGFzc3dvcmQ7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzU2VhcmNoRmllbGQoKSkK
KyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc1NlYXJjaEZpZWxkKCkpCiAgICAgICAgICAgICBp
bmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6U2VhcmNoOwotICAgICAgICBlbHNl
IGlmIChlbGVtZW50LT5pc0VtYWlsRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5p
c0VtYWlsRmllbGQoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5w
dXRUeXBlOjpFbWFpbDsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNUZWxlcGhvbmVGaWVs
ZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzVGVsZXBob25lRmllbGQoKSkKICAgICAg
ICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpQaG9uZTsKLSAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC0+aXNOdW1iZXJGaWVsZCgpKQotICAgICAgICAgICAgaW5mb3Jt
YXRpb24uZWxlbWVudFR5cGUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoInBhdHRlcm4iKSA9PSAi
XFxkKiIgfHwgZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJwYXR0ZXJuIikgPT0gIlswLTldKiIgPyBJ
bnB1dFR5cGU6Ok51bWJlclBhZCA6IElucHV0VHlwZTo6TnVtYmVyOwotICAgICAgICBlbHNlIGlm
IChlbGVtZW50LT5pc0RhdGVUaW1lTG9jYWxGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVt
ZW50LmlzTnVtYmVyRmllbGQoKSkKKyAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBl
ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInBhdHRlcm4iKSA9PSAiXFxkKiIgfHwgZWxlbWVudC5n
ZXRBdHRyaWJ1dGUoInBhdHRlcm4iKSA9PSAiWzAtOV0qIiA/IElucHV0VHlwZTo6TnVtYmVyUGFk
IDogSW5wdXRUeXBlOjpOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNEYXRlVGlt
ZUxvY2FsRmllbGQoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5w
dXRUeXBlOjpEYXRlVGltZUxvY2FsOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc0RhdGVG
aWVsZCgpKQorICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzRGF0ZUZpZWxkKCkpCiAgICAgICAg
ICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6RGF0ZTsKLSAgICAgICAg
ZWxzZSBpZiAoZWxlbWVudC0+aXNEYXRlVGltZUZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaXNEYXRlVGltZUZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50
VHlwZSA9IElucHV0VHlwZTo6RGF0ZVRpbWU7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlz
VGltZUZpZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNUaW1lRmllbGQoKSkKICAg
ICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpUaW1lOwotICAg
ICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1dlZWtGaWVsZCgpKQorICAgICAgICBlbHNlIGlmIChl
bGVtZW50LmlzV2Vla0ZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSA9IElucHV0VHlwZTo6V2VlazsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNNb250aEZp
ZWxkKCkpCisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNNb250aEZpZWxkKCkpCiAgICAgICAg
ICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6TW9udGg7Ci0gICAgICAg
IGVsc2UgaWYgKGVsZW1lbnQtPmlzVVJMRmllbGQoKSkKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVu
dC5pc1VSTEZpZWxkKCkpCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElu
cHV0VHlwZTo6VVJMOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5pc1RleHQoKSkgewotICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwYXR0ZXJuID0gZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnBhdHRlcm5BdHRyKTsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVu
dC5pc1RleHQoKSkgeworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwYXR0ZXJuID0g
ZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cGF0dGVybkF0dHIpOwogICAgICAg
ICAgICAgaWYgKHBhdHRlcm4gPT0gIlxcZCoiIHx8IHBhdHRlcm4gPT0gIlswLTldKiIpCiAgICAg
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6Ok51bWJlclBh
ZDsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1l
bnRUeXBlID0gSW5wdXRUeXBlOjpUZXh0OwogICAgICAgICAgICAgICAgIGlmICghaW5mb3JtYXRp
b24uZm9ybUFjdGlvbi5pc0VtcHR5KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGVsZW1lbnQt
PmdldE5hbWVBdHRyaWJ1dGUoKS5jb250YWlucygic2VhcmNoIikgfHwgZWxlbWVudC0+Z2V0SWRB
dHRyaWJ1dGUoKS5jb250YWlucygic2VhcmNoIikgfHwgZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OnRpdGxlQXR0cikuY29udGFpbnMoInNlYXJjaCIpKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgKGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpLmNvbnRhaW5zKCJzZWFyY2gi
KSB8fCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkuY29udGFpbnMoInNlYXJjaCIpIHx8IGVsZW1l
bnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnRpdGxlQXR0cikuY29udGFpbnMoInNlYXJj
aCIpKSkKICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1
dFR5cGU6OlNlYXJjaDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGluZm9y
bWF0aW9uLmlzUmVhZE9ubHkgPSBlbGVtZW50LT5pc1JlYWRPbmx5KCk7Ci0gICAgICAgIGluZm9y
bWF0aW9uLnZhbHVlID0gZWxlbWVudC0+dmFsdWUoKTsKLSAgICAgICAgaW5mb3JtYXRpb24udmFs
dWVBc051bWJlciA9IGVsZW1lbnQtPnZhbHVlQXNOdW1iZXIoKTsKLSAgICAgICAgaW5mb3JtYXRp
b24udGl0bGUgPSBlbGVtZW50LT50aXRsZSgpOworICAgICAgICBpbmZvcm1hdGlvbi5pc1JlYWRP
bmx5ID0gZWxlbWVudC5pc1JlYWRPbmx5KCk7CisgICAgICAgIGluZm9ybWF0aW9uLnZhbHVlID0g
ZWxlbWVudC52YWx1ZSgpOworICAgICAgICBpbmZvcm1hdGlvbi52YWx1ZUFzTnVtYmVyID0gZWxl
bWVudC52YWx1ZUFzTnVtYmVyKCk7CisgICAgICAgIGluZm9ybWF0aW9uLnRpdGxlID0gZWxlbWVu
dC50aXRsZSgpOwogICAgIH0gZWxzZSBpZiAobV9hc3Npc3RlZE5vZGUtPmhhc0VkaXRhYmxlU3R5
bGUoKSkgewogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6Q29u
dGVudEVkaXRhYmxlOwogICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gdHJ1ZTsg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGxvb2sgYXQgdGhlIGF0dHJpYnV0ZT8K
</data>

          </attachment>
      

    </bug>

</bugzilla>