<?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>105324</bug_id>
          
          <creation_ts>2012-12-18 10:38:00 -0800</creation_ts>
          <short_desc>Use ElementTraversal in LiveNodeListBase</short_desc>
          <delta_ts>2013-06-20 10:45:34 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>graouts</cc>
    
    <cc>kling</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>793808</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-18 10:38:00 -0800</bug_when>
    <thetext>We should use ElementTraversal when traversing elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793832</commentid>
    <comment_count>1</comment_count>
      <attachid>179980</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-18 10:55:58 -0800</bug_when>
    <thetext>Created attachment 179980
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793837</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 10:59:07 -0800</bug_when>
    <thetext>Attachment 179980 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/HTMLCollection.cpp:316:  The parameter name &quot;nodeList&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/HTMLCollection.cpp:316:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/dom/TagNodeList.h:39:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/dom/TagNodeList.h:51:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/HTMLCollection.h:67:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 5 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793842</commentid>
    <comment_count>3</comment_count>
      <attachid>179981</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-18 11:05:48 -0800</bug_when>
    <thetext>Created attachment 179981
with less style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793896</commentid>
    <comment_count>4</comment_count>
      <attachid>179980</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-18 11:49:46 -0800</bug_when>
    <thetext>Comment on attachment 179980
patch

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

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

Leading whitespace.

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

Ditto.

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

Ditto.

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

Ditto for the rest of the change log entry.

&gt; Source/WebCore/ChangeLog:27
&gt; +            Root is always ContainerNode if the list has anything in it. Traversal functions are slightly more

Root is always ContainerNode. period. We only instantiate LiveNodeListBase on Document or Element.

&gt; Source/WebCore/dom/LiveNodeList.cpp:59
&gt; +    if (!rootNode-&gt;isContainerNode())
&gt; +        return 0;

I don&apos;t think this can ever occur. m_ownerNode is always element or document, and root node can only be m_ownerNode or its ancestor.

&gt; Source/WebCore/dom/TagNodeList.h:45
&gt; -            return adoptRef(new TagNodeList(rootNode, starAtom, localName));
&gt; +            return adoptRef(new TagNodeList(rootNode, TagNodeListType, starAtom, localName));

You can just pass in type here.

&gt; Source/WebCore/html/HTMLCollection.cpp:382
&gt; +    if (type() == HTMLTagNodeListType)
&gt; +        return firstMatchingElement(static_cast&lt;const HTMLTagNodeList*&gt;(this), root);
&gt; +    if (type() == ClassNodeListType)
&gt; +        return firstMatchingElement(static_cast&lt;const ClassNodeList*&gt;(this), root);

So the reason you&apos;re cherry-picking these is because they&apos;re most frequently used?
Why don&apos;t we just special-case ChildNodeListType and then handle the rest in isAcceptableElement instead? There isn&apos;t really a point in differentiating NodeList and HTMLCollection here.

&gt; Source/WebCore/html/HTMLCollection.cpp:470
&gt; +    ContainerNode* root = rootContainerNode();
&gt; +    if (!root) {
&gt; +        setLengthCache(0);
&gt; +        return 0;
&gt; +    }

It&apos;s really strange that rootContainerNode could ever return 0. Do you recall when that happened?
We probably need to fix that bug first.

&gt; Source/WebCore/html/HTMLCollection.cpp:522
&gt; +        currentItem = traverseForwardToOffset(offset, currentItem, currentOffset, root);
&gt; +    else
&gt; +        currentItem = static_cast&lt;const HTMLCollection*&gt;(this)-&gt;traverseForwardToOffset(offset, toElement(currentItem), currentOffset, offsetInArray, root);

Note that we know currentOffset != offset at this point.

&gt; Source/WebCore/html/HTMLCollection.cpp:584
&gt; +        offsetInArray = m_cachedElementsArrayOffset;
&gt; +        while (currentOffset != offset &amp;&amp; (currentElement = virtualItemAfter(offsetInArray, currentElement)))
&gt; +            ++currentOffset;

This doesn&apos;t seem right virtualItemAfter needs to update m_cachedElementsArrayOffset. You probably need to enable microdata in order to test this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793933</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-18 12:24:11 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 179980 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=179980&amp;action=review
&gt;
&gt; &gt; Source/WebCore/html/HTMLCollection.cpp:584
&gt; &gt; +        offsetInArray = m_cachedElementsArrayOffset;
&gt; &gt; +        while (currentOffset != offset &amp;&amp; (currentElement = virtualItemAfter(offsetInArray, currentElement)))
&gt; &gt; +            ++currentOffset;
&gt; 
&gt; This doesn&apos;t seem right virtualItemAfter needs to update m_cachedElementsArrayOffset. You probably need to enable microdata in order to test this change.

Forget about this comment. I misread your code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794281</commentid>
    <comment_count>6</comment_count>
      <attachid>179981</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 19:34:26 -0800</bug_when>
    <thetext>Comment on attachment 179981
with less style errors

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

New failing tests:
fast/forms/form-collection-radio-node-list.html
fast/forms/fieldset/fieldset-elements.html
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html
fast/forms/fieldset/fieldset-form-collection-radionode-list.html
inspector/console/console-format-collections.html
dom/html/level2/html/HTMLFormElement01.html
fast/forms/formmove.html
fast/forms/elements-invalidate-on-form-attribute-invalidation.html
fast/forms/update-form-attribute-element.html
fast/dom/HTMLFormElement/elements-not-in-document.html
fast/forms/form-collection-elements-order.html
fast/forms/button-in-forms-collection.html
fast/forms/element-order.html
dom/xhtml/level2/html/HTMLFormElement01.xhtml
fast/forms/form-collection-elements.html
fast/dom/html-collections-named-getter.html
fast/forms/form-attribute-elements.html
fast/forms/formmove2.html
jquery/traversing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794743</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-19 09:27:06 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Root is always ContainerNode. period. We only instantiate LiveNodeListBase on Document or Element.

This is not true. At least Text.childNodes will have Text as root. It would be better handled elsewhere but that is out of scope of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794751</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-19 09:40:39 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; Root is always ContainerNode. period. We only instantiate LiveNodeListBase on Document or Element.
&gt; 
&gt; This is not true. At least Text.childNodes will have Text as root. It would be better handled elsewhere but that is out of scope of this patch.

Right, we discussed this on IRC. We definitely need to make this saner at some point though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794768</commentid>
    <comment_count>9</comment_count>
      <attachid>180186</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-19 09:57:56 -0800</bug_when>
    <thetext>Created attachment 180186
patch3

Some changes as discussed with Ryosuke

- removed isAcceptableElement(), always use isMatchingElement templates instead
- separated ChildNodeList iteration function. It is the only one that operates on Nodes instead of Elements.
- bring back the accidentally removed ALWAYS_INLINEs for the backwards case

Also made it less buggy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794914</commentid>
    <comment_count>10</comment_count>
      <attachid>180186</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-19 14:01:06 -0800</bug_when>
    <thetext>Comment on attachment 180186
patch3

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

&gt; Source/WebCore/dom/LiveNodeList.cpp:57
&gt; +    Node* rootNode = this-&gt;rootNode();

Do we need &quot;this-&gt;&quot;?

&gt; Source/WebCore/html/HTMLCollection.cpp:204
&gt; +template &lt;&gt; inline bool isMatchingElement(const HTMLCollection* htmlCollection, Element* element)

Nice! It might make sense to specialize this function further for common html collections like element.children &amp; document.all (of course in a follow up patch).

&gt; Source/WebCore/html/HTMLCollection.cpp:277
&gt; +template &lt;&gt; inline bool isMatchingElement(const HTMLTagNodeList* nodeList, Element* element)
&gt; +{
&gt; +    return nodeList-&gt;nodeMatchesInlined(element);
&gt; +}

Would it make sense to define this specialization in TagNodeList.h instead? (No need to do this in this patch).

&gt; Source/WebCore/html/HTMLCollection.cpp:327
&gt;      if (isNodeList(type()) &amp;&amp; shouldOnlyIncludeDirectChildren()) // ChildNodeList

Can we change this to type() == ChildNodeList? If not, I&apos;ll do that.

&gt; Source/WebCore/html/HTMLCollection.cpp:371
&gt; +    while (currentOffset != offset &amp;&amp; (currentElement = nextMatchingElement(nodeList, currentElement, root)))

Can we assert that ASSERT(currentOffset &lt; offset); at the beginning?

&gt; Source/WebCore/html/HTMLCollection.cpp:380
&gt; +    ASSERT(!overridesItemAfter());

I don&apos;t think this assertion is useful given that we&apos;re already asserting type() is ChildNodeListType since only HTMLCollection overrides itemAfter.

&gt; Source/WebCore/html/HTMLCollection.cpp:381
&gt; +    while (currentOffset != offset &amp;&amp; (currentNode = currentNode-&gt;nextSibling()))

Ditto about asserting currentOffset &lt; offset.

&gt; Source/WebCore/html/HTMLCollection.cpp:528
&gt; +    if (type() == ChildNodeListType) {
&gt; +        currentItem = traverseChildNodeListForwardToOffset(offset, currentItem, currentOffset);
&gt; +    } else if (isNodeList(type()))

Nit: We don&apos;t need curly brackets here.

&gt; Source/WebCore/html/HTMLCollection.cpp:579
&gt; +    if (overridesItemAfter())

We can add UNLIKELY here as well although I don&apos;t think it&apos;ll matter.

&gt; Source/WebCore/html/HTMLCollection.cpp:583
&gt; +    if (shouldOnlyIncludeDirectChildren())
&gt; +        return firstMatchingChildElement(static_cast&lt;const HTMLCollection*&gt;(this), root);

It&apos;ll be nice if we could merge this code with childNodes somehow.

&gt; Source/WebCore/html/HTMLCollection.cpp:601
&gt; +    if (overridesItemAfter()) {

UNLIKELY?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794963</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-19 14:44:00 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/138195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794968</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-19 14:52:20 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Do we need &quot;this-&gt;&quot;?

Yeah, the local variable hides the function.

&gt; Can we change this to type() == ChildNodeList? If not, I&apos;ll do that.

Done. 

&gt; Can we assert that ASSERT(currentOffset &lt; offset); at the beginning?

Did these.

&gt; &gt; +    ASSERT(!overridesItemAfter());
&gt; 
&gt; I don&apos;t think this assertion is useful given that we&apos;re already asserting type() is ChildNodeListType since only HTMLCollection overrides itemAfter.

Removed.

&gt; We can add UNLIKELY here as well although I don&apos;t think it&apos;ll matter.

Removed the remaining UNLIKELY. Since the branches are now outside of loops, they are unlikely to make a difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795329</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-20 03:28:12 -0800</bug_when>
    <thetext>Looks like this was ~15% progression in DOM/GridSort and ~3% progression in DOM/DOMDivWalk:

http://webkit-perf.appspot.com/graph.html#tests=[[9106,2001,32196],[6104,2001,32196]]&amp;sel=none&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902166</commentid>
    <comment_count>14</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-06-20 08:46:57 -0700</bug_when>
    <thetext>This changed caused https://bugs.webkit.org/show_bug.cgi?id=117836.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902207</commentid>
    <comment_count>15</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-06-20 10:45:34 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; This changed caused https://bugs.webkit.org/show_bug.cgi?id=117836.

Except it didn&apos;t, it was actually the change for http://webkit.org/b/115584. Sorry for the noise.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179980</attachid>
            <date>2012-12-18 10:55:58 -0800</date>
            <delta_ts>2012-12-18 11:49:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>node-list-traversal-5.patch</filename>
            <type>text/plain</type>
            <size>33188</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODAzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEVsZW1lbnRUcmF2ZXJz
YWwgaW4gTGl2ZU5vZGVMaXN0QmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1MzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRmFjdG9yIHRoZSBjb2RlIHNvIHRoYXQgd2UgZ2V0IGNsZWFuIG1pbmlt
YWxseSBicmFuY2h5IHRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIGFsbCB0aGUgY29tbW9uIGNhc2Vz
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBtb3JlIHBlcmZvcm1h
bmNlIGNyaXRpY2FsIGZvcndhcmQgdHJhdmVyc2FsIG9ubHksIGJhY2t3YXJkcyB0cmF2ZXJzYWwg
aXMgdW5hZmZlY3RlZCBmb3Igbm93LgorICAgICAgICAKKyAgICAgICAgSW5zdHJ1bWVudHMgdGhp
bmtzIGl0IGlzIGEgcHJvZ3Jlc3Npb24gYXQgbGVhc3QgaW4gRE9NL0RPTURpdldhbGsuaHRtbC4g
Qm90cyBzaG91bGQgdGVsbCBtb3JlLgorICAgICAgICAKKyAgICAgICAgKiBkb20vQ2xhc3NOb2Rl
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6
CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3QuaDoKKyAgICAgICAgKENsYXNzTm9kZUxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlzdDo6bm9kZU1hdGNoZXNJbmxp
bmVkKToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgaW5saW5lZCB2ZXJzaW9uIG9mIHRoZSBt
YXRjaGluZyBmdW5jdGlvbiBmb3IgY2xhc3MgbGlzdHMuCisKKyAgICAgICAgKiBkb20vTGl2ZU5v
ZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdEJhc2U6OnJvb3RDb250
YWluZXJOb2RlKToKKyAgICAgICAgCisgICAgICAgICAgICBSb290IGlzIGFsd2F5cyBDb250YWlu
ZXJOb2RlIGlmIHRoZSBsaXN0IGhhcyBhbnl0aGluZyBpbiBpdC4gVHJhdmVyc2FsIGZ1bmN0aW9u
cyBhcmUgc2xpZ2h0bHkgbW9yZQorICAgICAgICAgICAgZWZmaWNpZW50IGlmIHdlIGtub3cgd2Ug
YXJlIG9wZXJhdGluZyBvbiBDb250YWluZXJOb2Rlcy4KKworICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogZG9tL0xpdmVOb2RlTGlzdC5oOgorICAgICAgICAoTGl2ZU5vZGVMaXN0QmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNlOjpzaG91bGRPbmx5SW5jbHVkZURp
cmVjdENoaWxkcmVuKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZSk6CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUYWdOb2RlTGlzdDo6flRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWdOb2RlTGlzdDo6SFRNTFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXMpOgorICAgICAgICAqIGRvbS9UYWdOb2RlTGlz
dC5oOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChU
YWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFnTm9kZUxpc3Q6OmNyZWF0ZSk6
CisgICAgICAgIAorICAgICAgICAgICAgVXNlIHNlcGFyYXRlIENvbnRhaW5lclR5cGUgZW51bSB2
YWx1ZSBmb3IgSFRNTFRhZ05vZGVMaXN0IHNvIHdlIGNhbiB0ZWxsIGl0IGFwYXJ0IGZyb20gVGFn
Tm9kZUxpc3QuCisKKyAgICAgICAgKEhUTUxUYWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXNJbmxpbmVk
KToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgaW5saW5lZCB2ZXJzaW9uIG9mIHRoZSBtYXRj
aGluZyBmdW5jdGlvbiBmb3IgdGFnIGxpc3RzLgorCisgICAgICAgICogaHRtbC9Db2xsZWN0aW9u
VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
Ojpyb290VHlwZUZyb21Db2xsZWN0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjppbnZhbGlk
YXRpb25UeXBlRXhjbHVkaW5nSWRBbmROYW1lQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0FjY2VwdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpsYXN0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9k
ZUxpc3RCYXNlOjppdGVyYXRlRm9yUHJldmlvdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
dmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmUpOgorICAgICAgICAKKyAgICAgICAgICAgIExlYXZl
IHRoZSBiYWNrd2FyZHMgdHJhdmVyc2FsIHVuY2hhbmdlZCBmb3Igbm93IGJ1dCByZW1vdmUgdGhl
IGZvcndhcmQgdHJhdmVyc2FsIGNvZGUuCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNNYXRjaGluZ0VsZW1lbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIExpc3Qg
dHlwZSB0ZW1wbGF0ZWQgbWF0Y2hpbmcgZnVuY3Rpb25zIGZvciBjb21tb24gY2FzZXMuCisKKyAg
ICAgICAgKFdlYkNvcmU6OmZpcnN0TWF0Y2hpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Om5leHRNYXRjaGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RNYXRjaGluZ0No
aWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0TWF0Y2hpbmdDaGlsZEVsZW1lbnQp
OgorICAgICAgICAKKyAgICAgICAgICAgTGlzdCB0eXBlIHRlbXBsYXRlZCB0cmF2ZXJzYWwgZnVu
Y3Rpb25zIHdpdGggbWF0Y2hpbmcuIFNlcGFyYXRlIGNhc2VzIGZvciBmaXJzdCBhbmQgc3Vic2Vx
dWVudCBlbGVtZW50cy4KKworICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFzZTo6dHJh
dmVyc2VGaXJzdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VNYXRjaGluZ0VsZW1l
bnRzRm9yd2FyZFRvT2Zmc2V0KToKKyAgICAgICAgCisgICAgICAgICAgICBOb2RlTGlzdCB0cmF2
ZXJzYWwsIHBpY2tpbmcgdGhlIHJpZ2h0IHRlbXBsYXRlLgorCisgICAgICAgIChXZWJDb3JlOjpM
aXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUZvcndhcmRUb09mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpMaXZlTm9kZUxpc3RCYXNlOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2Rl
TGlzdEJhc2U6Oml0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSk6CisgICAgICAgIAorICAgICAg
ICAgICAgU3dpdGNoIHRvIG5ldyB0cmF2ZXJzYWwgZnVuY3Rpb25zLgorCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGaXJzdEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb246OnRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KToKKyAgICAgICAg
CisgICAgICAgICAgICBIVE1MQ29sbGVjdGlvbiB0cmF2ZXJzYWwsIHBpY2tpbmcgdGhlIHJpZ2h0
IHRlbXBsYXRlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VO
ZXh0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgor
ICAgICAgICAKKyAgICAgICAgICAgIFN3aXRjaCB0byBuZXcgdHJhdmVyc2FsIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxDb2xsZWN0
aW9uKToKKwogMjAxMi0xMi0xOCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJFR1JFU1NJT04ocjEzNjMyNCk6IGZsZXggaXRlbXMgd2l0aCBwZXJjZW50IGhlaWdo
dHMgbm90IHJlc2l6aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDE1ICs1MCw3IEBAIENsYXNzTm9kZUxpc3Q6On5DbGFzc05v
ZGVMaXN0KCkKIAogYm9vbCBDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0
Tm9kZSkgY29uc3QKIHsKLSAgICBpZiAoIXRlc3ROb2RlLT5oYXNDbGFzcygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NsYXNzTmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IERPTTQgYWxsb3dzIGdldEVsZW1lbnRzQnlDbGFzc05h
bWUgdG8gcmV0dXJuIG5vbiBTdHlsZWRFbGVtZW50LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDcxOAotICAgIGlmICghdGVzdE5vZGUtPmlzU3R5bGVk
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRlc3ROb2RlLT5j
bGFzc05hbWVzKCkuY29udGFpbnNBbGwobV9jbGFzc05hbWVzKTsKKyAgICByZXR1cm4gbm9kZU1h
dGNoZXNJbmxpbmVkKHRlc3ROb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOSAr
MzAsNDUgQEAKICNpZm5kZWYgQ2xhc3NOb2RlTGlzdF9oCiAjZGVmaW5lIENsYXNzTm9kZUxpc3Rf
aAogCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkxpdmVOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVM
aXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsYXNzTm9kZUxp
c3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNz
TmFtZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xhc3NO
b2RlTGlzdChyb290Tm9kZSwgY2xhc3NOYW1lcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB+Q2xhc3NOb2RlTGlzdCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2xhc3NOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMp
OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7Ci0K
LSAgICAgICAgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7Ci0gICAgICAgIFN0cmluZyBt
X29yaWdpbmFsQ2xhc3NOYW1lczsKLSAgICB9OworY2xhc3MgQ2xhc3NOb2RlTGlzdCA6IHB1Ymxp
YyBMaXZlTm9kZUxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsYXNzTm9k
ZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNs
YXNzTmFtZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsYXNzTm9kZUxp
c3Qocm9vdE5vZGUsIGNsYXNzTmFtZXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DbGFzc05v
ZGVMaXN0KCk7CisKKyAgICBib29sIG5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgQ2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpOworCisgICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKEVsZW1lbnQqKSBjb25zdDsKKworICAgIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVz
OworICAgIFN0cmluZyBtX29yaWdpbmFsQ2xhc3NOYW1lczsKK307CisKK2lubGluZSBib29sIENs
YXNzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QK
K3sKKyAgICBpZiAoIXRlc3ROb2RlLT5oYXNDbGFzcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFtX2NsYXNzTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgLy8gRklYTUU6IERPTTQgYWxsb3dzIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgdG8gcmV0dXJu
IG5vbiBTdHlsZWRFbGVtZW50LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NDcxOAorICAgIGlmICghdGVzdE5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRlc3ROb2RlLT5jbGFzc05hbWVzKCku
Y29udGFpbnNBbGwobV9jbGFzc05hbWVzKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTM3NzE1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDYgKzUyLDE0IEBAIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6OnJvb3ROb2RlKCkgY29uc3QK
ICAgICByZXR1cm4gbV9vd25lck5vZGUuZ2V0KCk7CiB9CiAKK0NvbnRhaW5lck5vZGUqIExpdmVO
b2RlTGlzdEJhc2U6OnJvb3RDb250YWluZXJOb2RlKCkgY29uc3QKK3sKKyAgICBOb2RlKiByb290
Tm9kZSA9IHRoaXMtPnJvb3ROb2RlKCk7CisgICAgaWYgKCFyb290Tm9kZS0+aXNDb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUocm9v
dE5vZGUpOworfQorCiB2b2lkIExpdmVOb2RlTGlzdEJhc2U6OmludmFsaWRhdGVDYWNoZSgpIGNv
bnN0CiB7CiAgICAgbV9jYWNoZWRJdGVtID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9M
aXZlTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVM
aXN0LmgJKHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHB1YmxpYzoKIHByb3RlY3Rl
ZDoKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZS0+
ZG9jdW1lbnQoKTsgfQogICAgIE5vZGUqIHJvb3ROb2RlKCkgY29uc3Q7CisgICAgQ29udGFpbmVy
Tm9kZSogcm9vdENvbnRhaW5lck5vZGUoKSBjb25zdDsKICAgICBib29sIG92ZXJyaWRlc0l0ZW1B
ZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVzSXRlbUFmdGVyOyB9CiAKICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVt
Q2FjaGVWYWxpZDsgfQpAQCAtMTMzLDE1ICsxMzQsMTUgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wg
aGFzTmFtZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pc05hbWVDYWNoZVZhbGlkOyB9CiAgICAg
dm9pZCBzZXRIYXNOYW1lQ2FjaGUoKSBjb25zdCB7IG1faXNOYW1lQ2FjaGVWYWxpZCA9IHRydWU7
IH0KIAotICAgIE5vZGUqIGl0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0OwotICAgIE5vZGUqIGl0ZW1BZnRlcih1bnNpZ25lZCYsIE5vZGUqIHByZXZpb3Vz
SXRlbSkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuOyB9CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuOyB9CisgICAgTm9kZSog
aXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCwgQ29udGFpbmVyTm9k
ZSogcm9vdCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VGaXJzdE5vZGUoQ29udGFpbmVyTm9k
ZSogcm9vdCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VGb3J3YXJkVG9PZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENv
bnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0SXRlbUNsb3NlclRoYW5M
YXN0T3JDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZpcnN0
SXRlbUNsb3NlclRoYW5DYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7Ci0gICAgdGVt
cGxhdGUgPGJvb2wgZm9yd2FyZD4gTm9kZSogaXRlcmF0ZUZvck5leHROb2RlKE5vZGUqIGN1cnJl
bnQpIGNvbnN0OwotICAgIHRlbXBsYXRlPGJvb2wgZm9yd2FyZD4gTm9kZSogaXRlbUJlZm9yZU9y
QWZ0ZXIoTm9kZSogcHJldmlvdXNJdGVtKSBjb25zdDsgICAgCisgICAgTm9kZSogaXRlcmF0ZUZv
clByZXZpb3VzTm9kZShOb2RlKiBjdXJyZW50KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmVmb3Jl
KE5vZGUqIHByZXZpb3VzSXRlbSkgY29uc3Q7CiAKICAgICBSZWZQdHI8Tm9kZT4gbV9vd25lck5v
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTUsNyArMTM1NSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNO
YW1lPEhUTUxUYWdOb2RlTGlzdD4odGhpcywgVGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOwor
ICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENh
Y2hlV2l0aEF0b21pY05hbWU8SFRNTFRhZ05vZGVMaXN0Pih0aGlzLCBIVE1MVGFnTm9kZUxpc3RU
eXBlLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2Rl
TGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxUYWdOb2RlTGlzdD4odGhpcywgVGFnTm9k
ZUxpc3RUeXBlLCBsb2NhbE5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFn
Tm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlz
dC5jcHAJKHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1UYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lKQotICAgIDogTGl2ZU5vZGVMaXN0KHJvb3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUs
IERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcykKK1RhZ05vZGVMaXN0OjpUYWdOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCisgICAgOiBMaXZlTm9kZUxpc3Qocm9vdE5vZGUsIHR5cGUsIERvTm90SW52YWxpZGF0ZU9u
QXR0cmlidXRlQ2hhbmdlcykKICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAg
ICAsIG1fbG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKQEAgLTQxLDcgKzQxLDcgQEAgVGFnTm9kZUxp
c3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZQogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlz
dCgpCiB7CiAgICAgaWYgKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKQotICAgICAgICBvd25l
ck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgVGFn
Tm9kZUxpc3RUeXBlLCBtX2xvY2FsTmFtZSk7CisgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlz
dHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCB0eXBlKCksIG1fbG9jYWxOYW1l
KTsKICAgICBlbHNlCiAgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2Fj
aGVXaXRoUXVhbGlmaWVkTmFtZSh0aGlzLCBtX25hbWVzcGFjZVVSSSwgbV9sb2NhbE5hbWUpOwog
fQpAQCAtNTYsMjIgKzU2LDE0IEBAIGJvb2wgVGFnTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1l
bnQqIHQKIH0KIAogSFRNTFRhZ05vZGVMaXN0OjpIVE1MVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgOiBUYWdO
b2RlTGlzdChyb290Tm9kZSwgc3RhckF0b20sIGxvY2FsTmFtZSkKKyAgICA6IFRhZ05vZGVMaXN0
KHJvb3ROb2RlLCBIVE1MVGFnTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSwgbG9jYWxOYW1lKQogICAg
ICwgbV9sb3dlcmVkTG9jYWxOYW1lKGxvY2FsTmFtZS5sb3dlcigpKQogewogfQogCiBib29sIEhU
TUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVzdE5vZGUpIGNvbnN0CiB7Ci0g
ICAgLy8gSW1wbGVtZW50cyBodHRwOi8vZHZjcy53My5vcmcvaGcvZG9tY29yZS9yYXctZmlsZS90
aXAvT3ZlcnZpZXcuaHRtbCNjb25jZXB0LWdldGVsZW1lbnRzYnl0YWduYW1lCi0gICAgaWYgKG1f
bG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lID0gdGVzdE5vZGUtPmlzSFRNTEVsZW1lbnQoKSA/IG1fbG93ZXJlZExvY2FsTmFtZSA6
IG1fbG9jYWxOYW1lOwotICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRlc3ROb2RlLT5sb2NhbE5h
bWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9u
YW1lc3BhY2VVUkkgPT0gc3RhckF0b20pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBu
b2RlTWF0Y2hlc0lubGluZWQodGVzdE5vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkocmV2aXNpb24gMTM3NzE1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDcgQEAKICNpZm5kZWYgVGFnTm9kZUxpc3RfaAogI2RlZmluZSBUYWdOb2RlTGlzdF9oCiAKKyNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGl2ZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKQEAgLTM1LDE5ICszNiwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgICAgICB7CiAgICAgICAgICAg
ICBBU1NFUlQobmFtZXNwYWNlVVJJICE9IHN0YXJBdG9tKTsKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGFnTm9kZUxpc3Qocm9vdE5vZGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1l
KSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVMaXN0KHJvb3ROb2Rl
LCBUYWdOb2RlTGlzdFR5cGUsbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0
cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwg
dHlwZSA9PSBUYWdOb2RlTGlzdFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUYWdOb2RlTGlzdChyb290Tm9kZSwgc3RhckF0b20sIGxvY2FsTmFtZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYWdOb2RlTGlzdChyb290Tm9kZSwgVGFnTm9kZUxpc3RU
eXBlLCBzdGFyQXRvbSwgbG9jYWxOYW1lKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFs
IH5UYWdOb2RlTGlzdCgpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBUYWdOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOworICAgICAgICBUYWdOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CiAKQEAg
LTU5LDEwICs2MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBl
ID09IFRhZ05vZGVMaXN0VHlwZSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5
cGUgPT0gSFRNTFRhZ05vZGVMaXN0VHlwZSk7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxUYWdOb2RlTGlzdChyb290Tm9kZSwgbG9jYWxOYW1lKSk7CiAgICAgICAgIH0KIAor
ICAgICAgICBib29sIG5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KikgY29uc3Q7CisKICAgICBw
cml2YXRlOgogICAgICAgICBIVE1MVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCkBAIC03MCw2ICs3MywxOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgQXRvbWljU3RyaW5nIG1fbG93ZXJlZExvY2Fs
TmFtZTsKICAgICB9OworCitpbmxpbmUgYm9vbCBIVE1MVGFnTm9kZUxpc3Q6Om5vZGVNYXRjaGVz
SW5saW5lZChFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKK3sKKyAgICAvLyBJbXBsZW1lbnRzIGh0
dHA6Ly9kdmNzLnczLm9yZy9oZy9kb21jb3JlL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sI2Nv
bmNlcHQtZ2V0ZWxlbWVudHNieXRhZ25hbWUKKyAgICBpZiAobV9sb2NhbE5hbWUgIT0gc3RhckF0
b20pIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSB0ZXN0Tm9kZS0+
aXNIVE1MRWxlbWVudCgpID8gbV9sb3dlcmVkTG9jYWxOYW1lIDogbV9sb2NhbE5hbWU7CisgICAg
ICAgIGlmIChsb2NhbE5hbWUgIT0gdGVzdE5vZGUtPmxvY2FsTmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBBU1NFUlQobV9uYW1lc3BhY2VVUkkgPT0gc3RhckF0
b20pOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBUYWdOb2RlTGlzdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rp
b25UeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlw
ZS5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25U
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgZW51bSBDb2xsZWN0aW9uVHlw
ZSB7CiAgICAgQ2xhc3NOb2RlTGlzdFR5cGUsCiAgICAgTmFtZU5vZGVMaXN0VHlwZSwKICAgICBU
YWdOb2RlTGlzdFR5cGUsCisgICAgSFRNTFRhZ05vZGVMaXN0VHlwZSwKICAgICBSYWRpb05vZGVM
aXN0VHlwZSwKICAgICBMYWJlbHNOb2RlTGlzdFR5cGUsCiAgICAgTWljcm9EYXRhSXRlbUxpc3RU
eXBlLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSFRNTENvbGxlY3Rpb24uaCIKIAorI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgpAQCAtNzUsNiArNzYsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRPbmx5SW5j
bHVkZURpcmVjdENoaWxkCiAgICAgY2FzZSBDbGFzc05vZGVMaXN0VHlwZToKICAgICBjYXNlIE5h
bWVOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBUYWdOb2RlTGlzdFR5cGU6CisgICAgY2FzZSBIVE1M
VGFnTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgUmFkaW9Ob2RlTGlzdFR5cGU6CiAgICAgY2FzZSBM
YWJlbHNOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBNaWNyb0RhdGFJdGVtTGlzdFR5cGU6CkBAIC0x
MTcsNiArMTE5LDcgQEAgc3RhdGljIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGVGcm9tQ29sbAog
ICAgIGNhc2UgQ2xhc3NOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBOYW1lTm9kZUxpc3RUeXBlOgog
ICAgIGNhc2UgVGFnTm9kZUxpc3RUeXBlOgorICAgIGNhc2UgSFRNTFRhZ05vZGVMaXN0VHlwZToK
ICAgICBjYXNlIFJhZGlvTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTGFiZWxzTm9kZUxpc3RUeXBl
OgogICAgIGNhc2UgTWljcm9EYXRhSXRlbUxpc3RUeXBlOgpAQCAtMTY2LDYgKzE2OSw3IEBAIHN0
YXRpYyBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGEKICAgICBjYXNlIENsYXNzTm9k
ZUxpc3RUeXBlOgogICAgIGNhc2UgTmFtZU5vZGVMaXN0VHlwZToKICAgICBjYXNlIFRhZ05vZGVM
aXN0VHlwZToKKyAgICBjYXNlIEhUTUxUYWdOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBSYWRpb05v
ZGVMaXN0VHlwZToKICAgICBjYXNlIExhYmVsc05vZGVMaXN0VHlwZToKICAgICBjYXNlIE1pY3Jv
RGF0YUl0ZW1MaXN0VHlwZToKQEAgLTI0OSw2ICsyNTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNBY2NlcHRhYmxlRWxlbWVudChDCiAgICAgY2FzZSBDbGFzc05vZGVMaXN0VHlwZToKICAgICBj
YXNlIE5hbWVOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBUYWdOb2RlTGlzdFR5cGU6CisgICAgY2Fz
ZSBIVE1MVGFnTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgUmFkaW9Ob2RlTGlzdFR5cGU6CiAgICAg
Y2FzZSBMYWJlbHNOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBNaWNyb0RhdGFJdGVtTGlzdFR5cGU6
CkBAIC0yNTgsMTMgKzI2Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FjY2VwdGFibGVFbGVt
ZW50KEMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPGJvb2wgZm9yd2FyZD4KLXN0
YXRpYyBOb2RlKiBuZXh0Tm9kZShOb2RlKiBiYXNlLCBOb2RlKiBwcmV2aW91cywgYm9vbCBvbmx5
SW5jbHVkZURpcmVjdENoaWxkcmVuKQorc3RhdGljIE5vZGUqIHByZXZpb3VzTm9kZShOb2RlKiBi
YXNlLCBOb2RlKiBwcmV2aW91cywgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKQogewot
ICAgIGlmIChmb3J3YXJkKQotICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
biA/IHByZXZpb3VzLT5uZXh0U2libGluZygpIDogTm9kZVRyYXZlcnNhbDo6bmV4dChwcmV2aW91
cywgYmFzZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGls
ZHJlbiA/IHByZXZpb3VzLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnByZXZp
b3VzKHByZXZpb3VzLCBiYXNlKTsKKyAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
biA/IHByZXZpb3VzLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3Vz
KHByZXZpb3VzLCBiYXNlKTsKIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBsYXN0RGVzY2VuZGVu
dChOb2RlKiBub2RlKQpAQCAtMjc1LDIxICsyNzYsMTcgQEAgc3RhdGljIGlubGluZSBOb2RlKiBs
YXN0RGVzY2VuZGVudChOb2RlKgogICAgIHJldHVybiBub2RlOwogfQogCi1zdGF0aWMgTm9kZSog
Zmlyc3ROb2RlKGJvb2wgZm9yd2FyZCwgTm9kZSogcm9vdE5vZGUsIGJvb2wgb25seUluY2x1ZGVE
aXJlY3RDaGlsZHJlbikKK3N0YXRpYyBOb2RlKiBsYXN0Tm9kZShOb2RlKiByb290Tm9kZSwgYm9v
bCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKQogewotICAgIGlmIChmb3J3YXJkKQotICAgICAg
ICByZXR1cm4gcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcm9vdE5vZGUtPmxhc3RDaGlsZCgpIDogbGFz
dERlc2NlbmRlbnQocm9vdE5vZGUpOworICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuID8gcm9vdE5vZGUtPmxhc3RDaGlsZCgpIDogbGFzdERlc2NlbmRlbnQocm9vdE5vZGUpOwog
fQogCi10ZW1wbGF0ZSA8Ym9vbCBmb3J3YXJkPgotTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRl
cmF0ZUZvck5leHROb2RlKE5vZGUqIGN1cnJlbnQpIGNvbnN0CitOb2RlKiBMaXZlTm9kZUxpc3RC
YXNlOjppdGVyYXRlRm9yUHJldmlvdXNOb2RlKE5vZGUqIGN1cnJlbnQpIGNvbnN0CiB7CiAgICAg
Ym9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID0gc2hvdWxkT25seUluY2x1ZGVEaXJlY3RD
aGlsZHJlbigpOwogICAgIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlID0gdHlwZSgpOwog
ICAgIE5vZGUqIHJvb3ROb2RlID0gdGhpcy0+cm9vdE5vZGUoKTsKLSAgICBmb3IgKDsgY3VycmVu
dDsgY3VycmVudCA9IG5leHROb2RlPGZvcndhcmQ+KHJvb3ROb2RlLCBjdXJyZW50LCBvbmx5SW5j
bHVkZURpcmVjdENoaWxkcmVuKSkgeworICAgIGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gcHJl
dmlvdXNOb2RlKHJvb3ROb2RlLCBjdXJyZW50LCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKSkg
ewogICAgICAgICBpZiAoaXNOb2RlTGlzdChjb2xsZWN0aW9uVHlwZSkpIHsKICAgICAgICAgICAg
IGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgTGl2ZU5v
ZGVMaXN0Kj4odGhpcyktPm5vZGVNYXRjaGVzKHRvRWxlbWVudChjdXJyZW50KSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChjdXJyZW50KTsKQEAgLTI5OCwzOSArMjk1LDExNiBA
QCBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVyYXRlRm9yTmV4dE5vCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRvRWxlbWVudChjdXJyZW50KTsKICAgICAgICAgfQogICAgIH0KLQogICAgIHJl
dHVybiAwOwogfQogCi0vLyBXaXRob3V0IHRoaXMgQUxXQVlTX0lOTElORSwgbGVuZ3RoKCkgYW5k
IGl0ZW0oKSBjYW4gYmUgMTAwJSBzbG93ZXIuCi10ZW1wbGF0ZTxib29sIGZvcndhcmQ+IEFMV0FZ
U19JTkxJTkUKLU5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmVPckFmdGVyKE5vZGUq
IHByZXZpb3VzKSBjb25zdAorTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlbUJlZm9yZShOb2Rl
KiBwcmV2aW91cykgY29uc3QKIHsKICAgICBOb2RlKiBjdXJyZW50OwogICAgIGlmIChMSUtFTFko
ISFwcmV2aW91cykpIC8vIFdpdGhvdXQgdGhpcyBMSUtFTFksIGxlbmd0aCgpIGFuZCBpdGVtKCkg
Y2FuIGJlIDEwJSBzbG93ZXIuCi0gICAgICAgIGN1cnJlbnQgPSBuZXh0Tm9kZTxmb3J3YXJkPihy
b290Tm9kZSgpLCBwcmV2aW91cywgc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKTsK
KyAgICAgICAgY3VycmVudCA9IHByZXZpb3VzTm9kZShyb290Tm9kZSgpLCBwcmV2aW91cywgc2hv
dWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKTsKICAgICBlbHNlCi0gICAgICAgIGN1cnJl
bnQgPSBmaXJzdE5vZGUoZm9yd2FyZCwgcm9vdE5vZGUoKSwgc2hvdWxkT25seUluY2x1ZGVEaXJl
Y3RDaGlsZHJlbigpKTsKKyAgICAgICAgY3VycmVudCA9IGxhc3ROb2RlKHJvb3ROb2RlKCksIHNo
b3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKSk7CiAKICAgICBpZiAoaXNOb2RlTGlzdCh0
eXBlKCkpICYmIHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKSkgLy8gQ2hpbGROb2Rl
TGlzdAogICAgICAgICByZXR1cm4gY3VycmVudDsKIAotICAgIHJldHVybiBpdGVyYXRlRm9yTmV4
dE5vZGU8Zm9yd2FyZD4oY3VycmVudCk7CisgICAgcmV0dXJuIGl0ZXJhdGVGb3JQcmV2aW91c05v
ZGUoY3VycmVudCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CitpbmxpbmUg
Ym9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCBFbGVt
ZW50KiBlbGVtZW50KTsKKwordGVtcGxhdGUgPD4gaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1l
bnQoY29uc3QgSFRNTENvbGxlY3Rpb24qIG5vZGVMaXN0LCBFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHJldHVybiBpc0FjY2VwdGFibGVFbGVtZW50KG5vZGVMaXN0LT50eXBlKCksIGVsZW1lbnQp
OwogfQogCi0vLyBXaXRob3V0IHRoaXMgQUxXQVlTX0lOTElORSwgbGVuZ3RoKCkgYW5kIGl0ZW0o
KSBjYW4gYmUgMTAwJSBzbG93ZXIuCi1BTFdBWVNfSU5MSU5FIE5vZGUqIExpdmVOb2RlTGlzdEJh
c2U6Oml0ZW1CZWZvcmUoTm9kZSogcHJldmlvdXMpIGNvbnN0Cit0ZW1wbGF0ZSA8PiBpbmxpbmUg
Ym9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBMaXZlTm9kZUxpc3QqIG5vZGVMaXN0LCBFbGVt
ZW50KiBlbGVtZW50KQogewotICAgIHJldHVybiBpdGVtQmVmb3JlT3JBZnRlcjxmYWxzZT4ocHJl
dmlvdXMpOworICAgIHJldHVybiBub2RlTGlzdC0+bm9kZU1hdGNoZXMoZWxlbWVudCk7CiB9CiAK
LS8vIFdpdGhvdXQgdGhpcyBBTFdBWVNfSU5MSU5FLCBsZW5ndGgoKSBhbmQgaXRlbSgpIGNhbiBi
ZSAxMDAlIHNsb3dlci4KLUFMV0FZU19JTkxJTkUgTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRl
bUFmdGVyKHVuc2lnbmVkJiBvZmZzZXRJbkFycmF5LCBOb2RlKiBwcmV2aW91cykgY29uc3QKK3Rl
bXBsYXRlIDw+IGlubGluZSBib29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxUYWdOb2Rl
TGlzdCogbm9kZUxpc3QsIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKFVOTElLRUxZKG92
ZXJyaWRlc0l0ZW1BZnRlcigpKSkgLy8gV2l0aG91dCB0aGlzIFVOTElLRUxZLCBsZW5ndGgoKSBj
YW4gYmUgMTAwJSBzbG93ZXIuCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
Q29sbGVjdGlvbio+KHRoaXMpLT52aXJ0dWFsSXRlbUFmdGVyKG9mZnNldEluQXJyYXksIHRvRWxl
bWVudChwcmV2aW91cykpOwotICAgIEFTU0VSVCghb2Zmc2V0SW5BcnJheSk7Ci0gICAgcmV0dXJu
IGl0ZW1CZWZvcmVPckFmdGVyPHRydWU+KHByZXZpb3VzKTsKKyAgICByZXR1cm4gbm9kZUxpc3Qt
Pm5vZGVNYXRjaGVzSW5saW5lZChlbGVtZW50KTsKK30KKwordGVtcGxhdGUgPD4gaW5saW5lIGJv
b2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgQ2xhc3NOb2RlTGlzdCogbm9kZUxpc3QsIEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIG5vZGVMaXN0LT5ub2RlTWF0Y2hlc0lubGluZWQo
ZWxlbWVudCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CitpbmxpbmUgRWxl
bWVudCogZmlyc3RNYXRjaGluZ0VsZW1lbnQoY29uc3QgTm9kZUxpc3RUeXBlKiBub2RlTGlzdCwg
Q29udGFpbmVyTm9kZSogcm9vdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdCk7CisgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzTWF0
Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBlbGVtZW50KSkKKyAgICAgICAgZWxlbWVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgcm9vdCk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CitpbmxpbmUgRWxlbWVudCogbmV4dE1h
dGNoaW5nRWxlbWVudChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCBFbGVtZW50KiBjdXJy
ZW50LCBDb250YWluZXJOb2RlKiByb290KQoreworICAgIGRvIHsKKyAgICAgICAgY3VycmVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoY3VycmVudCwgcm9vdCk7CisgICAgfSB3aGlsZSAoY3Vy
cmVudCAmJiAhaXNNYXRjaGluZ0VsZW1lbnQobm9kZUxpc3QsIGN1cnJlbnQpKTsKKyAgICByZXR1
cm4gY3VycmVudDsKK30KKworaW5saW5lIEVsZW1lbnQqIGZpcnN0TWF0Y2hpbmdDaGlsZEVsZW1l
bnQoY29uc3QgSFRNTENvbGxlY3Rpb24qIG5vZGVMaXN0LCBDb250YWluZXJOb2RlKiByb290KQor
eworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihy
b290KTsKKyAgICB3aGlsZSAoZWxlbWVudCAmJiAhaXNNYXRjaGluZ0VsZW1lbnQobm9kZUxpc3Qs
IGVsZW1lbnQpKQorICAgICAgICBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oZWxlbWVudCwgcm9vdCk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK2lu
bGluZSBFbGVtZW50KiBuZXh0TWF0Y2hpbmdDaGlsZEVsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rp
b24qIG5vZGVMaXN0LCBFbGVtZW50KiBjdXJyZW50LCBDb250YWluZXJOb2RlKiByb290KQorewor
ICAgIGRvIHsKKyAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKGN1cnJlbnQsIHJvb3QpOworICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgIWlzTWF0
Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBjdXJyZW50KSk7CisgICAgcmV0dXJuIGN1cnJlbnQ7Cit9
CisKK2lubGluZSBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUZpcnN0Tm9kZShDb250
YWluZXJOb2RlKiByb290KSBjb25zdAoreworICAgIEFTU0VSVChpc05vZGVMaXN0KHR5cGUoKSkp
OworICAgIEFTU0VSVCghb3ZlcnJpZGVzSXRlbUFmdGVyKCkpOworCisgICAgaWYgKHR5cGUoKSA9
PSBDaGlsZE5vZGVMaXN0VHlwZSkKKyAgICAgICAgcmV0dXJuIHJvb3QtPmZpcnN0Q2hpbGQoKTsK
KyAgICBpZiAodHlwZSgpID09IEhUTUxUYWdOb2RlTGlzdFR5cGUpCisgICAgICAgIHJldHVybiBm
aXJzdE1hdGNoaW5nRWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBIVE1MVGFnTm9kZUxpc3QqPih0
aGlzKSwgcm9vdCk7CisgICAgaWYgKHR5cGUoKSA9PSBDbGFzc05vZGVMaXN0VHlwZSkKKyAgICAg
ICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVtZW50KHN0YXRpY19jYXN0PGNvbnN0IENsYXNzTm9k
ZUxpc3QqPih0aGlzKSwgcm9vdCk7CisgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVtZW50KHN0
YXRpY19jYXN0PGNvbnN0IExpdmVOb2RlTGlzdCo+KHRoaXMpLCByb290KTsKK30KKwordGVtcGxh
dGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KK2lubGluZSBFbGVtZW50KiB0cmF2ZXJzZU1hdGNoaW5n
RWxlbWVudHNGb3J3YXJkVG9PZmZzZXQoY29uc3QgTm9kZUxpc3RUeXBlKiBub2RlTGlzdCwgdW5z
aWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCwgdW5zaWduZWQmIGN1cnJlbnRP
ZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpCit7CisgICAgd2hpbGUgKGN1cnJlbnRPZmZzZXQg
IT0gb2Zmc2V0ICYmIChjdXJyZW50RWxlbWVudCA9IG5leHRNYXRjaGluZ0VsZW1lbnQobm9kZUxp
c3QsIGN1cnJlbnRFbGVtZW50LCByb290KSkpCisgICAgICAgICsrY3VycmVudE9mZnNldDsKKyAg
ICByZXR1cm4gY3VycmVudEVsZW1lbnQ7Cit9CisKK2lubGluZSBOb2RlKiBMaXZlTm9kZUxpc3RC
YXNlOjp0cmF2ZXJzZUZvcndhcmRUb09mZnNldCh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGN1cnJl
bnROb2RlLCB1bnNpZ25lZCYgY3VycmVudE9mZnNldCwgQ29udGFpbmVyTm9kZSogcm9vdCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNOb2RlTGlzdCh0eXBlKCkpKTsKKyAgICBBU1NFUlQoIW92ZXJy
aWRlc0l0ZW1BZnRlcigpKTsKKyAgICBpZiAodHlwZSgpID09IEhUTUxUYWdOb2RlTGlzdFR5cGUp
CisgICAgICAgIHJldHVybiB0cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQo
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTFRhZ05vZGVMaXN0Kj4odGhpcyksIG9mZnNldCwgdG9FbGVt
ZW50KGN1cnJlbnROb2RlKSwgY3VycmVudE9mZnNldCwgcm9vdCk7CisgICAgaWYgKHR5cGUoKSA9
PSBDbGFzc05vZGVMaXN0VHlwZSkKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlTWF0Y2hpbmdFbGVt
ZW50c0ZvcndhcmRUb09mZnNldChzdGF0aWNfY2FzdDxjb25zdCBDbGFzc05vZGVMaXN0Kj4odGhp
cyksIG9mZnNldCwgdG9FbGVtZW50KGN1cnJlbnROb2RlKSwgY3VycmVudE9mZnNldCwgcm9vdCk7
CisgICAgaWYgKHR5cGUoKSA9PSBDaGlsZE5vZGVMaXN0VHlwZSkgeworICAgICAgICB3aGlsZSAo
Y3VycmVudE9mZnNldCAhPSBvZmZzZXQgJiYgKGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPm5l
eHRTaWJsaW5nKCkpKQorICAgICAgICAgICAgKytjdXJyZW50T2Zmc2V0OworICAgICAgICByZXR1
cm4gY3VycmVudE5vZGU7CisgICAgfQorICAgIHJldHVybiB0cmF2ZXJzZU1hdGNoaW5nRWxlbWVu
dHNGb3J3YXJkVG9PZmZzZXQoc3RhdGljX2Nhc3Q8Y29uc3QgTGl2ZU5vZGVMaXN0Kj4odGhpcyks
IG9mZnNldCwgdG9FbGVtZW50KGN1cnJlbnROb2RlKSwgY3VycmVudE9mZnNldCwgcm9vdCk7CiB9
CiAKIGJvb2wgQUxXQVlTX0lOTElORSBMaXZlTm9kZUxpc3RCYXNlOjppc0xhc3RJdGVtQ2xvc2Vy
VGhhbkxhc3RPckNhY2hlZEl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdApAQCAtMzg5LDEzICs0
NjMsMjMgQEAgTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlbSh1bnNpZ25lZCBvZgogICAgICAg
ICBzdGF0aWNfY2FzdDxjb25zdCBQcm9wZXJ0eU5vZGVMaXN0Kj4odGhpcyktPnVwZGF0ZVJlZkVs
ZW1lbnRzKCk7CiAjZW5kaWYKIAorICAgIENvbnRhaW5lck5vZGUqIHJvb3QgPSByb290Q29udGFp
bmVyTm9kZSgpOworICAgIGlmICghcm9vdCkgeworICAgICAgICBzZXRMZW5ndGhDYWNoZSgwKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgp
ICYmICFvdmVycmlkZXNJdGVtQWZ0ZXIoKSAmJiBpc0xhc3RJdGVtQ2xvc2VyVGhhbkxhc3RPckNh
Y2hlZEl0ZW0ob2Zmc2V0KSkgewogICAgICAgICBOb2RlKiBsYXN0SXRlbSA9IGl0ZW1CZWZvcmUo
MCk7CiAgICAgICAgIEFTU0VSVChsYXN0SXRlbSk7CiAgICAgICAgIHNldEl0ZW1DYWNoZShsYXN0
SXRlbSwgY2FjaGVkTGVuZ3RoKCkgLSAxLCAwKTsKICAgICB9IGVsc2UgaWYgKCFpc0l0ZW1DYWNo
ZVZhbGlkKCkgfHwgaXNGaXJzdEl0ZW1DbG9zZXJUaGFuQ2FjaGVkSXRlbShvZmZzZXQpIHx8IChv
dmVycmlkZXNJdGVtQWZ0ZXIoKSAmJiBvZmZzZXQgPCBjYWNoZWRJdGVtT2Zmc2V0KCkpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldEluQXJyYXkgPSAwOwotICAgICAgICBOb2RlKiBmaXJzdEl0
ZW0gPSBpdGVtQWZ0ZXIob2Zmc2V0SW5BcnJheSwgMCk7CisgICAgICAgIE5vZGUqIGZpcnN0SXRl
bTsKKyAgICAgICAgaWYgKGlzTm9kZUxpc3QodHlwZSgpKSkKKyAgICAgICAgICAgIGZpcnN0SXRl
bSA9IHRyYXZlcnNlRmlyc3ROb2RlKHJvb3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
aXJzdEl0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlvbio+KHRoaXMpLT50cmF2
ZXJzZUZpcnN0RWxlbWVudChvZmZzZXQsIHJvb3QpOwogICAgICAgICBpZiAoIWZpcnN0SXRlbSkg
ewogICAgICAgICAgICAgc2V0TGVuZ3RoQ2FjaGUoMCk7CiAgICAgICAgICAgICByZXR1cm4gMDsK
QEAgLTQwNywxMyArNDkxLDE0IEBAIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW0odW5zaWdu
ZWQgb2YKICAgICBpZiAoY2FjaGVkSXRlbU9mZnNldCgpID09IG9mZnNldCkKICAgICAgICAgcmV0
dXJuIGNhY2hlZEl0ZW0oKTsKIAotICAgIHJldHVybiBpdGVtQmVmb3JlT3JBZnRlckNhY2hlZEl0
ZW0ob2Zmc2V0KTsKKyAgICByZXR1cm4gaXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJdGVtKG9mZnNl
dCwgcm9vdCk7CiB9CiAKLU5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmVPckFmdGVy
Q2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgTm9kZSogTGl2ZU5vZGVM
aXN0QmFzZTo6aXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCwgQ29u
dGFpbmVyTm9kZSogcm9vdCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBjdXJyZW50T2Zmc2V0ID0g
Y2FjaGVkSXRlbU9mZnNldCgpOwogICAgIE5vZGUqIGN1cnJlbnRJdGVtID0gY2FjaGVkSXRlbSgp
OworICAgIEFTU0VSVChjdXJyZW50SXRlbSk7CiAgICAgQVNTRVJUKGN1cnJlbnRPZmZzZXQgIT0g
b2Zmc2V0KTsKIAogICAgIGlmIChvZmZzZXQgPCBjYWNoZWRJdGVtT2Zmc2V0KCkpIHsKQEAgLTQz
MCwxOSArNTE1LDE5IEBAIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmVPckFmdGUK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdW5zaWduZWQgb2Zmc2V0SW5BcnJheSA9
IG92ZXJyaWRlc0l0ZW1BZnRlcigpID8gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24q
Pih0aGlzKS0+bV9jYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0IDogMDsKLSAgICB3aGlsZSAoKGN1
cnJlbnRJdGVtID0gaXRlbUFmdGVyKG9mZnNldEluQXJyYXksIGN1cnJlbnRJdGVtKSkpIHsKLSAg
ICAgICAgY3VycmVudE9mZnNldCsrOwotICAgICAgICBpZiAoY3VycmVudE9mZnNldCA9PSBvZmZz
ZXQpIHsKLSAgICAgICAgICAgIHNldEl0ZW1DYWNoZShjdXJyZW50SXRlbSwgY3VycmVudE9mZnNl
dCwgb2Zmc2V0SW5BcnJheSk7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudEl0ZW07Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXRPZkxhc3RJdGVtID0gY3VycmVudE9m
ZnNldDsKLSAgICBzZXRMZW5ndGhDYWNoZShvZmZzZXRPZkxhc3RJdGVtICsgMSk7CisgICAgdW5z
aWduZWQgb2Zmc2V0SW5BcnJheSA9IDA7CisgICAgaWYgKGlzTm9kZUxpc3QodHlwZSgpKSkKKyAg
ICAgICAgY3VycmVudEl0ZW0gPSB0cmF2ZXJzZUZvcndhcmRUb09mZnNldChvZmZzZXQsIGN1cnJl
bnRJdGVtLCBjdXJyZW50T2Zmc2V0LCByb290KTsKKyAgICBlbHNlCisgICAgICAgIGN1cnJlbnRJ
dGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKS0+dHJhdmVyc2VG
b3J3YXJkVG9PZmZzZXQob2Zmc2V0LCB0b0VsZW1lbnQoY3VycmVudEl0ZW0pLCBjdXJyZW50T2Zm
c2V0LCBvZmZzZXRJbkFycmF5LCByb290KTsKIAotICAgIHJldHVybiAwOworICAgIGlmICghY3Vy
cmVudEl0ZW0pIHsKKyAgICAgICAgLy8gRGlkIG5vdCBmaW5kIHRoZSBpdGVtLiBPbiBwbHVzIHNp
ZGUsIHdlIG5vdyBrbm93IHRoZSBsZW5ndGguCisgICAgICAgIHNldExlbmd0aENhY2hlKGN1cnJl
bnRPZmZzZXQgKyAxKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHNldEl0ZW1DYWNo
ZShjdXJyZW50SXRlbSwgY3VycmVudE9mZnNldCwgb2Zmc2V0SW5BcnJheSk7CisgICAgcmV0dXJu
IGN1cnJlbnRJdGVtOwogfQogCiBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcih1bnNpZ25lZCYsIEVsZW1lbnQqKSBjb25zdApAQCAtNDc5LDYgKzU2NCw0NSBAQCBib29s
IEhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5hbWVNYXRjaChFCiAgICAgcmV0dXJuIGUtPmdldE5h
bWVBdHRyaWJ1dGUoKSA9PSBuYW1lICYmIGUtPmdldElkQXR0cmlidXRlKCkgIT0gbmFtZTsKIH0K
IAoraW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJzZUZpcnN0RWxlbWVudCh1
bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIWlzTm9kZUxpc3QodHlwZSgpKSk7CisgICAgaWYgKG92ZXJyaWRlc0l0ZW1BZnRl
cigpKQorICAgICAgICByZXR1cm4gdmlydHVhbEl0ZW1BZnRlcihvZmZzZXRJbkFycmF5LCAwKTsK
KyAgICBBU1NFUlQoIW9mZnNldEluQXJyYXkpOworICAgIGlmIChzaG91bGRPbmx5SW5jbHVkZURp
cmVjdENoaWxkcmVuKCkpCisgICAgICAgIHJldHVybiBmaXJzdE1hdGNoaW5nQ2hpbGRFbGVtZW50
KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9uKj4odGhpcyksIHJvb3QpOworICAgIHJl
dHVybiBmaXJzdE1hdGNoaW5nRWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlv
bio+KHRoaXMpLCByb290KTsKK30KKworaW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0
cmF2ZXJzZUZvcndhcmRUb09mZnNldCh1bnNpZ25lZCBvZmZzZXQsIEVsZW1lbnQqIGN1cnJlbnRF
bGVtZW50LCB1bnNpZ25lZCYgY3VycmVudE9mZnNldCwgdW5zaWduZWQmIG9mZnNldEluQXJyYXks
IENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc05vZGVMaXN0KHR5
cGUoKSkpOworICAgIGlmIChvdmVycmlkZXNJdGVtQWZ0ZXIoKSkgeworICAgICAgICBvZmZzZXRJ
bkFycmF5ID0gbV9jYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0OworICAgICAgICB3aGlsZSAoY3Vy
cmVudE9mZnNldCAhPSBvZmZzZXQgJiYgKGN1cnJlbnRFbGVtZW50ID0gdmlydHVhbEl0ZW1BZnRl
cihvZmZzZXRJbkFycmF5LCBjdXJyZW50RWxlbWVudCkpKQorICAgICAgICAgICAgKytjdXJyZW50
T2Zmc2V0OworICAgICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQ7CisgICAgfQorICAgIGlmIChz
aG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJl
bnRPZmZzZXQgIT0gb2Zmc2V0ICYmIChjdXJyZW50RWxlbWVudCA9IG5leHRNYXRjaGluZ0NoaWxk
RWxlbWVudCh0aGlzLCBjdXJyZW50RWxlbWVudCwgcm9vdCkpKQorICAgICAgICAgICAgKytjdXJy
ZW50T2Zmc2V0OworICAgICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQ7CisgICAgfQorICAgIHJl
dHVybiB0cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQodGhpcywgb2Zmc2V0
LCBjdXJyZW50RWxlbWVudCwgY3VycmVudE9mZnNldCwgcm9vdCk7Cit9CisKK2lubGluZSBFbGVt
ZW50KiBIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0RWxlbWVudCh1bnNpZ25lZCYgb2Zmc2V0
SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXMsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFpc05vZGVMaXN0KHR5cGUoKSkpOworICAgIGlmIChVTkxJS0VMWShvdmVy
cmlkZXNJdGVtQWZ0ZXIoKSkpCisgICAgICAgIHJldHVybiB2aXJ0dWFsSXRlbUFmdGVyKG9mZnNl
dEluQXJyYXksIHByZXZpb3VzKTsKKyAgICBBU1NFUlQoIW9mZnNldEluQXJyYXkpOworICAgIGlm
IChzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpCisgICAgICAgIHJldHVybiBuZXh0
TWF0Y2hpbmdDaGlsZEVsZW1lbnQodGhpcywgcHJldmlvdXMsIHJvb3QpOworICAgIHJldHVybiBu
ZXh0TWF0Y2hpbmdFbGVtZW50KHRoaXMsIHByZXZpb3VzLCByb290KTsKK30KKwogTm9kZSogSFRN
TENvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7
CiAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9hdXRob3IvZGh0bWwv
cmVmZXJlbmNlL21ldGhvZHMvbmFtZWRpdGVtLmFzcApAQCAtNDg3LDIxICs2MTEsMjUgQEAgTm9k
ZSogSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdAogICAgIC8vIG9iamVjdCB3aXRo
IGEgbWF0Y2hpbmcgbmFtZSBhdHRyaWJ1dGUsIGJ1dCBvbmx5IG9uIHRob3NlIGVsZW1lbnRzCiAg
ICAgLy8gdGhhdCBhcmUgYWxsb3dlZCBhIG5hbWUgYXR0cmlidXRlLgogCisgICAgQ29udGFpbmVy
Tm9kZSogcm9vdCA9IHJvb3RDb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFyb290KQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIHVuc2lnbmVkIGFycmF5T2Zmc2V0ID0gMDsKICAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKE5vZGUqIGUgPSBpdGVtQWZ0ZXIoYXJyYXlPZmZzZXQsIDApOyBl
OyBlID0gaXRlbUFmdGVyKGFycmF5T2Zmc2V0LCBlKSkgewotICAgICAgICBpZiAoY2hlY2tGb3JO
YW1lTWF0Y2godG9FbGVtZW50KGUpLCAvKiBjaGVja05hbWUgKi8gZmFsc2UsIG5hbWUpKSB7Ci0g
ICAgICAgICAgICBzZXRJdGVtQ2FjaGUoZSwgaSwgYXJyYXlPZmZzZXQpOwotICAgICAgICAgICAg
cmV0dXJuIGU7CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdHJhdmVyc2VGaXJzdEVsZW1l
bnQoYXJyYXlPZmZzZXQsIHJvb3QpOyBlbGVtZW50OyBlbGVtZW50ID0gdHJhdmVyc2VOZXh0RWxl
bWVudChhcnJheU9mZnNldCwgZWxlbWVudCwgcm9vdCkpIHsKKyAgICAgICAgaWYgKGNoZWNrRm9y
TmFtZU1hdGNoKGVsZW1lbnQsIC8qIGNoZWNrTmFtZSAqLyBmYWxzZSwgbmFtZSkpIHsKKyAgICAg
ICAgICAgIHNldEl0ZW1DYWNoZShlbGVtZW50LCBpLCBhcnJheU9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQogICAgICAgICBpKys7CiAgICAgfQogCiAgICAg
aSA9IDA7Ci0gICAgZm9yIChOb2RlKiBlID0gaXRlbUFmdGVyKGFycmF5T2Zmc2V0LCAwKTsgZTsg
ZSA9IGl0ZW1BZnRlcihhcnJheU9mZnNldCwgZSkpIHsKLSAgICAgICAgaWYgKGNoZWNrRm9yTmFt
ZU1hdGNoKHRvRWxlbWVudChlKSwgLyogY2hlY2tOYW1lICovIHRydWUsIG5hbWUpKSB7Ci0gICAg
ICAgICAgICBzZXRJdGVtQ2FjaGUoZSwgaSwgYXJyYXlPZmZzZXQpOwotICAgICAgICAgICAgcmV0
dXJuIHRvRWxlbWVudChlKTsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0cmF2ZXJzZUZp
cnN0RWxlbWVudChhcnJheU9mZnNldCwgcm9vdCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSB0cmF2ZXJz
ZU5leHRFbGVtZW50KGFycmF5T2Zmc2V0LCBlbGVtZW50LCByb290KSkgeworICAgICAgICBpZiAo
Y2hlY2tGb3JOYW1lTWF0Y2goZWxlbWVudCwgLyogY2hlY2tOYW1lICovIHRydWUsIG5hbWUpKSB7
CisgICAgICAgICAgICBzZXRJdGVtQ2FjaGUoZWxlbWVudCwgaSwgYXJyYXlPZmZzZXQpOworICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICAgICAgaSsrOwogICAgIH0K
QEAgLTUxNCwxNyArNjQyLDIxIEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNo
ZSgpIGMKICAgICBpZiAoaGFzTmFtZUNhY2hlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIENv
bnRhaW5lck5vZGUqIHJvb3QgPSByb290Q29udGFpbmVyTm9kZSgpOworICAgIGlmICghcm9vdCkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgdW5zaWduZWQgYXJyYXlPZmZzZXQgPSAwOwotICAgIGZv
ciAoTm9kZSogbm9kZSA9IGl0ZW1BZnRlcihhcnJheU9mZnNldCwgMCk7IG5vZGU7IG5vZGUgPSBp
dGVtQWZ0ZXIoYXJyYXlPZmZzZXQsIG5vZGUpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNIVE1M
RWxlbWVudCgpKQorICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHRyYXZlcnNlRmlyc3RFbGVt
ZW50KGFycmF5T2Zmc2V0LCByb290KTsgZWxlbWVudDsgZWxlbWVudCA9IHRyYXZlcnNlTmV4dEVs
ZW1lbnQoYXJyYXlPZmZzZXQsIGVsZW1lbnQsIHJvb3QpKSB7CisgICAgICAgIGlmICghZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxF
bGVtZW50KiBlID0gdG9IVE1MRWxlbWVudChub2RlKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0TmFtZUF0dHJpYnV0ZSgpOworICAgICAgICBI
VE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpOworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGh0bWxFbGVtZW50LT5nZXRJZEF0dHJp
YnV0ZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gaHRtbEVs
ZW1lbnQtPmdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0
eSgpKQotICAgICAgICAgICAgYXBwZW5kSWRDYWNoZShpZEF0dHJWYWwsIGUpOwotICAgICAgICBp
ZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYg
KHR5cGUoKSAhPSBEb2NBbGwgfHwgbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoZSkp
KQotICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCBlKTsKKyAgICAgICAg
ICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBodG1sRWxlbWVudCk7CisgICAgICAgIGlmICgh
bmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAodHlw
ZSgpICE9IERvY0FsbCB8fCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChodG1sRWxl
bWVudCkpKQorICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCBodG1sRWxl
bWVudCk7CiAgICAgfQogCiAgICAgc2V0SGFzTmFtZUNhY2hlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDkgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBFbGVtZW50KiB2aXJ0dWFsSXRlbUFmdGVyKHVuc2lnbmVk
JiBvZmZzZXRJbkFycmF5LCBFbGVtZW50KikgY29uc3Q7CiAKKyAgICBFbGVtZW50KiB0cmF2ZXJz
ZUZpcnN0RWxlbWVudCh1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVyTm9kZSogcm9v
dCkgY29uc3QgOworICAgIEVsZW1lbnQqIHRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1lbnQsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0
LCB1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CisK
IHByb3RlY3RlZDoKICAgICBIVE1MQ29sbGVjdGlvbihOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlw
ZSwgSXRlbUFmdGVyT3ZlcnJpZGVUeXBlKTsKIApAQCAtNzcsNiArODAsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja0Zvck5hbWVNYXRjaChFbGVtZW50KiwgYm9vbCBj
aGVja05hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgRWxlbWVudCog
dHJhdmVyc2VOZXh0RWxlbWVudCh1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJl
dmlvdXMsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlz
TGl2ZU5vZGVMaXN0KCkgY29uc3QgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIHRydWU7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179981</attachid>
            <date>2012-12-18 11:05:48 -0800</date>
            <delta_ts>2012-12-19 09:57:56 -0800</delta_ts>
            <desc>with less style errors</desc>
            <filename>node-list-traversal-6.patch</filename>
            <type>text/plain</type>
            <size>34442</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODAzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEVsZW1lbnRUcmF2ZXJz
YWwgaW4gTGl2ZU5vZGVMaXN0QmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1MzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRmFjdG9yIHRoZSBjb2RlIHNvIHRoYXQgd2UgZ2V0IGNsZWFuIG1pbmlt
YWxseSBicmFuY2h5IHRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIGFsbCB0aGUgY29tbW9uIGNhc2Vz
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBtb3JlIHBlcmZvcm1h
bmNlIGNyaXRpY2FsIGZvcndhcmQgdHJhdmVyc2FsIG9ubHksIGJhY2t3YXJkcyB0cmF2ZXJzYWwg
aXMgdW5hZmZlY3RlZCBmb3Igbm93LgorICAgICAgICAKKyAgICAgICAgSW5zdHJ1bWVudHMgdGhp
bmtzIGl0IGlzIGEgcHJvZ3Jlc3Npb24gYXQgbGVhc3QgaW4gRE9NL0RPTURpdldhbGsuaHRtbC4g
Qm90cyBzaG91bGQgdGVsbCBtb3JlLgorICAgICAgICAKKyAgICAgICAgKiBkb20vQ2xhc3NOb2Rl
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6
CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3QuaDoKKyAgICAgICAgKENsYXNzTm9kZUxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlzdDo6bm9kZU1hdGNoZXNJbmxp
bmVkKToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgaW5saW5lZCB2ZXJzaW9uIG9mIHRoZSBt
YXRjaGluZyBmdW5jdGlvbiBmb3IgY2xhc3MgbGlzdHMuCisKKyAgICAgICAgKiBkb20vTGl2ZU5v
ZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdEJhc2U6OnJvb3RDb250
YWluZXJOb2RlKToKKyAgICAgICAgCisgICAgICAgICAgICBSb290IGlzIGFsd2F5cyBDb250YWlu
ZXJOb2RlIGlmIHRoZSBsaXN0IGhhcyBhbnl0aGluZyBpbiBpdC4gVHJhdmVyc2FsIGZ1bmN0aW9u
cyBhcmUgc2xpZ2h0bHkgbW9yZQorICAgICAgICAgICAgZWZmaWNpZW50IGlmIHdlIGtub3cgd2Ug
YXJlIG9wZXJhdGluZyBvbiBDb250YWluZXJOb2Rlcy4KKworICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogZG9tL0xpdmVOb2RlTGlzdC5oOgorICAgICAgICAoTGl2ZU5vZGVMaXN0QmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNlOjpzaG91bGRPbmx5SW5jbHVkZURp
cmVjdENoaWxkcmVuKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZSk6CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUYWdOb2RlTGlzdDo6flRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWdOb2RlTGlzdDo6SFRNTFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXMpOgorICAgICAgICAqIGRvbS9UYWdOb2RlTGlz
dC5oOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChU
YWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFnTm9kZUxpc3Q6OmNyZWF0ZSk6
CisgICAgICAgIAorICAgICAgICAgICAgVXNlIHNlcGFyYXRlIENvbnRhaW5lclR5cGUgZW51bSB2
YWx1ZSBmb3IgSFRNTFRhZ05vZGVMaXN0IHNvIHdlIGNhbiB0ZWxsIGl0IGFwYXJ0IGZyb20gVGFn
Tm9kZUxpc3QuCisKKyAgICAgICAgKEhUTUxUYWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXNJbmxpbmVk
KToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgaW5saW5lZCB2ZXJzaW9uIG9mIHRoZSBtYXRj
aGluZyBmdW5jdGlvbiBmb3IgdGFnIGxpc3RzLgorCisgICAgICAgICogaHRtbC9Db2xsZWN0aW9u
VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
Ojpyb290VHlwZUZyb21Db2xsZWN0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjppbnZhbGlk
YXRpb25UeXBlRXhjbHVkaW5nSWRBbmROYW1lQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0FjY2VwdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpsYXN0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9k
ZUxpc3RCYXNlOjppdGVyYXRlRm9yUHJldmlvdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
dmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmUpOgorICAgICAgICAKKyAgICAgICAgICAgIExlYXZl
IHRoZSBiYWNrd2FyZHMgdHJhdmVyc2FsIHVuY2hhbmdlZCBmb3Igbm93IGJ1dCByZW1vdmUgdGhl
IGZvcndhcmQgdHJhdmVyc2FsIGNvZGUuCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNNYXRjaGluZ0VsZW1lbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIExpc3Qg
dHlwZSB0ZW1wbGF0ZWQgbWF0Y2hpbmcgZnVuY3Rpb25zIGZvciBjb21tb24gY2FzZXMuCisKKyAg
ICAgICAgKFdlYkNvcmU6OmZpcnN0TWF0Y2hpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Om5leHRNYXRjaGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RNYXRjaGluZ0No
aWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0TWF0Y2hpbmdDaGlsZEVsZW1lbnQp
OgorICAgICAgICAKKyAgICAgICAgICAgTGlzdCB0eXBlIHRlbXBsYXRlZCB0cmF2ZXJzYWwgZnVu
Y3Rpb25zIHdpdGggbWF0Y2hpbmcuIFNlcGFyYXRlIGNhc2VzIGZvciBmaXJzdCBhbmQgc3Vic2Vx
dWVudCBlbGVtZW50cy4KKworICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFzZTo6dHJh
dmVyc2VGaXJzdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VNYXRjaGluZ0VsZW1l
bnRzRm9yd2FyZFRvT2Zmc2V0KToKKyAgICAgICAgCisgICAgICAgICAgICBOb2RlTGlzdCB0cmF2
ZXJzYWwsIHBpY2tpbmcgdGhlIHJpZ2h0IHRlbXBsYXRlLgorCisgICAgICAgIChXZWJDb3JlOjpM
aXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUZvcndhcmRUb09mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpMaXZlTm9kZUxpc3RCYXNlOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2Rl
TGlzdEJhc2U6Oml0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSk6CisgICAgICAgIAorICAgICAg
ICAgICAgU3dpdGNoIHRvIG5ldyB0cmF2ZXJzYWwgZnVuY3Rpb25zLgorCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGaXJzdEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb246OnRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KToKKyAgICAgICAg
CisgICAgICAgICAgICBIVE1MQ29sbGVjdGlvbiB0cmF2ZXJzYWwsIHBpY2tpbmcgdGhlIHJpZ2h0
IHRlbXBsYXRlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VO
ZXh0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgor
ICAgICAgICAKKyAgICAgICAgICAgIFN3aXRjaCB0byBuZXcgdHJhdmVyc2FsIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxDb2xsZWN0
aW9uKToKKwogMjAxMi0xMi0xOCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJFR1JFU1NJT04ocjEzNjMyNCk6IGZsZXggaXRlbXMgd2l0aCBwZXJjZW50IGhlaWdo
dHMgbm90IHJlc2l6aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDE1ICs1MCw3IEBAIENsYXNzTm9kZUxpc3Q6On5DbGFzc05v
ZGVMaXN0KCkKIAogYm9vbCBDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0
Tm9kZSkgY29uc3QKIHsKLSAgICBpZiAoIXRlc3ROb2RlLT5oYXNDbGFzcygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NsYXNzTmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IERPTTQgYWxsb3dzIGdldEVsZW1lbnRzQnlDbGFzc05h
bWUgdG8gcmV0dXJuIG5vbiBTdHlsZWRFbGVtZW50LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDcxOAotICAgIGlmICghdGVzdE5vZGUtPmlzU3R5bGVk
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRlc3ROb2RlLT5j
bGFzc05hbWVzKCkuY29udGFpbnNBbGwobV9jbGFzc05hbWVzKTsKKyAgICByZXR1cm4gbm9kZU1h
dGNoZXNJbmxpbmVkKHRlc3ROb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOSAr
MzAsNDUgQEAKICNpZm5kZWYgQ2xhc3NOb2RlTGlzdF9oCiAjZGVmaW5lIENsYXNzTm9kZUxpc3Rf
aAogCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkxpdmVOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVM
aXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsYXNzTm9kZUxp
c3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNz
TmFtZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xhc3NO
b2RlTGlzdChyb290Tm9kZSwgY2xhc3NOYW1lcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB+Q2xhc3NOb2RlTGlzdCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2xhc3NOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMp
OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7Ci0K
LSAgICAgICAgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7Ci0gICAgICAgIFN0cmluZyBt
X29yaWdpbmFsQ2xhc3NOYW1lczsKLSAgICB9OworY2xhc3MgQ2xhc3NOb2RlTGlzdCA6IHB1Ymxp
YyBMaXZlTm9kZUxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsYXNzTm9k
ZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNs
YXNzTmFtZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsYXNzTm9kZUxp
c3Qocm9vdE5vZGUsIGNsYXNzTmFtZXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DbGFzc05v
ZGVMaXN0KCk7CisKKyAgICBib29sIG5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgQ2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpOworCisgICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKEVsZW1lbnQqKSBjb25zdDsKKworICAgIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVz
OworICAgIFN0cmluZyBtX29yaWdpbmFsQ2xhc3NOYW1lczsKK307CisKK2lubGluZSBib29sIENs
YXNzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QK
K3sKKyAgICBpZiAoIXRlc3ROb2RlLT5oYXNDbGFzcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFtX2NsYXNzTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgLy8gRklYTUU6IERPTTQgYWxsb3dzIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgdG8gcmV0dXJu
IG5vbiBTdHlsZWRFbGVtZW50LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NDcxOAorICAgIGlmICghdGVzdE5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRlc3ROb2RlLT5jbGFzc05hbWVzKCku
Y29udGFpbnNBbGwobV9jbGFzc05hbWVzKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTM3NzE1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDYgKzUyLDE0IEBAIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6OnJvb3ROb2RlKCkgY29uc3QK
ICAgICByZXR1cm4gbV9vd25lck5vZGUuZ2V0KCk7CiB9CiAKK0NvbnRhaW5lck5vZGUqIExpdmVO
b2RlTGlzdEJhc2U6OnJvb3RDb250YWluZXJOb2RlKCkgY29uc3QKK3sKKyAgICBOb2RlKiByb290
Tm9kZSA9IHRoaXMtPnJvb3ROb2RlKCk7CisgICAgaWYgKCFyb290Tm9kZS0+aXNDb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUocm9v
dE5vZGUpOworfQorCiB2b2lkIExpdmVOb2RlTGlzdEJhc2U6OmludmFsaWRhdGVDYWNoZSgpIGNv
bnN0CiB7CiAgICAgbV9jYWNoZWRJdGVtID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9M
aXZlTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVM
aXN0LmgJKHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHB1YmxpYzoKIHByb3RlY3Rl
ZDoKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZS0+
ZG9jdW1lbnQoKTsgfQogICAgIE5vZGUqIHJvb3ROb2RlKCkgY29uc3Q7CisgICAgQ29udGFpbmVy
Tm9kZSogcm9vdENvbnRhaW5lck5vZGUoKSBjb25zdDsKICAgICBib29sIG92ZXJyaWRlc0l0ZW1B
ZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVzSXRlbUFmdGVyOyB9CiAKICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVt
Q2FjaGVWYWxpZDsgfQpAQCAtMTMzLDE1ICsxMzQsMTUgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wg
aGFzTmFtZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pc05hbWVDYWNoZVZhbGlkOyB9CiAgICAg
dm9pZCBzZXRIYXNOYW1lQ2FjaGUoKSBjb25zdCB7IG1faXNOYW1lQ2FjaGVWYWxpZCA9IHRydWU7
IH0KIAotICAgIE5vZGUqIGl0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0OwotICAgIE5vZGUqIGl0ZW1BZnRlcih1bnNpZ25lZCYsIE5vZGUqIHByZXZpb3Vz
SXRlbSkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuOyB9CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuOyB9CisgICAgTm9kZSog
aXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCwgQ29udGFpbmVyTm9k
ZSogcm9vdCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VGaXJzdE5vZGUoQ29udGFpbmVyTm9k
ZSogcm9vdCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VGb3J3YXJkVG9PZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENv
bnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0SXRlbUNsb3NlclRoYW5M
YXN0T3JDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZpcnN0
SXRlbUNsb3NlclRoYW5DYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7Ci0gICAgdGVt
cGxhdGUgPGJvb2wgZm9yd2FyZD4gTm9kZSogaXRlcmF0ZUZvck5leHROb2RlKE5vZGUqIGN1cnJl
bnQpIGNvbnN0OwotICAgIHRlbXBsYXRlPGJvb2wgZm9yd2FyZD4gTm9kZSogaXRlbUJlZm9yZU9y
QWZ0ZXIoTm9kZSogcHJldmlvdXNJdGVtKSBjb25zdDsgICAgCisgICAgTm9kZSogaXRlcmF0ZUZv
clByZXZpb3VzTm9kZShOb2RlKiBjdXJyZW50KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmVmb3Jl
KE5vZGUqIHByZXZpb3VzSXRlbSkgY29uc3Q7CiAKICAgICBSZWZQdHI8Tm9kZT4gbV9vd25lck5v
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTUsNyArMTM1NSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNO
YW1lPEhUTUxUYWdOb2RlTGlzdD4odGhpcywgVGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOwor
ICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENh
Y2hlV2l0aEF0b21pY05hbWU8SFRNTFRhZ05vZGVMaXN0Pih0aGlzLCBIVE1MVGFnTm9kZUxpc3RU
eXBlLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2Rl
TGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxUYWdOb2RlTGlzdD4odGhpcywgVGFnTm9k
ZUxpc3RUeXBlLCBsb2NhbE5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFn
Tm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlz
dC5jcHAJKHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1UYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lKQotICAgIDogTGl2ZU5vZGVMaXN0KHJvb3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUs
IERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcykKK1RhZ05vZGVMaXN0OjpUYWdOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCisgICAgOiBMaXZlTm9kZUxpc3Qocm9vdE5vZGUsIHR5cGUsIERvTm90SW52YWxpZGF0ZU9u
QXR0cmlidXRlQ2hhbmdlcykKICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAg
ICAsIG1fbG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKQEAgLTQxLDcgKzQxLDcgQEAgVGFnTm9kZUxp
c3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZQogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlz
dCgpCiB7CiAgICAgaWYgKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKQotICAgICAgICBvd25l
ck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgVGFn
Tm9kZUxpc3RUeXBlLCBtX2xvY2FsTmFtZSk7CisgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlz
dHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCB0eXBlKCksIG1fbG9jYWxOYW1l
KTsKICAgICBlbHNlCiAgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2Fj
aGVXaXRoUXVhbGlmaWVkTmFtZSh0aGlzLCBtX25hbWVzcGFjZVVSSSwgbV9sb2NhbE5hbWUpOwog
fQpAQCAtNTYsMjIgKzU2LDE0IEBAIGJvb2wgVGFnTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1l
bnQqIHQKIH0KIAogSFRNTFRhZ05vZGVMaXN0OjpIVE1MVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgOiBUYWdO
b2RlTGlzdChyb290Tm9kZSwgc3RhckF0b20sIGxvY2FsTmFtZSkKKyAgICA6IFRhZ05vZGVMaXN0
KHJvb3ROb2RlLCBIVE1MVGFnTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSwgbG9jYWxOYW1lKQogICAg
ICwgbV9sb3dlcmVkTG9jYWxOYW1lKGxvY2FsTmFtZS5sb3dlcigpKQogewogfQogCiBib29sIEhU
TUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVzdE5vZGUpIGNvbnN0CiB7Ci0g
ICAgLy8gSW1wbGVtZW50cyBodHRwOi8vZHZjcy53My5vcmcvaGcvZG9tY29yZS9yYXctZmlsZS90
aXAvT3ZlcnZpZXcuaHRtbCNjb25jZXB0LWdldGVsZW1lbnRzYnl0YWduYW1lCi0gICAgaWYgKG1f
bG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lID0gdGVzdE5vZGUtPmlzSFRNTEVsZW1lbnQoKSA/IG1fbG93ZXJlZExvY2FsTmFtZSA6
IG1fbG9jYWxOYW1lOwotICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRlc3ROb2RlLT5sb2NhbE5h
bWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9u
YW1lc3BhY2VVUkkgPT0gc3RhckF0b20pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBu
b2RlTWF0Y2hlc0lubGluZWQodGVzdE5vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkocmV2aXNpb24gMTM3NzE1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDUyICsy
NCw2OCBAQAogI2lmbmRlZiBUYWdOb2RlTGlzdF9oCiAjZGVmaW5lIFRhZ05vZGVMaXN0X2gKIAor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Ly8gTm9kZUxpc3QgdGhhdCBsaW1pdHMgdG8gYSBwYXJ0aWN1bGFyIHRhZy4KLSAgICBjbGFzcyBU
YWdOb2RlTGlzdCA6IHB1YmxpYyBMaXZlTm9kZUxpc3QgewotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChuYW1lc3BhY2VV
UkkgIT0gc3RhckF0b20pOwotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYWdOb2Rl
TGlzdChyb290Tm9kZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlw
ZSA9PSBUYWdOb2RlTGlzdFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
YWdOb2RlTGlzdChyb290Tm9kZSwgc3RhckF0b20sIGxvY2FsTmFtZSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmlydHVhbCB+VGFnTm9kZUxpc3QoKTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKLQotICAg
ICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAg
IEF0b21pY1N0cmluZyBtX25hbWVzcGFjZVVSSTsKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fbG9j
YWxOYW1lOwotICAgIH07Ci0KLSAgICBjbGFzcyBIVE1MVGFnTm9kZUxpc3QgOiBwdWJsaWMgVGFn
Tm9kZUxpc3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRh
Z05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBUYWdOb2RlTGlzdFR5cGUpOwotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MVGFnTm9kZUxpc3Qocm9vdE5vZGUsIGxv
Y2FsTmFtZSkpOwotICAgICAgICB9CisvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRp
Y3VsYXIgdGFnLgorY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVMaXN0IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQ
dHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChuYW1lc3Bh
Y2VVUkkgIT0gc3RhckF0b20pOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVM
aXN0KHJvb3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSk7
CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlw
ZSA9PSBUYWdOb2RlTGlzdFR5cGUpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05v
ZGVMaXN0KHJvb3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUsIHN0YXJBdG9tLCBsb2NhbE5hbWUpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5UYWdOb2RlTGlzdCgpOworCitwcm90ZWN0ZWQ6CisgICAg
VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0Owor
CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOworICAgIEF0b21pY1N0cmluZyBtX2xv
Y2FsTmFtZTsKK307CisKK2NsYXNzIEhUTUxUYWdOb2RlTGlzdCA6IHB1YmxpYyBUYWdOb2RlTGlz
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhZ05vZGVMaXN0PiBjcmVh
dGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHR5
cGUsIHR5cGUgPT0gSFRNTFRhZ05vZGVMaXN0VHlwZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSFRNTFRhZ05vZGVMaXN0KHJvb3ROb2RlLCBsb2NhbE5hbWUpKTsKKyAgICB9CisKKyAg
ICBib29sIG5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSFRNTFRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lKTsKKworICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVt
ZW50KikgY29uc3Q7CisKKyAgICBBdG9taWNTdHJpbmcgbV9sb3dlcmVkTG9jYWxOYW1lOworfTsK
KworaW5saW5lIGJvb2wgSFRNTFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlc0lubGluZWQoRWxlbWVu
dCogdGVzdE5vZGUpIGNvbnN0Cit7CisgICAgLy8gSW1wbGVtZW50cyBodHRwOi8vZHZjcy53My5v
cmcvaGcvZG9tY29yZS9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb25jZXB0LWdldGVsZW1l
bnRzYnl0YWduYW1lCisgICAgaWYgKG1fbG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gdGVzdE5vZGUtPmlzSFRNTEVsZW1lbnQo
KSA/IG1fbG93ZXJlZExvY2FsTmFtZSA6IG1fbG9jYWxOYW1lOworICAgICAgICBpZiAobG9jYWxO
YW1lICE9IHRlc3ROb2RlLT5sb2NhbE5hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgQVNTRVJUKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIEhUTUxUYWdOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7Ci0K
LSAgICAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKLQotICAg
ICAgICBBdG9taWNTdHJpbmcgbV9sb3dlcmVkTG9jYWxOYW1lOwotICAgIH07CiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBUYWdOb2RlTGlzdF9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0NvbGxlY3Rpb25UeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9Db2xsZWN0aW9uVHlwZS5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0NvbGxlY3Rpb25UeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAg
ZW51bSBDb2xsZWN0aW9uVHlwZSB7CiAgICAgQ2xhc3NOb2RlTGlzdFR5cGUsCiAgICAgTmFtZU5v
ZGVMaXN0VHlwZSwKICAgICBUYWdOb2RlTGlzdFR5cGUsCisgICAgSFRNTFRhZ05vZGVMaXN0VHlw
ZSwKICAgICBSYWRpb05vZGVMaXN0VHlwZSwKICAgICBMYWJlbHNOb2RlTGlzdFR5cGUsCiAgICAg
TWljcm9EYXRhSXRlbUxpc3RUeXBlLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAJKHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKIAorI2luY2x1ZGUgIkNsYXNz
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzUsNiArNzYsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkCiAgICAgY2FzZSBDbGFzc05vZGVMaXN0
VHlwZToKICAgICBjYXNlIE5hbWVOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBUYWdOb2RlTGlzdFR5
cGU6CisgICAgY2FzZSBIVE1MVGFnTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgUmFkaW9Ob2RlTGlz
dFR5cGU6CiAgICAgY2FzZSBMYWJlbHNOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBNaWNyb0RhdGFJ
dGVtTGlzdFR5cGU6CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RhdGljIE5vZGVMaXN0Um9vdFR5cGUg
cm9vdFR5cGVGcm9tQ29sbAogICAgIGNhc2UgQ2xhc3NOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBO
YW1lTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgVGFnTm9kZUxpc3RUeXBlOgorICAgIGNhc2UgSFRN
TFRhZ05vZGVMaXN0VHlwZToKICAgICBjYXNlIFJhZGlvTm9kZUxpc3RUeXBlOgogICAgIGNhc2Ug
TGFiZWxzTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTWljcm9EYXRhSXRlbUxpc3RUeXBlOgpAQCAt
MTY2LDYgKzE2OSw3IEBAIHN0YXRpYyBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGEK
ICAgICBjYXNlIENsYXNzTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTmFtZU5vZGVMaXN0VHlwZToK
ICAgICBjYXNlIFRhZ05vZGVMaXN0VHlwZToKKyAgICBjYXNlIEhUTUxUYWdOb2RlTGlzdFR5cGU6
CiAgICAgY2FzZSBSYWRpb05vZGVMaXN0VHlwZToKICAgICBjYXNlIExhYmVsc05vZGVMaXN0VHlw
ZToKICAgICBjYXNlIE1pY3JvRGF0YUl0ZW1MaXN0VHlwZToKQEAgLTI0OSw2ICsyNTMsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNBY2NlcHRhYmxlRWxlbWVudChDCiAgICAgY2FzZSBDbGFzc05v
ZGVMaXN0VHlwZToKICAgICBjYXNlIE5hbWVOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBUYWdOb2Rl
TGlzdFR5cGU6CisgICAgY2FzZSBIVE1MVGFnTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgUmFkaW9O
b2RlTGlzdFR5cGU6CiAgICAgY2FzZSBMYWJlbHNOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBNaWNy
b0RhdGFJdGVtTGlzdFR5cGU6CkBAIC0yNTgsMTMgKzI2Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0FjY2VwdGFibGVFbGVtZW50KEMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRl
PGJvb2wgZm9yd2FyZD4KLXN0YXRpYyBOb2RlKiBuZXh0Tm9kZShOb2RlKiBiYXNlLCBOb2RlKiBw
cmV2aW91cywgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKQorc3RhdGljIE5vZGUqIHBy
ZXZpb3VzTm9kZShOb2RlKiBiYXNlLCBOb2RlKiBwcmV2aW91cywgYm9vbCBvbmx5SW5jbHVkZURp
cmVjdENoaWxkcmVuKQogewotICAgIGlmIChmb3J3YXJkKQotICAgICAgICByZXR1cm4gb25seUlu
Y2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5uZXh0U2libGluZygpIDogTm9kZVRyYXZl
cnNhbDo6bmV4dChwcmV2aW91cywgYmFzZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gb25s
eUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzKHByZXZpb3VzLCBiYXNlKTsKKyAgICByZXR1cm4gb25seUlu
Y2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVU
cmF2ZXJzYWw6OnByZXZpb3VzKHByZXZpb3VzLCBiYXNlKTsKIH0KIAogc3RhdGljIGlubGluZSBO
b2RlKiBsYXN0RGVzY2VuZGVudChOb2RlKiBub2RlKQpAQCAtMjc1LDIxICsyNzYsMTcgQEAgc3Rh
dGljIGlubGluZSBOb2RlKiBsYXN0RGVzY2VuZGVudChOb2RlKgogICAgIHJldHVybiBub2RlOwog
fQogCi1zdGF0aWMgTm9kZSogZmlyc3ROb2RlKGJvb2wgZm9yd2FyZCwgTm9kZSogcm9vdE5vZGUs
IGJvb2wgb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikKK3N0YXRpYyBOb2RlKiBsYXN0Tm9kZShO
b2RlKiByb290Tm9kZSwgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKQogewotICAgIGlm
IChmb3J3YXJkKQotICAgICAgICByZXR1cm4gcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICBl
bHNlCi0gICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcm9vdE5vZGUt
Pmxhc3RDaGlsZCgpIDogbGFzdERlc2NlbmRlbnQocm9vdE5vZGUpOworICAgIHJldHVybiBvbmx5
SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcm9vdE5vZGUtPmxhc3RDaGlsZCgpIDogbGFzdERlc2Nl
bmRlbnQocm9vdE5vZGUpOwogfQogCi10ZW1wbGF0ZSA8Ym9vbCBmb3J3YXJkPgotTm9kZSogTGl2
ZU5vZGVMaXN0QmFzZTo6aXRlcmF0ZUZvck5leHROb2RlKE5vZGUqIGN1cnJlbnQpIGNvbnN0CitO
b2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVyYXRlRm9yUHJldmlvdXNOb2RlKE5vZGUqIGN1cnJl
bnQpIGNvbnN0CiB7CiAgICAgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID0gc2hvdWxk
T25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpOwogICAgIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rp
b25UeXBlID0gdHlwZSgpOwogICAgIE5vZGUqIHJvb3ROb2RlID0gdGhpcy0+cm9vdE5vZGUoKTsK
LSAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IG5leHROb2RlPGZvcndhcmQ+KHJvb3ROb2Rl
LCBjdXJyZW50LCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKSkgeworICAgIGZvciAoOyBjdXJy
ZW50OyBjdXJyZW50ID0gcHJldmlvdXNOb2RlKHJvb3ROb2RlLCBjdXJyZW50LCBvbmx5SW5jbHVk
ZURpcmVjdENoaWxkcmVuKSkgewogICAgICAgICBpZiAoaXNOb2RlTGlzdChjb2xsZWN0aW9uVHlw
ZSkpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGlj
X2Nhc3Q8Y29uc3QgTGl2ZU5vZGVMaXN0Kj4odGhpcyktPm5vZGVNYXRjaGVzKHRvRWxlbWVudChj
dXJyZW50KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChjdXJyZW50KTsKQEAg
LTI5OCwzOSArMjk1LDExNiBAQCBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVyYXRlRm9yTmV4
dE5vCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChjdXJyZW50KTsKICAgICAgICAg
fQogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCi0vLyBXaXRob3V0IHRoaXMgQUxXQVlTX0lO
TElORSwgbGVuZ3RoKCkgYW5kIGl0ZW0oKSBjYW4gYmUgMTAwJSBzbG93ZXIuCi10ZW1wbGF0ZTxi
b29sIGZvcndhcmQ+IEFMV0FZU19JTkxJTkUKLU5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1C
ZWZvcmVPckFmdGVyKE5vZGUqIHByZXZpb3VzKSBjb25zdAorTm9kZSogTGl2ZU5vZGVMaXN0QmFz
ZTo6aXRlbUJlZm9yZShOb2RlKiBwcmV2aW91cykgY29uc3QKIHsKICAgICBOb2RlKiBjdXJyZW50
OwogICAgIGlmIChMSUtFTFkoISFwcmV2aW91cykpIC8vIFdpdGhvdXQgdGhpcyBMSUtFTFksIGxl
bmd0aCgpIGFuZCBpdGVtKCkgY2FuIGJlIDEwJSBzbG93ZXIuCi0gICAgICAgIGN1cnJlbnQgPSBu
ZXh0Tm9kZTxmb3J3YXJkPihyb290Tm9kZSgpLCBwcmV2aW91cywgc2hvdWxkT25seUluY2x1ZGVE
aXJlY3RDaGlsZHJlbigpKTsKKyAgICAgICAgY3VycmVudCA9IHByZXZpb3VzTm9kZShyb290Tm9k
ZSgpLCBwcmV2aW91cywgc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKTsKICAgICBl
bHNlCi0gICAgICAgIGN1cnJlbnQgPSBmaXJzdE5vZGUoZm9yd2FyZCwgcm9vdE5vZGUoKSwgc2hv
dWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKTsKKyAgICAgICAgY3VycmVudCA9IGxhc3RO
b2RlKHJvb3ROb2RlKCksIHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKSk7CiAKICAg
ICBpZiAoaXNOb2RlTGlzdCh0eXBlKCkpICYmIHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRy
ZW4oKSkgLy8gQ2hpbGROb2RlTGlzdAogICAgICAgICByZXR1cm4gY3VycmVudDsKIAotICAgIHJl
dHVybiBpdGVyYXRlRm9yTmV4dE5vZGU8Zm9yd2FyZD4oY3VycmVudCk7CisgICAgcmV0dXJuIGl0
ZXJhdGVGb3JQcmV2aW91c05vZGUoY3VycmVudCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2Rl
TGlzdFR5cGU+CitpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBOb2RlTGlzdFR5
cGUqLCBFbGVtZW50Kik7CisKK3RlbXBsYXRlIDw+IGlubGluZSBib29sIGlzTWF0Y2hpbmdFbGVt
ZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uKiBub2RlTGlzdCwgRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICByZXR1cm4gaXNBY2NlcHRhYmxlRWxlbWVudChub2RlTGlzdC0+dHlwZSgpLCBlbGVtZW50
KTsKIH0KIAotLy8gV2l0aG91dCB0aGlzIEFMV0FZU19JTkxJTkUsIGxlbmd0aCgpIGFuZCBpdGVt
KCkgY2FuIGJlIDEwMCUgc2xvd2VyLgotQUxXQVlTX0lOTElORSBOb2RlKiBMaXZlTm9kZUxpc3RC
YXNlOjppdGVtQmVmb3JlKE5vZGUqIHByZXZpb3VzKSBjb25zdAordGVtcGxhdGUgPD4gaW5saW5l
IGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgTGl2ZU5vZGVMaXN0KiBub2RlTGlzdCwgRWxl
bWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXRlbUJlZm9yZU9yQWZ0ZXI8ZmFsc2U+KHBy
ZXZpb3VzKTsKKyAgICByZXR1cm4gbm9kZUxpc3QtPm5vZGVNYXRjaGVzKGVsZW1lbnQpOwogfQog
Ci0vLyBXaXRob3V0IHRoaXMgQUxXQVlTX0lOTElORSwgbGVuZ3RoKCkgYW5kIGl0ZW0oKSBjYW4g
YmUgMTAwJSBzbG93ZXIuCi1BTFdBWVNfSU5MSU5FIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0
ZW1BZnRlcih1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgTm9kZSogcHJldmlvdXMpIGNvbnN0Cit0
ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBIVE1MVGFnTm9k
ZUxpc3QqIG5vZGVMaXN0LCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChVTkxJS0VMWShv
dmVycmlkZXNJdGVtQWZ0ZXIoKSkpIC8vIFdpdGhvdXQgdGhpcyBVTkxJS0VMWSwgbGVuZ3RoKCkg
Y2FuIGJlIDEwMCUgc2xvd2VyLgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TENvbGxlY3Rpb24qPih0aGlzKS0+dmlydHVhbEl0ZW1BZnRlcihvZmZzZXRJbkFycmF5LCB0b0Vs
ZW1lbnQocHJldmlvdXMpKTsKLSAgICBBU1NFUlQoIW9mZnNldEluQXJyYXkpOwotICAgIHJldHVy
biBpdGVtQmVmb3JlT3JBZnRlcjx0cnVlPihwcmV2aW91cyk7CisgICAgcmV0dXJuIG5vZGVMaXN0
LT5ub2RlTWF0Y2hlc0lubGluZWQoZWxlbWVudCk7Cit9CisKK3RlbXBsYXRlIDw+IGlubGluZSBi
b29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IENsYXNzTm9kZUxpc3QqIG5vZGVMaXN0LCBFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIHJldHVybiBub2RlTGlzdC0+bm9kZU1hdGNoZXNJbmxpbmVk
KGVsZW1lbnQpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgoraW5saW5lIEVs
ZW1lbnQqIGZpcnN0TWF0Y2hpbmdFbGVtZW50KGNvbnN0IE5vZGVMaXN0VHlwZSogbm9kZUxpc3Qs
IENvbnRhaW5lck5vZGUqIHJvb3QpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3QpOworICAgIHdoaWxlIChlbGVtZW50ICYmICFpc01h
dGNoaW5nRWxlbWVudChub2RlTGlzdCwgZWxlbWVudCkpCisgICAgICAgIGVsZW1lbnQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIHJvb3QpOworICAgIHJldHVybiBlbGVtZW50Owor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgoraW5saW5lIEVsZW1lbnQqIG5leHRN
YXRjaGluZ0VsZW1lbnQoY29uc3QgTm9kZUxpc3RUeXBlKiBub2RlTGlzdCwgRWxlbWVudCogY3Vy
cmVudCwgQ29udGFpbmVyTm9kZSogcm9vdCkKK3sKKyAgICBkbyB7CisgICAgICAgIGN1cnJlbnQg
PSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGN1cnJlbnQsIHJvb3QpOworICAgIH0gd2hpbGUgKGN1
cnJlbnQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBjdXJyZW50KSk7CisgICAgcmV0
dXJuIGN1cnJlbnQ7Cit9CisKK2lubGluZSBFbGVtZW50KiBmaXJzdE1hdGNoaW5nQ2hpbGRFbGVt
ZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uKiBub2RlTGlzdCwgQ29udGFpbmVyTm9kZSogcm9vdCkK
K3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4o
cm9vdCk7CisgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0
LCBlbGVtZW50KSkKKyAgICAgICAgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKGVsZW1lbnQsIHJvb3QpOworICAgIHJldHVybiBlbGVtZW50OworfQorCitp
bmxpbmUgRWxlbWVudCogbmV4dE1hdGNoaW5nQ2hpbGRFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0
aW9uKiBub2RlTGlzdCwgRWxlbWVudCogY3VycmVudCwgQ29udGFpbmVyTm9kZSogcm9vdCkKK3sK
KyAgICBkbyB7CisgICAgICAgIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihjdXJyZW50LCByb290KTsKKyAgICB9IHdoaWxlIChjdXJyZW50ICYmICFpc01h
dGNoaW5nRWxlbWVudChub2RlTGlzdCwgY3VycmVudCkpOworICAgIHJldHVybiBjdXJyZW50Owor
fQorCitpbmxpbmUgTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6dHJhdmVyc2VGaXJzdE5vZGUoQ29u
dGFpbmVyTm9kZSogcm9vdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNOb2RlTGlzdCh0eXBlKCkp
KTsKKyAgICBBU1NFUlQoIW92ZXJyaWRlc0l0ZW1BZnRlcigpKTsKKworICAgIGlmICh0eXBlKCkg
PT0gQ2hpbGROb2RlTGlzdFR5cGUpCisgICAgICAgIHJldHVybiByb290LT5maXJzdENoaWxkKCk7
CisgICAgaWYgKHR5cGUoKSA9PSBIVE1MVGFnTm9kZUxpc3RUeXBlKQorICAgICAgICByZXR1cm4g
Zmlyc3RNYXRjaGluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTFRhZ05vZGVMaXN0Kj4o
dGhpcyksIHJvb3QpOworICAgIGlmICh0eXBlKCkgPT0gQ2xhc3NOb2RlTGlzdFR5cGUpCisgICAg
ICAgIHJldHVybiBmaXJzdE1hdGNoaW5nRWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBDbGFzc05v
ZGVMaXN0Kj4odGhpcyksIHJvb3QpOworICAgIHJldHVybiBmaXJzdE1hdGNoaW5nRWxlbWVudChz
dGF0aWNfY2FzdDxjb25zdCBMaXZlTm9kZUxpc3QqPih0aGlzKSwgcm9vdCk7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CitpbmxpbmUgRWxlbWVudCogdHJhdmVyc2VNYXRjaGlu
Z0VsZW1lbnRzRm9yd2FyZFRvT2Zmc2V0KGNvbnN0IE5vZGVMaXN0VHlwZSogbm9kZUxpc3QsIHVu
c2lnbmVkIG9mZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1lbnQsIHVuc2lnbmVkJiBjdXJyZW50
T2Zmc2V0LCBDb250YWluZXJOb2RlKiByb290KQoreworICAgIHdoaWxlIChjdXJyZW50T2Zmc2V0
ICE9IG9mZnNldCAmJiAoY3VycmVudEVsZW1lbnQgPSBuZXh0TWF0Y2hpbmdFbGVtZW50KG5vZGVM
aXN0LCBjdXJyZW50RWxlbWVudCwgcm9vdCkpKQorICAgICAgICArK2N1cnJlbnRPZmZzZXQ7Cisg
ICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50OworfQorCitpbmxpbmUgTm9kZSogTGl2ZU5vZGVMaXN0
QmFzZTo6dHJhdmVyc2VGb3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBjdXJy
ZW50Tm9kZSwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlzTm9kZUxpc3QodHlwZSgpKSk7CisgICAgQVNTRVJUKCFvdmVy
cmlkZXNJdGVtQWZ0ZXIoKSk7CisgICAgaWYgKHR5cGUoKSA9PSBIVE1MVGFnTm9kZUxpc3RUeXBl
KQorICAgICAgICByZXR1cm4gdHJhdmVyc2VNYXRjaGluZ0VsZW1lbnRzRm9yd2FyZFRvT2Zmc2V0
KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxUYWdOb2RlTGlzdCo+KHRoaXMpLCBvZmZzZXQsIHRvRWxl
bWVudChjdXJyZW50Tm9kZSksIGN1cnJlbnRPZmZzZXQsIHJvb3QpOworICAgIGlmICh0eXBlKCkg
PT0gQ2xhc3NOb2RlTGlzdFR5cGUpCisgICAgICAgIHJldHVybiB0cmF2ZXJzZU1hdGNoaW5nRWxl
bWVudHNGb3J3YXJkVG9PZmZzZXQoc3RhdGljX2Nhc3Q8Y29uc3QgQ2xhc3NOb2RlTGlzdCo+KHRo
aXMpLCBvZmZzZXQsIHRvRWxlbWVudChjdXJyZW50Tm9kZSksIGN1cnJlbnRPZmZzZXQsIHJvb3Qp
OworICAgIGlmICh0eXBlKCkgPT0gQ2hpbGROb2RlTGlzdFR5cGUpIHsKKyAgICAgICAgd2hpbGUg
KGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0ICYmIChjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5u
ZXh0U2libGluZygpKSkKKyAgICAgICAgICAgICsrY3VycmVudE9mZnNldDsKKyAgICAgICAgcmV0
dXJuIGN1cnJlbnROb2RlOworICAgIH0KKyAgICByZXR1cm4gdHJhdmVyc2VNYXRjaGluZ0VsZW1l
bnRzRm9yd2FyZFRvT2Zmc2V0KHN0YXRpY19jYXN0PGNvbnN0IExpdmVOb2RlTGlzdCo+KHRoaXMp
LCBvZmZzZXQsIHRvRWxlbWVudChjdXJyZW50Tm9kZSksIGN1cnJlbnRPZmZzZXQsIHJvb3QpOwog
fQogCiBib29sIEFMV0FZU19JTkxJTkUgTGl2ZU5vZGVMaXN0QmFzZTo6aXNMYXN0SXRlbUNsb3Nl
clRoYW5MYXN0T3JDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKQEAgLTM4OSwxMyAr
NDYzLDIzIEBAIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW0odW5zaWduZWQgb2YKICAgICAg
ICAgc3RhdGljX2Nhc3Q8Y29uc3QgUHJvcGVydHlOb2RlTGlzdCo+KHRoaXMpLT51cGRhdGVSZWZF
bGVtZW50cygpOwogI2VuZGlmCiAKKyAgICBDb250YWluZXJOb2RlKiByb290ID0gcm9vdENvbnRh
aW5lck5vZGUoKTsKKyAgICBpZiAoIXJvb3QpIHsKKyAgICAgICAgc2V0TGVuZ3RoQ2FjaGUoMCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIGlmIChpc0xlbmd0aENhY2hlVmFsaWQo
KSAmJiAhb3ZlcnJpZGVzSXRlbUFmdGVyKCkgJiYgaXNMYXN0SXRlbUNsb3NlclRoYW5MYXN0T3JD
YWNoZWRJdGVtKG9mZnNldCkpIHsKICAgICAgICAgTm9kZSogbGFzdEl0ZW0gPSBpdGVtQmVmb3Jl
KDApOwogICAgICAgICBBU1NFUlQobGFzdEl0ZW0pOwogICAgICAgICBzZXRJdGVtQ2FjaGUobGFz
dEl0ZW0sIGNhY2hlZExlbmd0aCgpIC0gMSwgMCk7CiAgICAgfSBlbHNlIGlmICghaXNJdGVtQ2Fj
aGVWYWxpZCgpIHx8IGlzRmlyc3RJdGVtQ2xvc2VyVGhhbkNhY2hlZEl0ZW0ob2Zmc2V0KSB8fCAo
b3ZlcnJpZGVzSXRlbUFmdGVyKCkgJiYgb2Zmc2V0IDwgY2FjaGVkSXRlbU9mZnNldCgpKSkgewog
ICAgICAgICB1bnNpZ25lZCBvZmZzZXRJbkFycmF5ID0gMDsKLSAgICAgICAgTm9kZSogZmlyc3RJ
dGVtID0gaXRlbUFmdGVyKG9mZnNldEluQXJyYXksIDApOworICAgICAgICBOb2RlKiBmaXJzdEl0
ZW07CisgICAgICAgIGlmIChpc05vZGVMaXN0KHR5cGUoKSkpCisgICAgICAgICAgICBmaXJzdEl0
ZW0gPSB0cmF2ZXJzZUZpcnN0Tm9kZShyb290KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Zmlyc3RJdGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKS0+dHJh
dmVyc2VGaXJzdEVsZW1lbnQob2Zmc2V0LCByb290KTsKICAgICAgICAgaWYgKCFmaXJzdEl0ZW0p
IHsKICAgICAgICAgICAgIHNldExlbmd0aENhY2hlKDApOwogICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC00MDcsMTMgKzQ5MSwxNCBAQCBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVtKHVuc2ln
bmVkIG9mCiAgICAgaWYgKGNhY2hlZEl0ZW1PZmZzZXQoKSA9PSBvZmZzZXQpCiAgICAgICAgIHJl
dHVybiBjYWNoZWRJdGVtKCk7CiAKLSAgICByZXR1cm4gaXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJ
dGVtKG9mZnNldCk7CisgICAgcmV0dXJuIGl0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbShvZmZz
ZXQsIHJvb3QpOwogfQogCi1Ob2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVtQmVmb3JlT3JBZnRl
ckNhY2hlZEl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdAoraW5saW5lIE5vZGUqIExpdmVOb2Rl
TGlzdEJhc2U6Oml0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZzZXQsIENv
bnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgY3VycmVudE9mZnNldCA9
IGNhY2hlZEl0ZW1PZmZzZXQoKTsKICAgICBOb2RlKiBjdXJyZW50SXRlbSA9IGNhY2hlZEl0ZW0o
KTsKKyAgICBBU1NFUlQoY3VycmVudEl0ZW0pOwogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0ICE9
IG9mZnNldCk7CiAKICAgICBpZiAob2Zmc2V0IDwgY2FjaGVkSXRlbU9mZnNldCgpKSB7CkBAIC00
MzAsMTkgKzUxNSwxOSBAQCBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVtQmVmb3JlT3JBZnRl
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHVuc2lnbmVkIG9mZnNldEluQXJyYXkg
PSBvdmVycmlkZXNJdGVtQWZ0ZXIoKSA/IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9u
Kj4odGhpcyktPm1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldCA6IDA7Ci0gICAgd2hpbGUgKChj
dXJyZW50SXRlbSA9IGl0ZW1BZnRlcihvZmZzZXRJbkFycmF5LCBjdXJyZW50SXRlbSkpKSB7Ci0g
ICAgICAgIGN1cnJlbnRPZmZzZXQrKzsKLSAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPT0gb2Zm
c2V0KSB7Ci0gICAgICAgICAgICBzZXRJdGVtQ2FjaGUoY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZz
ZXQsIG9mZnNldEluQXJyYXkpOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgb2Zmc2V0T2ZMYXN0SXRlbSA9IGN1cnJlbnRP
ZmZzZXQ7Ci0gICAgc2V0TGVuZ3RoQ2FjaGUob2Zmc2V0T2ZMYXN0SXRlbSArIDEpOworICAgIHVu
c2lnbmVkIG9mZnNldEluQXJyYXkgPSAwOworICAgIGlmIChpc05vZGVMaXN0KHR5cGUoKSkpCisg
ICAgICAgIGN1cnJlbnRJdGVtID0gdHJhdmVyc2VGb3J3YXJkVG9PZmZzZXQob2Zmc2V0LCBjdXJy
ZW50SXRlbSwgY3VycmVudE9mZnNldCwgcm9vdCk7CisgICAgZWxzZQorICAgICAgICBjdXJyZW50
SXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9uKj4odGhpcyktPnRyYXZlcnNl
Rm9yd2FyZFRvT2Zmc2V0KG9mZnNldCwgdG9FbGVtZW50KGN1cnJlbnRJdGVtKSwgY3VycmVudE9m
ZnNldCwgb2Zmc2V0SW5BcnJheSwgcm9vdCk7CiAKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIWN1
cnJlbnRJdGVtKSB7CisgICAgICAgIC8vIERpZCBub3QgZmluZCB0aGUgaXRlbS4gT24gcGx1cyBz
aWRlLCB3ZSBub3cga25vdyB0aGUgbGVuZ3RoLgorICAgICAgICBzZXRMZW5ndGhDYWNoZShjdXJy
ZW50T2Zmc2V0ICsgMSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBzZXRJdGVtQ2Fj
aGUoY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZzZXQsIG9mZnNldEluQXJyYXkpOworICAgIHJldHVy
biBjdXJyZW50SXRlbTsKIH0KIAogRWxlbWVudCogSFRNTENvbGxlY3Rpb246OnZpcnR1YWxJdGVt
QWZ0ZXIodW5zaWduZWQmLCBFbGVtZW50KikgY29uc3QKQEAgLTQ3OSw2ICs1NjQsNDUgQEAgYm9v
bCBIVE1MQ29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgIHJldHVybiBlLT5nZXRO
YW1lQXR0cmlidXRlKCkgPT0gbmFtZSAmJiBlLT5nZXRJZEF0dHJpYnV0ZSgpICE9IG5hbWU7CiB9
CiAKK2lubGluZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGaXJzdEVsZW1lbnQo
dW5zaWduZWQmIG9mZnNldEluQXJyYXksIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFpc05vZGVMaXN0KHR5cGUoKSkpOworICAgIGlmIChvdmVycmlkZXNJdGVtQWZ0
ZXIoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxJdGVtQWZ0ZXIob2Zmc2V0SW5BcnJheSwgMCk7
CisgICAgQVNTRVJUKCFvZmZzZXRJbkFycmF5KTsKKyAgICBpZiAoc2hvdWxkT25seUluY2x1ZGVE
aXJlY3RDaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmlyc3RNYXRjaGluZ0NoaWxkRWxlbWVu
dChzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlvbio+KHRoaXMpLCByb290KTsKKyAgICBy
ZXR1cm4gZmlyc3RNYXRjaGluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rp
b24qPih0aGlzKSwgcm9vdCk7Cit9CisKK2lubGluZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6
dHJhdmVyc2VGb3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50
RWxlbWVudCwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIHVuc2lnbmVkJiBvZmZzZXRJbkFycmF5
LCBDb250YWluZXJOb2RlKiByb290KSBjb25zdAoreworICAgIEFTU0VSVCghaXNOb2RlTGlzdCh0
eXBlKCkpKTsKKyAgICBpZiAob3ZlcnJpZGVzSXRlbUFmdGVyKCkpIHsKKyAgICAgICAgb2Zmc2V0
SW5BcnJheSA9IG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldDsKKyAgICAgICAgd2hpbGUgKGN1
cnJlbnRPZmZzZXQgIT0gb2Zmc2V0ICYmIChjdXJyZW50RWxlbWVudCA9IHZpcnR1YWxJdGVtQWZ0
ZXIob2Zmc2V0SW5BcnJheSwgY3VycmVudEVsZW1lbnQpKSkKKyAgICAgICAgICAgICsrY3VycmVu
dE9mZnNldDsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50OworICAgIH0KKyAgICBpZiAo
c2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKSB7CisgICAgICAgIHdoaWxlIChjdXJy
ZW50T2Zmc2V0ICE9IG9mZnNldCAmJiAoY3VycmVudEVsZW1lbnQgPSBuZXh0TWF0Y2hpbmdDaGls
ZEVsZW1lbnQodGhpcywgY3VycmVudEVsZW1lbnQsIHJvb3QpKSkKKyAgICAgICAgICAgICsrY3Vy
cmVudE9mZnNldDsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50OworICAgIH0KKyAgICBy
ZXR1cm4gdHJhdmVyc2VNYXRjaGluZ0VsZW1lbnRzRm9yd2FyZFRvT2Zmc2V0KHRoaXMsIG9mZnNl
dCwgY3VycmVudEVsZW1lbnQsIGN1cnJlbnRPZmZzZXQsIHJvb3QpOworfQorCitpbmxpbmUgRWxl
bWVudCogSFRNTENvbGxlY3Rpb246OnRyYXZlcnNlTmV4dEVsZW1lbnQodW5zaWduZWQmIG9mZnNl
dEluQXJyYXksIEVsZW1lbnQqIHByZXZpb3VzLCBDb250YWluZXJOb2RlKiByb290KSBjb25zdAor
eworICAgIEFTU0VSVCghaXNOb2RlTGlzdCh0eXBlKCkpKTsKKyAgICBpZiAoVU5MSUtFTFkob3Zl
cnJpZGVzSXRlbUFmdGVyKCkpKQorICAgICAgICByZXR1cm4gdmlydHVhbEl0ZW1BZnRlcihvZmZz
ZXRJbkFycmF5LCBwcmV2aW91cyk7CisgICAgQVNTRVJUKCFvZmZzZXRJbkFycmF5KTsKKyAgICBp
ZiAoc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gbmV4
dE1hdGNoaW5nQ2hpbGRFbGVtZW50KHRoaXMsIHByZXZpb3VzLCByb290KTsKKyAgICByZXR1cm4g
bmV4dE1hdGNoaW5nRWxlbWVudCh0aGlzLCBwcmV2aW91cywgcm9vdCk7Cit9CisKIE5vZGUqIEhU
TUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAog
ewogICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYXV0aG9yL2RodG1s
L3JlZmVyZW5jZS9tZXRob2RzL25hbWVkaXRlbS5hc3AKQEAgLTQ4NywyMSArNjExLDI1IEBAIE5v
ZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXQKICAgICAvLyBvYmplY3Qgd2l0
aCBhIG1hdGNoaW5nIG5hbWUgYXR0cmlidXRlLCBidXQgb25seSBvbiB0aG9zZSBlbGVtZW50cwog
ICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1lIGF0dHJpYnV0ZS4KIAorICAgIENvbnRhaW5l
ck5vZGUqIHJvb3QgPSByb290Q29udGFpbmVyTm9kZSgpOworICAgIGlmICghcm9vdCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICB1bnNpZ25lZCBhcnJheU9mZnNldCA9IDA7CiAgICAgdW5zaWdu
ZWQgaSA9IDA7Ci0gICAgZm9yIChOb2RlKiBlID0gaXRlbUFmdGVyKGFycmF5T2Zmc2V0LCAwKTsg
ZTsgZSA9IGl0ZW1BZnRlcihhcnJheU9mZnNldCwgZSkpIHsKLSAgICAgICAgaWYgKGNoZWNrRm9y
TmFtZU1hdGNoKHRvRWxlbWVudChlKSwgLyogY2hlY2tOYW1lICovIGZhbHNlLCBuYW1lKSkgewot
ICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGUsIGksIGFycmF5T2Zmc2V0KTsKLSAgICAgICAgICAg
IHJldHVybiBlOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHRyYXZlcnNlRmlyc3RFbGVt
ZW50KGFycmF5T2Zmc2V0LCByb290KTsgZWxlbWVudDsgZWxlbWVudCA9IHRyYXZlcnNlTmV4dEVs
ZW1lbnQoYXJyYXlPZmZzZXQsIGVsZW1lbnQsIHJvb3QpKSB7CisgICAgICAgIGlmIChjaGVja0Zv
ck5hbWVNYXRjaChlbGVtZW50LCAvKiBjaGVja05hbWUgKi8gZmFsc2UsIG5hbWUpKSB7CisgICAg
ICAgICAgICBzZXRJdGVtQ2FjaGUoZWxlbWVudCwgaSwgYXJyYXlPZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICAgICAgaSsrOwogICAgIH0KIAogICAg
IGkgPSAwOwotICAgIGZvciAoTm9kZSogZSA9IGl0ZW1BZnRlcihhcnJheU9mZnNldCwgMCk7IGU7
IGUgPSBpdGVtQWZ0ZXIoYXJyYXlPZmZzZXQsIGUpKSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5h
bWVNYXRjaCh0b0VsZW1lbnQoZSksIC8qIGNoZWNrTmFtZSAqLyB0cnVlLCBuYW1lKSkgewotICAg
ICAgICAgICAgc2V0SXRlbUNhY2hlKGUsIGksIGFycmF5T2Zmc2V0KTsKLSAgICAgICAgICAgIHJl
dHVybiB0b0VsZW1lbnQoZSk7CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdHJhdmVyc2VG
aXJzdEVsZW1lbnQoYXJyYXlPZmZzZXQsIHJvb3QpOyBlbGVtZW50OyBlbGVtZW50ID0gdHJhdmVy
c2VOZXh0RWxlbWVudChhcnJheU9mZnNldCwgZWxlbWVudCwgcm9vdCkpIHsKKyAgICAgICAgaWYg
KGNoZWNrRm9yTmFtZU1hdGNoKGVsZW1lbnQsIC8qIGNoZWNrTmFtZSAqLyB0cnVlLCBuYW1lKSkg
eworICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGVsZW1lbnQsIGksIGFycmF5T2Zmc2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICB9CiAgICAgICAgIGkrKzsKICAgICB9
CkBAIC01MTQsMTcgKzY0MiwyMSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2Fj
aGUoKSBjCiAgICAgaWYgKGhhc05hbWVDYWNoZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBD
b250YWluZXJOb2RlKiByb290ID0gcm9vdENvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoIXJvb3Qp
CisgICAgICAgIHJldHVybjsKKwogICAgIHVuc2lnbmVkIGFycmF5T2Zmc2V0ID0gMDsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBpdGVtQWZ0ZXIoYXJyYXlPZmZzZXQsIDApOyBub2RlOyBub2RlID0g
aXRlbUFmdGVyKGFycmF5T2Zmc2V0LCBub2RlKSkgewotICAgICAgICBpZiAoIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0cmF2ZXJzZUZpcnN0RWxl
bWVudChhcnJheU9mZnNldCwgcm9vdCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSB0cmF2ZXJzZU5leHRF
bGVtZW50KGFycmF5T2Zmc2V0LCBlbGVtZW50LCByb290KSkgeworICAgICAgICBpZiAoIWVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBIVE1M
RWxlbWVudCogZSA9IHRvSFRNTEVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldE5hbWVBdHRyaWJ1dGUoKTsKKyAgICAgICAg
SFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gdG9IVE1MRWxlbWVudChlbGVtZW50KTsKKyAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBodG1sRWxlbWVudC0+Z2V0SWRBdHRy
aWJ1dGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGh0bWxF
bGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlKTsKLSAgICAgICAg
aWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsICYm
ICh0eXBlKCkgIT0gRG9jQWxsIHx8IG5hbWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKGUp
KSkKLSAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgZSk7CisgICAgICAg
ICAgICBhcHBlbmRJZENhY2hlKGlkQXR0clZhbCwgaHRtbEVsZW1lbnQpOworICAgICAgICBpZiAo
IW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgKHR5
cGUoKSAhPSBEb2NBbGwgfHwgbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoaHRtbEVs
ZW1lbnQpKSkKKyAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgaHRtbEVs
ZW1lbnQpOwogICAgIH0KIAogICAgIHNldEhhc05hbWVDYWNoZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENvbGxlY3Rpb24uaAkocmV2aXNpb24gMTM3NzE1KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRWxlbWVudCogdmlydHVhbEl0ZW1BZnRlcih1bnNpZ25l
ZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCopIGNvbnN0OwogCisgICAgRWxlbWVudCogdHJhdmVy
c2VGaXJzdEVsZW1lbnQodW5zaWduZWQmIG9mZnNldEluQXJyYXksIENvbnRhaW5lck5vZGUqIHJv
b3QpIGNvbnN0OworICAgIEVsZW1lbnQqIHRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1lbnQsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0
LCB1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CisK
IHByb3RlY3RlZDoKICAgICBIVE1MQ29sbGVjdGlvbihOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlw
ZSwgSXRlbUFmdGVyT3ZlcnJpZGVUeXBlKTsKIApAQCAtNzcsNiArODAsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja0Zvck5hbWVNYXRjaChFbGVtZW50KiwgYm9vbCBj
aGVja05hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgRWxlbWVudCog
dHJhdmVyc2VOZXh0RWxlbWVudCh1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJl
dmlvdXMsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlz
TGl2ZU5vZGVMaXN0KCkgY29uc3QgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIHRydWU7IH0KIAo=
</data>
<flag name="commit-queue"
          id="197214"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180186</attachid>
            <date>2012-12-19 09:57:56 -0800</date>
            <delta_ts>2012-12-19 14:01:06 -0800</delta_ts>
            <desc>patch3</desc>
            <filename>node-list-traversal-7.patch</filename>
            <type>text/plain</type>
            <size>36749</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODE3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMi0xOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEVsZW1lbnRUcmF2ZXJz
YWwgaW4gTGl2ZU5vZGVMaXN0QmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1MzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRmFjdG9yIHRoZSBjb2RlIHNvIHRoYXQgd2UgZ2V0IGNsZWFuIG1pbmlt
YWxseSBicmFuY2h5IHRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIGFsbCB0aGUgY29tbW9uIGNhc2Vz
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgbW9yZSBwZXJmb3JtYW5jZSBjcml0
aWNhbCBmb3J3YXJkIHRyYXZlcnNhbCBvbmx5LCBiYWNrd2FyZHMgdHJhdmVyc2FsIGlzIHVuYWZm
ZWN0ZWQgZm9yIG5vdy4KKworICAgICAgICBJbnN0cnVtZW50cyB0aGlua3MgaXQgaXMgYSBwcm9n
cmVzc2lvbiBhdCBsZWFzdCBpbiBET00vRE9NRGl2V2Fsay5odG1sLiBCb3RzIHNob3VsZCB0ZWxs
IG1vcmUuCisKKyAgICAgICAgKiBkb20vQ2xhc3NOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6CisgICAgICAgICogZG9tL0NsYXNzTm9k
ZUxpc3QuaDoKKyAgICAgICAgKENsYXNzTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xh
c3NOb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xhc3NOb2RlTGlzdDo6bm9kZU1hdGNoZXNJbmxpbmVkKToKKworICAgICAgICAgICAgQWRk
IGlubGluZWQgdmVyc2lvbiBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24gZm9yIGNsYXNzIGxpc3Rz
LgorCisgICAgICAgICogZG9tL0xpdmVOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
aXZlTm9kZUxpc3RCYXNlOjpyb290Q29udGFpbmVyTm9kZSk6CisKKyAgICAgICAgICAgIFJvb3Qg
aXMgYWx3YXlzIENvbnRhaW5lck5vZGUgaWYgdGhlIGxpc3QgaGFzIGFueXRoaW5nIGluIGl0LiBU
cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBzbGlnaHRseSBtb3JlCisgICAgICAgICAgICBlZmZpY2ll
bnQgaWYgd2Uga25vdyB3ZSBhcmUgb3BlcmF0aW5nIG9uIENvbnRhaW5lck5vZGVzLgorCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vTGl2ZU5vZGVMaXN0Lmg6CisgICAgICAgIChM
aXZlTm9kZUxpc3RCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdEJhc2U6OnNo
b3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lKToKKyAgICAgICAg
KiBkb20vVGFnTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9kZUxpc3Q6OlRh
Z05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0Ojp+VGFnTm9kZUxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhZ05vZGVMaXN0OjpIVE1MVGFnTm9kZUxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6CisgICAgICAg
ICogZG9tL1RhZ05vZGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRhZ05v
ZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpjcmVhdGUpOgorICAgICAg
ICAoSFRNTFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWdOb2RlTGlzdDo6
Y3JlYXRlKToKKworICAgICAgICAgICAgVXNlIHNlcGFyYXRlIENvbnRhaW5lclR5cGUgZW51bSB2
YWx1ZSBmb3IgSFRNTFRhZ05vZGVMaXN0IHNvIHdlIGNhbiB0ZWxsIGl0IGFwYXJ0IGZyb20gVGFn
Tm9kZUxpc3QuCisKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWdOb2RlTGlzdDo6bm9kZU1hdGNo
ZXNJbmxpbmVkKToKKworICAgICAgICAgICAgQWRkIGlubGluZWQgdmVyc2lvbiBvZiB0aGUgbWF0
Y2hpbmcgZnVuY3Rpb24gZm9yIHRhZyBsaXN0cy4KKworICAgICAgICAqIGh0bWwvQ29sbGVjdGlv
blR5cGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6cm9vdFR5cGVGcm9tQ29sbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aW52YWxp
ZGF0aW9uVHlwZUV4Y2x1ZGluZ0lkQW5kTmFtZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjppc01hdGNoaW5nRWxlbWVudCk6CisgICAgICAgIAorICAg
ICAgICAgICAgTGlzdCB0eXBlIHRlbXBsYXRlZCBtYXRjaGluZyBmdW5jdGlvbnMgZm9yIGNvbW1v
biBjYXNlcy4KKworICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6bGFzdE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFzZTo6aXRlcmF0ZUZvclByZXZpb3VzTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNlOjppdGVtQmVmb3JlKToKKworICAg
ICAgICAgICAgTGVhdmUgdGhlIGJhY2t3YXJkcyB0cmF2ZXJzYWwgdW5jaGFuZ2VkIGZvciBub3cg
YnV0IHJlbW92ZSB0aGUgZm9yd2FyZCB0cmF2ZXJzYWwgY29kZS4KKworICAgICAgICAoV2ViQ29y
ZTo6Zmlyc3RNYXRjaGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dE1hdGNoaW5n
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdE1hdGNoaW5nQ2hpbGRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Om5leHRNYXRjaGluZ0NoaWxkRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjp0cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQpOgorCisgICAg
ICAgICAgICBMaXN0IHR5cGUgdGVtcGxhdGVkIHRyYXZlcnNhbCBmdW5jdGlvbnMgd2l0aCBtYXRj
aGluZy4gU2VwYXJhdGUgZnVuY3Rpb25zIGZvciBmaXJzdCBhbmQgc3Vic2VxdWVudCBlbGVtZW50
cworCisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUNoaWxkTm9k
ZUxpc3RGb3J3YXJkVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFz
ZTo6dHJhdmVyc2VMaXZlTm9kZUxpc3RGaXJzdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGl2ZU5vZGVMaXN0QmFzZTo6dHJhdmVyc2VMaXZlTm9kZUxpc3RGb3J3YXJkVG9PZmZzZXQpOgor
CisgICAgICAgICAgICBMaXZlTm9kZUxpc3QgdHJhdmVyc2FsLCBwaWNraW5nIHRoZSByaWdodCB0
ZW1wbGF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFzZTo6aXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNlOjppdGVtQmVmb3JlT3JBZnRlckNhY2hl
ZEl0ZW0pOgorCisgICAgICAgICAgICBTd2l0Y2ggdG8gbmV3IHRyYXZlcnNhbCBmdW5jdGlvbnMu
CisKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJzZUZpcnN0RWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGb3J3YXJkVG9P
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnRyYXZlcnNlTmV4dEVs
ZW1lbnQpOgorCisgICAgICAgICAgICBIVE1MQ29sbGVjdGlvbiB0cmF2ZXJzYWwsIHBpY2tpbmcg
dGhlIHJpZ2h0IHRlbXBsYXRlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6
bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1l
Q2FjaGUpOgorCisgICAgICAgICAgICBTd2l0Y2ggdG8gbmV3IHRyYXZlcnNhbCBmdW5jdGlvbnMu
CisKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChIVE1MQ29sbGVj
dGlvbik6CisKIDIwMTItMTItMTkgIEdhdmluIFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBXZWJDb3JlOjpQcmVyZW5kZXI6OmRpZFN0YXJ0UHJlcmVu
ZGVyIGRlcGVuZHMgb24gTGlua0xvYWRlcgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNz
Tm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVM
aXN0LmNwcAkocmV2aXNpb24gMTM3NzE1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9k
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNSArNTAsNyBAQCBDbGFzc05vZGVMaXN0
Ojp+Q2xhc3NOb2RlTGlzdCgpCiAKIGJvb2wgQ2xhc3NOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxl
bWVudCogdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCF0ZXN0Tm9kZS0+aGFzQ2xhc3MoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jbGFzc05hbWVzLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBET000IGFsbG93cyBnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIHRvIHJldHVybiBub24gU3R5bGVkRWxlbWVudC4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ3MTgKLSAgICBpZiAoIXRlc3ROb2Rl
LT5pc1N0eWxlZEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
ZXN0Tm9kZS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zQWxsKG1fY2xhc3NOYW1lcyk7CisgICAgcmV0
dXJuIG5vZGVNYXRjaGVzSW5saW5lZCh0ZXN0Tm9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAkocmV2aXNpb24gMTM3NzE1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMjkgKzMwLDQ1IEBACiAjaWZuZGVmIENsYXNzTm9kZUxpc3RfaAogI2RlZmluZSBDbGFz
c05vZGVMaXN0X2gKIAorI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJMaXZlTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDbGFzc05vZGVMaXN0IDogcHVibGlj
IExpdmVOb2RlTGlzdCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
bGFzc05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3Ry
aW5nJiBjbGFzc05hbWVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENsYXNzTm9kZUxpc3Qocm9vdE5vZGUsIGNsYXNzTmFtZXMpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZpcnR1YWwgfkNsYXNzTm9kZUxpc3QoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBj
bGFzc05hbWVzKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCop
IGNvbnN0OwotCi0gICAgICAgIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwotICAgICAg
ICBTdHJpbmcgbV9vcmlnaW5hbENsYXNzTmFtZXM7Ci0gICAgfTsKK2NsYXNzIENsYXNzTm9kZUxp
c3QgOiBwdWJsaWMgTGl2ZU5vZGVMaXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDbGFzc05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3Qg
U3RyaW5nJiBjbGFzc05hbWVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
bGFzc05vZGVMaXN0KHJvb3ROb2RlLCBjbGFzc05hbWVzKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+Q2xhc3NOb2RlTGlzdCgpOworCisgICAgYm9vbCBub2RlTWF0Y2hlc0lubGluZWQoRWxlbWVu
dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2Rl
PiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKTsKKworICAgIHZpcnR1YWwgYm9v
bCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CisKKyAgICBTcGFjZVNwbGl0U3RyaW5nIG1f
Y2xhc3NOYW1lczsKKyAgICBTdHJpbmcgbV9vcmlnaW5hbENsYXNzTmFtZXM7Cit9OworCitpbmxp
bmUgYm9vbCBDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlc0lubGluZWQoRWxlbWVudCogdGVzdE5v
ZGUpIGNvbnN0Cit7CisgICAgaWYgKCF0ZXN0Tm9kZS0+aGFzQ2xhc3MoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghbV9jbGFzc05hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIC8vIEZJWE1FOiBET000IGFsbG93cyBnZXRFbGVtZW50c0J5Q2xhc3NOYW1l
IHRvIHJldHVybiBub24gU3R5bGVkRWxlbWVudC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ3MTgKKyAgICBpZiAoIXRlc3ROb2RlLT5pc1N0eWxlZEVs
ZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0ZXN0Tm9kZS0+Y2xh
c3NOYW1lcygpLmNvbnRhaW5zQWxsKG1fY2xhc3NOYW1lcyk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAJKHJldmlzaW9u
IDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1MiwxNCBAQCBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjpyb290Tm9k
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fb3duZXJOb2RlLmdldCgpOwogfQogCitDb250YWluZXJO
b2RlKiBMaXZlTm9kZUxpc3RCYXNlOjpyb290Q29udGFpbmVyTm9kZSgpIGNvbnN0Cit7CisgICAg
Tm9kZSogcm9vdE5vZGUgPSB0aGlzLT5yb290Tm9kZSgpOworICAgIGlmICghcm9vdE5vZGUtPmlz
Q29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9Db250YWlu
ZXJOb2RlKHJvb3ROb2RlKTsKK30KKwogdm9pZCBMaXZlTm9kZUxpc3RCYXNlOjppbnZhbGlkYXRl
Q2FjaGUoKSBjb25zdAogewogICAgIG1fY2FjaGVkSXRlbSA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTGl2ZU5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0xpdmVOb2RlTGlzdC5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
TGl2ZU5vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9v
d25lck5vZGUtPmRvY3VtZW50KCk7IH0KICAgICBOb2RlKiByb290Tm9kZSgpIGNvbnN0OworICAg
IENvbnRhaW5lck5vZGUqIHJvb3RDb250YWluZXJOb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBvdmVy
cmlkZXNJdGVtQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlc0l0ZW1BZnRlcjsgfQog
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzSXRlbUNhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX2lzSXRlbUNhY2hlVmFsaWQ7IH0KQEAgLTEzMywxNSArMTM0LDE2IEBAIHByb3RlY3RlZDoK
ICAgICBib29sIGhhc05hbWVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOYW1lQ2FjaGVWYWxp
ZDsgfQogICAgIHZvaWQgc2V0SGFzTmFtZUNhY2hlKCkgY29uc3QgeyBtX2lzTmFtZUNhY2hlVmFs
aWQgPSB0cnVlOyB9CiAKLSAgICBOb2RlKiBpdGVtQmVmb3JlT3JBZnRlckNhY2hlZEl0ZW0odW5z
aWduZWQgb2Zmc2V0KSBjb25zdDsKLSAgICBOb2RlKiBpdGVtQWZ0ZXIodW5zaWduZWQmLCBOb2Rl
KiBwcmV2aW91c0l0ZW0pIGNvbnN0OworICAgIGJvb2wgc2hvdWxkT25seUluY2x1ZGVEaXJlY3RD
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
bjsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbjsgfQor
ICAgIE5vZGUqIGl0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZzZXQsIENv
bnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlQ2hpbGROb2RlTGlz
dEZvcndhcmRUb09mZnNldCh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNp
Z25lZCYgY3VycmVudE9mZnNldCkgY29uc3Q7CisgICAgRWxlbWVudCogdHJhdmVyc2VMaXZlTm9k
ZUxpc3RGaXJzdEVsZW1lbnQoQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CisgICAgRWxlbWVu
dCogdHJhdmVyc2VMaXZlTm9kZUxpc3RGb3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBF
bGVtZW50KiBjdXJyZW50RWxlbWVudCwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5l
ck5vZGUqIHJvb3QpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0SXRlbUNsb3NlclRoYW5MYXN0T3JD
YWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZpcnN0SXRlbUNs
b3NlclRoYW5DYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7Ci0gICAgdGVtcGxhdGUg
PGJvb2wgZm9yd2FyZD4gTm9kZSogaXRlcmF0ZUZvck5leHROb2RlKE5vZGUqIGN1cnJlbnQpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGJvb2wgZm9yd2FyZD4gTm9kZSogaXRlbUJlZm9yZU9yQWZ0ZXIo
Tm9kZSogcHJldmlvdXNJdGVtKSBjb25zdDsgICAgCisgICAgTm9kZSogaXRlcmF0ZUZvclByZXZp
b3VzTm9kZShOb2RlKiBjdXJyZW50KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmVmb3JlKE5vZGUq
IHByZXZpb3VzSXRlbSkgY29uc3Q7CiAKICAgICBSZWZQdHI8Tm9kZT4gbV9vd25lck5vZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTUsNyArMTM1NSw3IEBAIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGVuc3Vy
ZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhU
TUxUYWdOb2RlTGlzdD4odGhpcywgVGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOworICAgICAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0
aEF0b21pY05hbWU8SFRNTFRhZ05vZGVMaXN0Pih0aGlzLCBIVE1MVGFnTm9kZUxpc3RUeXBlLCBs
b2NhbE5hbWUpOwogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMo
KS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxUYWdOb2RlTGlzdD4odGhpcywgVGFnTm9kZUxpc3RU
eXBlLCBsb2NhbE5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAJ
KHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1UYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lKQotICAgIDogTGl2ZU5vZGVMaXN0KHJvb3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUsIERvTm90
SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcykKK1RhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCisg
ICAgOiBMaXZlTm9kZUxpc3Qocm9vdE5vZGUsIHR5cGUsIERvTm90SW52YWxpZGF0ZU9uQXR0cmli
dXRlQ2hhbmdlcykKICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAsIG1f
bG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKQEAgLTQxLDcgKzQxLDcgQEAgVGFnTm9kZUxpc3Q6OlRh
Z05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZQogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlzdCgpCiB7
CiAgICAgaWYgKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKQotICAgICAgICBvd25lck5vZGUo
KS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgVGFnTm9kZUxp
c3RUeXBlLCBtX2xvY2FsTmFtZSk7CisgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+
cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCB0eXBlKCksIG1fbG9jYWxOYW1lKTsKICAg
ICBlbHNlCiAgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRo
UXVhbGlmaWVkTmFtZSh0aGlzLCBtX25hbWVzcGFjZVVSSSwgbV9sb2NhbE5hbWUpOwogfQpAQCAt
NTYsMjIgKzU2LDE0IEBAIGJvb2wgVGFnTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHQK
IH0KIAogSFRNTFRhZ05vZGVMaXN0OjpIVE1MVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgOiBUYWdOb2RlTGlz
dChyb290Tm9kZSwgc3RhckF0b20sIGxvY2FsTmFtZSkKKyAgICA6IFRhZ05vZGVMaXN0KHJvb3RO
b2RlLCBIVE1MVGFnTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSwgbG9jYWxOYW1lKQogICAgICwgbV9s
b3dlcmVkTG9jYWxOYW1lKGxvY2FsTmFtZS5sb3dlcigpKQogewogfQogCiBib29sIEhUTUxUYWdO
b2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgLy8g
SW1wbGVtZW50cyBodHRwOi8vZHZjcy53My5vcmcvaGcvZG9tY29yZS9yYXctZmlsZS90aXAvT3Zl
cnZpZXcuaHRtbCNjb25jZXB0LWdldGVsZW1lbnRzYnl0YWduYW1lCi0gICAgaWYgKG1fbG9jYWxO
YW1lICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
ID0gdGVzdE5vZGUtPmlzSFRNTEVsZW1lbnQoKSA/IG1fbG93ZXJlZExvY2FsTmFtZSA6IG1fbG9j
YWxOYW1lOwotICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRlc3ROb2RlLT5sb2NhbE5hbWUoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9uYW1lc3Bh
Y2VVUkkgPT0gc3RhckF0b20pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBub2RlTWF0
Y2hlc0lubGluZWQodGVzdE5vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkocmV2aXNpb24gMTM3NzE1KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1RhZ05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDUyICsyNCw2OCBA
QAogI2lmbmRlZiBUYWdOb2RlTGlzdF9oCiAjZGVmaW5lIFRhZ05vZGVMaXN0X2gKIAorI2luY2x1
ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgLy8gTm9k
ZUxpc3QgdGhhdCBsaW1pdHMgdG8gYSBwYXJ0aWN1bGFyIHRhZy4KLSAgICBjbGFzcyBUYWdOb2Rl
TGlzdCA6IHB1YmxpYyBMaXZlTm9kZUxpc3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChuYW1lc3BhY2VVUkkgIT0g
c3RhckF0b20pOwotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYWdOb2RlTGlzdChy
b290Tm9kZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBU
YWdOb2RlTGlzdFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYWdOb2Rl
TGlzdChyb290Tm9kZSwgc3RhckF0b20sIGxvY2FsTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmlydHVhbCB+VGFnTm9kZUxpc3QoKTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgVGFn
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKLQotICAgICAgICB2
aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIEF0b21p
Y1N0cmluZyBtX25hbWVzcGFjZVVSSTsKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxOYW1l
OwotICAgIH07Ci0KLSAgICBjbGFzcyBIVE1MVGFnTm9kZUxpc3QgOiBwdWJsaWMgVGFnTm9kZUxp
c3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhZ05vZGVM
aXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlw
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBUYWdOb2RlTGlzdFR5cGUpOwotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MVGFnTm9kZUxpc3Qocm9vdE5vZGUsIGxvY2FsTmFt
ZSkpOwotICAgICAgICB9CisvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIg
dGFnLgorY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVMaXN0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChuYW1lc3BhY2VVUkkg
IT0gc3RhckF0b20pOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVMaXN0KHJv
b3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSk7CisgICAg
fQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBU
YWdOb2RlTGlzdFR5cGUpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVMaXN0
KHJvb3ROb2RlLCBUYWdOb2RlTGlzdFR5cGUsIHN0YXJBdG9tLCBsb2NhbE5hbWUpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5UYWdOb2RlTGlzdCgpOworCitwcm90ZWN0ZWQ6CisgICAgVGFnTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OworCisgICAg
QXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOworICAgIEF0b21pY1N0cmluZyBtX2xvY2FsTmFt
ZTsKK307CisKK2NsYXNzIEhUTUxUYWdOb2RlTGlzdCA6IHB1YmxpYyBUYWdOb2RlTGlzdCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFz
c1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5
cGUgPT0gSFRNTFRhZ05vZGVMaXN0VHlwZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SFRNTFRhZ05vZGVMaXN0KHJvb3ROb2RlLCBsb2NhbE5hbWUpKTsKKyAgICB9CisKKyAgICBib29s
IG5vZGVNYXRjaGVzSW5saW5lZChFbGVtZW50KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSFRN
TFRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lKTsKKworICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50Kikg
Y29uc3Q7CisKKyAgICBBdG9taWNTdHJpbmcgbV9sb3dlcmVkTG9jYWxOYW1lOworfTsKKworaW5s
aW5lIGJvb2wgSFRNTFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlc0lubGluZWQoRWxlbWVudCogdGVz
dE5vZGUpIGNvbnN0Cit7CisgICAgLy8gSW1wbGVtZW50cyBodHRwOi8vZHZjcy53My5vcmcvaGcv
ZG9tY29yZS9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb25jZXB0LWdldGVsZW1lbnRzYnl0
YWduYW1lCisgICAgaWYgKG1fbG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gdGVzdE5vZGUtPmlzSFRNTEVsZW1lbnQoKSA/IG1f
bG93ZXJlZExvY2FsTmFtZSA6IG1fbG9jYWxOYW1lOworICAgICAgICBpZiAobG9jYWxOYW1lICE9
IHRlc3ROb2RlLT5sb2NhbE5hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgQVNTRVJUKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIEhUTUxUYWdOb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7Ci0KLSAgICAg
ICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICBB
dG9taWNTdHJpbmcgbV9sb3dlcmVkTG9jYWxOYW1lOwotICAgIH07CiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBUYWdOb2RlTGlzdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0NvbGxlY3Rpb25UeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xsZWN0aW9uVHlwZS5oCShyZXZpc2lvbiAxMzc3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0NvbGxlY3Rpb25UeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgZW51bSBD
b2xsZWN0aW9uVHlwZSB7CiAgICAgQ2xhc3NOb2RlTGlzdFR5cGUsCiAgICAgTmFtZU5vZGVMaXN0
VHlwZSwKICAgICBUYWdOb2RlTGlzdFR5cGUsCisgICAgSFRNTFRhZ05vZGVMaXN0VHlwZSwKICAg
ICBSYWRpb05vZGVMaXN0VHlwZSwKICAgICBMYWJlbHNOb2RlTGlzdFR5cGUsCiAgICAgTWljcm9E
YXRhSXRlbUxpc3RUeXBlLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDEzNzcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKIAorI2luY2x1ZGUgIkNsYXNzTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzUsNiArNzYsNyBAQCBzdGF0aWMgYm9vbCBz
aG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkCiAgICAgY2FzZSBDbGFzc05vZGVMaXN0VHlwZToK
ICAgICBjYXNlIE5hbWVOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBUYWdOb2RlTGlzdFR5cGU6Cisg
ICAgY2FzZSBIVE1MVGFnTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgUmFkaW9Ob2RlTGlzdFR5cGU6
CiAgICAgY2FzZSBMYWJlbHNOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBNaWNyb0RhdGFJdGVtTGlz
dFR5cGU6CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RhdGljIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5
cGVGcm9tQ29sbAogICAgIGNhc2UgQ2xhc3NOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBOYW1lTm9k
ZUxpc3RUeXBlOgogICAgIGNhc2UgVGFnTm9kZUxpc3RUeXBlOgorICAgIGNhc2UgSFRNTFRhZ05v
ZGVMaXN0VHlwZToKICAgICBjYXNlIFJhZGlvTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTGFiZWxz
Tm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTWljcm9EYXRhSXRlbUxpc3RUeXBlOgpAQCAtMTY2LDYg
KzE2OSw3IEBAIHN0YXRpYyBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGEKICAgICBj
YXNlIENsYXNzTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTmFtZU5vZGVMaXN0VHlwZToKICAgICBj
YXNlIFRhZ05vZGVMaXN0VHlwZToKKyAgICBjYXNlIEhUTUxUYWdOb2RlTGlzdFR5cGU6CiAgICAg
Y2FzZSBSYWRpb05vZGVMaXN0VHlwZToKICAgICBjYXNlIExhYmVsc05vZGVMaXN0VHlwZToKICAg
ICBjYXNlIE1pY3JvRGF0YUl0ZW1MaXN0VHlwZToKQEAgLTE3NSw3ICsxNzksNiBAQCBzdGF0aWMg
Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlczsKIH0KLSAg
ICAKIAogSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9uKE5vZGUqIG93bmVyTm9kZSwgQ29s
bGVjdGlvblR5cGUgdHlwZSwgSXRlbUFmdGVyT3ZlcnJpZGVUeXBlIGl0ZW1BZnRlck92ZXJyaWRl
VHlwZSkKICAgICA6IExpdmVOb2RlTGlzdEJhc2Uob3duZXJOb2RlLCByb290VHlwZUZyb21Db2xs
ZWN0aW9uVHlwZSh0eXBlKSwgaW52YWxpZGF0aW9uVHlwZUV4Y2x1ZGluZ0lkQW5kTmFtZUF0dHJp
YnV0ZXModHlwZSksCkBAIC0xOTUsOCArMTk4LDEyIEBAIEhUTUxDb2xsZWN0aW9uOjp+SFRNTENv
bGxlY3Rpb24oKQogICAgICAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hl
V2l0aEF0b21pY05hbWUodGhpcywgdHlwZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
QWNjZXB0YWJsZUVsZW1lbnQoQ29sbGVjdGlvblR5cGUgdHlwZSwgRWxlbWVudCogZWxlbWVudCkK
K3RlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CitpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxl
bWVudChjb25zdCBOb2RlTGlzdFR5cGUqLCBFbGVtZW50Kik7CisKK3RlbXBsYXRlIDw+IGlubGlu
ZSBib29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uKiBodG1sQ29sbGVj
dGlvbiwgRWxlbWVudCogZWxlbWVudCkKIHsKKyAgICBDb2xsZWN0aW9uVHlwZSB0eXBlID0gaHRt
bENvbGxlY3Rpb24tPnR5cGUoKTsKICAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAm
JiAhKHR5cGUgPT0gRG9jQWxsIHx8IHR5cGUgPT0gTm9kZUNoaWxkcmVuKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0yNDksNiArMjU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQWNj
ZXB0YWJsZUVsZW1lbnQoQwogICAgIGNhc2UgQ2xhc3NOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBO
YW1lTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgVGFnTm9kZUxpc3RUeXBlOgorICAgIGNhc2UgSFRN
TFRhZ05vZGVMaXN0VHlwZToKICAgICBjYXNlIFJhZGlvTm9kZUxpc3RUeXBlOgogICAgIGNhc2Ug
TGFiZWxzTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTWljcm9EYXRhSXRlbUxpc3RUeXBlOgpAQCAt
MjU4LDEzICsyNjYsMjQgQEAgc3RhdGljIGlubGluZSBib29sIGlzQWNjZXB0YWJsZUVsZW1lbnQo
QwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdGVtcGxhdGU8Ym9vbCBmb3J3YXJkPgotc3RhdGlj
IE5vZGUqIG5leHROb2RlKE5vZGUqIGJhc2UsIE5vZGUqIHByZXZpb3VzLCBib29sIG9ubHlJbmNs
dWRlRGlyZWN0Q2hpbGRyZW4pCit0ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxl
bWVudChjb25zdCBMaXZlTm9kZUxpc3QqIG5vZGVMaXN0LCBFbGVtZW50KiBlbGVtZW50KQogewot
ICAgIGlmIChmb3J3YXJkKQotICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
biA/IHByZXZpb3VzLT5uZXh0U2libGluZygpIDogTm9kZVRyYXZlcnNhbDo6bmV4dChwcmV2aW91
cywgYmFzZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGls
ZHJlbiA/IHByZXZpb3VzLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnByZXZp
b3VzKHByZXZpb3VzLCBiYXNlKTsKKyAgICByZXR1cm4gbm9kZUxpc3QtPm5vZGVNYXRjaGVzKGVs
ZW1lbnQpOworfQorCit0ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChj
b25zdCBIVE1MVGFnTm9kZUxpc3QqIG5vZGVMaXN0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAg
IHJldHVybiBub2RlTGlzdC0+bm9kZU1hdGNoZXNJbmxpbmVkKGVsZW1lbnQpOworfQorCit0ZW1w
bGF0ZSA8PiBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBDbGFzc05vZGVMaXN0
KiBub2RlTGlzdCwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gbm9kZUxpc3QtPm5v
ZGVNYXRjaGVzSW5saW5lZChlbGVtZW50KTsKK30KKworc3RhdGljIE5vZGUqIHByZXZpb3VzTm9k
ZShOb2RlKiBiYXNlLCBOb2RlKiBwcmV2aW91cywgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuKQoreworICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcHJldmlvdXMt
PnByZXZpb3VzU2libGluZygpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMocHJldmlvdXMsIGJh
c2UpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGxhc3REZXNjZW5kZW50KE5vZGUqIG5vZGUp
CkBAIC0yNzUsNjIgKzI5NCwxMTkgQEAgc3RhdGljIGlubGluZSBOb2RlKiBsYXN0RGVzY2VuZGVu
dChOb2RlKgogICAgIHJldHVybiBub2RlOwogfQogCi1zdGF0aWMgTm9kZSogZmlyc3ROb2RlKGJv
b2wgZm9yd2FyZCwgTm9kZSogcm9vdE5vZGUsIGJvb2wgb25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
bikKK3N0YXRpYyBOb2RlKiBsYXN0Tm9kZShOb2RlKiByb290Tm9kZSwgYm9vbCBvbmx5SW5jbHVk
ZURpcmVjdENoaWxkcmVuKQogewotICAgIGlmIChmb3J3YXJkKQotICAgICAgICByZXR1cm4gcm9v
dE5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvbmx5SW5jbHVk
ZURpcmVjdENoaWxkcmVuID8gcm9vdE5vZGUtPmxhc3RDaGlsZCgpIDogbGFzdERlc2NlbmRlbnQo
cm9vdE5vZGUpOworICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcm9vdE5v
ZGUtPmxhc3RDaGlsZCgpIDogbGFzdERlc2NlbmRlbnQocm9vdE5vZGUpOwogfQogCi10ZW1wbGF0
ZSA8Ym9vbCBmb3J3YXJkPgotTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlcmF0ZUZvck5leHRO
b2RlKE5vZGUqIGN1cnJlbnQpIGNvbnN0CitBTFdBWVNfSU5MSU5FIE5vZGUqIExpdmVOb2RlTGlz
dEJhc2U6Oml0ZXJhdGVGb3JQcmV2aW91c05vZGUoTm9kZSogY3VycmVudCkgY29uc3QKIHsKICAg
ICBib29sIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gPSBzaG91bGRPbmx5SW5jbHVkZURpcmVj
dENoaWxkcmVuKCk7CiAgICAgQ29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5cGUgPSB0eXBlKCk7
CiAgICAgTm9kZSogcm9vdE5vZGUgPSB0aGlzLT5yb290Tm9kZSgpOwotICAgIGZvciAoOyBjdXJy
ZW50OyBjdXJyZW50ID0gbmV4dE5vZGU8Zm9yd2FyZD4ocm9vdE5vZGUsIGN1cnJlbnQsIG9ubHlJ
bmNsdWRlRGlyZWN0Q2hpbGRyZW4pKSB7CisgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBw
cmV2aW91c05vZGUocm9vdE5vZGUsIGN1cnJlbnQsIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4p
KSB7CiAgICAgICAgIGlmIChpc05vZGVMaXN0KGNvbGxlY3Rpb25UeXBlKSkgewotICAgICAgICAg
ICAgaWYgKGN1cnJlbnQtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBMaXZl
Tm9kZUxpc3QqPih0aGlzKS0+bm9kZU1hdGNoZXModG9FbGVtZW50KGN1cnJlbnQpKSkKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgaXNNYXRjaGluZ0VsZW1lbnQo
c3RhdGljX2Nhc3Q8Y29uc3QgTGl2ZU5vZGVMaXN0Kj4odGhpcyksIHRvRWxlbWVudChjdXJyZW50
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChjdXJyZW50KTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgaXNB
Y2NlcHRhYmxlRWxlbWVudChjb2xsZWN0aW9uVHlwZSwgdG9FbGVtZW50KGN1cnJlbnQpKSkKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgaXNNYXRjaGluZ0VsZW1l
bnQoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKSwgdG9FbGVtZW50KGN1
cnJlbnQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KGN1cnJlbnQpOwogICAg
ICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIFdpdGhvdXQgdGhpcyBBTFdB
WVNfSU5MSU5FLCBsZW5ndGgoKSBhbmQgaXRlbSgpIGNhbiBiZSAxMDAlIHNsb3dlci4KLXRlbXBs
YXRlPGJvb2wgZm9yd2FyZD4gQUxXQVlTX0lOTElORQotTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6
aXRlbUJlZm9yZU9yQWZ0ZXIoTm9kZSogcHJldmlvdXMpIGNvbnN0CitBTFdBWVNfSU5MSU5FIE5v
ZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmUoTm9kZSogcHJldmlvdXMpIGNvbnN0CiB7
CiAgICAgTm9kZSogY3VycmVudDsKICAgICBpZiAoTElLRUxZKCEhcHJldmlvdXMpKSAvLyBXaXRo
b3V0IHRoaXMgTElLRUxZLCBsZW5ndGgoKSBhbmQgaXRlbSgpIGNhbiBiZSAxMCUgc2xvd2VyLgot
ICAgICAgICBjdXJyZW50ID0gbmV4dE5vZGU8Zm9yd2FyZD4ocm9vdE5vZGUoKSwgcHJldmlvdXMs
IHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKSk7CisgICAgICAgIGN1cnJlbnQgPSBw
cmV2aW91c05vZGUocm9vdE5vZGUoKSwgcHJldmlvdXMsIHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0
Q2hpbGRyZW4oKSk7CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50ID0gZmlyc3ROb2RlKGZvcndh
cmQsIHJvb3ROb2RlKCksIHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKSk7CisgICAg
ICAgIGN1cnJlbnQgPSBsYXN0Tm9kZShyb290Tm9kZSgpLCBzaG91bGRPbmx5SW5jbHVkZURpcmVj
dENoaWxkcmVuKCkpOwogCiAgICAgaWYgKGlzTm9kZUxpc3QodHlwZSgpKSAmJiBzaG91bGRPbmx5
SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpIC8vIENoaWxkTm9kZUxpc3QKICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7CiAKLSAgICByZXR1cm4gaXRlcmF0ZUZvck5leHROb2RlPGZvcndhcmQ+KGN1cnJl
bnQpOworICAgIHJldHVybiBpdGVyYXRlRm9yUHJldmlvdXNOb2RlKGN1cnJlbnQpOwogfQogCi0v
LyBXaXRob3V0IHRoaXMgQUxXQVlTX0lOTElORSwgbGVuZ3RoKCkgYW5kIGl0ZW0oKSBjYW4gYmUg
MTAwJSBzbG93ZXIuCi1BTFdBWVNfSU5MSU5FIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1C
ZWZvcmUoTm9kZSogcHJldmlvdXMpIGNvbnN0CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5
cGU+CitpbmxpbmUgRWxlbWVudCogZmlyc3RNYXRjaGluZ0VsZW1lbnQoY29uc3QgTm9kZUxpc3RU
eXBlKiBub2RlTGlzdCwgQ29udGFpbmVyTm9kZSogcm9vdCkKIHsKLSAgICByZXR1cm4gaXRlbUJl
Zm9yZU9yQWZ0ZXI8ZmFsc2U+KHByZXZpb3VzKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdCk7CisgICAgd2hpbGUgKGVsZW1lbnQgJiYg
IWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBlbGVtZW50KSkKKyAgICAgICAgZWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgcm9vdCk7CisgICAgcmV0dXJuIGVsZW1l
bnQ7CiB9CiAKLS8vIFdpdGhvdXQgdGhpcyBBTFdBWVNfSU5MSU5FLCBsZW5ndGgoKSBhbmQgaXRl
bSgpIGNhbiBiZSAxMDAlIHNsb3dlci4KLUFMV0FZU19JTkxJTkUgTm9kZSogTGl2ZU5vZGVMaXN0
QmFzZTo6aXRlbUFmdGVyKHVuc2lnbmVkJiBvZmZzZXRJbkFycmF5LCBOb2RlKiBwcmV2aW91cykg
Y29uc3QKK3RlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CitpbmxpbmUgRWxlbWVudCogbmV4
dE1hdGNoaW5nRWxlbWVudChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCBFbGVtZW50KiBj
dXJyZW50LCBDb250YWluZXJOb2RlKiByb290KQogewotICAgIGlmIChVTkxJS0VMWShvdmVycmlk
ZXNJdGVtQWZ0ZXIoKSkpIC8vIFdpdGhvdXQgdGhpcyBVTkxJS0VMWSwgbGVuZ3RoKCkgY2FuIGJl
IDEwMCUgc2xvd2VyLgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxl
Y3Rpb24qPih0aGlzKS0+dmlydHVhbEl0ZW1BZnRlcihvZmZzZXRJbkFycmF5LCB0b0VsZW1lbnQo
cHJldmlvdXMpKTsKLSAgICBBU1NFUlQoIW9mZnNldEluQXJyYXkpOwotICAgIHJldHVybiBpdGVt
QmVmb3JlT3JBZnRlcjx0cnVlPihwcmV2aW91cyk7CisgICAgZG8geworICAgICAgICBjdXJyZW50
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCByb290KTsKKyAgICB9IHdoaWxlIChj
dXJyZW50ICYmICFpc01hdGNoaW5nRWxlbWVudChub2RlTGlzdCwgY3VycmVudCkpOworICAgIHJl
dHVybiBjdXJyZW50OworfQorCitpbmxpbmUgRWxlbWVudCogZmlyc3RNYXRjaGluZ0NoaWxkRWxl
bWVudChjb25zdCBIVE1MQ29sbGVjdGlvbiogbm9kZUxpc3QsIENvbnRhaW5lck5vZGUqIHJvb3Qp
Cit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGlu
KHJvb3QpOworICAgIHdoaWxlIChlbGVtZW50ICYmICFpc01hdGNoaW5nRWxlbWVudChub2RlTGlz
dCwgZWxlbWVudCkpCisgICAgICAgIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihlbGVtZW50LCByb290KTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKwor
aW5saW5lIEVsZW1lbnQqIG5leHRNYXRjaGluZ0NoaWxkRWxlbWVudChjb25zdCBIVE1MQ29sbGVj
dGlvbiogbm9kZUxpc3QsIEVsZW1lbnQqIGN1cnJlbnQsIENvbnRhaW5lck5vZGUqIHJvb3QpCit7
CisgICAgZG8geworICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oY3VycmVudCwgcm9vdCk7CisgICAgfSB3aGlsZSAoY3VycmVudCAmJiAhaXNN
YXRjaGluZ0VsZW1lbnQobm9kZUxpc3QsIGN1cnJlbnQpKTsKKyAgICByZXR1cm4gY3VycmVudDsK
K30KKwordGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KK2lubGluZSBFbGVtZW50KiB0cmF2
ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQoY29uc3QgTm9kZUxpc3RUeXBlKiBu
b2RlTGlzdCwgdW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCwgdW5zaWdu
ZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpCit7CisgICAgd2hpbGUgKGN1
cnJlbnRPZmZzZXQgIT0gb2Zmc2V0ICYmIChjdXJyZW50RWxlbWVudCA9IG5leHRNYXRjaGluZ0Vs
ZW1lbnQobm9kZUxpc3QsIGN1cnJlbnRFbGVtZW50LCByb290KSkpCisgICAgICAgICsrY3VycmVu
dE9mZnNldDsKKyAgICByZXR1cm4gY3VycmVudEVsZW1lbnQ7Cit9CisKKy8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBpbiBDaGlsZE5vZGVMaXN0CitpbmxpbmUgTm9kZSogTGl2ZU5vZGVMaXN0QmFz
ZTo6dHJhdmVyc2VDaGlsZE5vZGVMaXN0Rm9yd2FyZFRvT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwg
Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0KSBjb25zdAoreworICAg
IEFTU0VSVCh0eXBlKCkgPT0gQ2hpbGROb2RlTGlzdFR5cGUpOworICAgIEFTU0VSVCghb3ZlcnJp
ZGVzSXRlbUFmdGVyKCkpOworICAgIHdoaWxlIChjdXJyZW50T2Zmc2V0ICE9IG9mZnNldCAmJiAo
Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+bmV4dFNpYmxpbmcoKSkpCisgICAgICAgICsrY3Vy
cmVudE9mZnNldDsKKyAgICByZXR1cm4gY3VycmVudE5vZGU7Cit9CisKKy8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBpbiBMaXZlTm9kZUxpc3QKK2lubGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3RC
YXNlOjp0cmF2ZXJzZUxpdmVOb2RlTGlzdEZpcnN0RWxlbWVudChDb250YWluZXJOb2RlKiByb290
KSBjb25zdAoreworICAgIEFTU0VSVChpc05vZGVMaXN0KHR5cGUoKSkpOworICAgIEFTU0VSVCh0
eXBlKCkgIT0gQ2hpbGROb2RlTGlzdFR5cGUpOworICAgIEFTU0VSVCghb3ZlcnJpZGVzSXRlbUFm
dGVyKCkpOworICAgIGlmICh0eXBlKCkgPT0gSFRNTFRhZ05vZGVMaXN0VHlwZSkKKyAgICAgICAg
cmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVtZW50KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxUYWdOb2Rl
TGlzdCo+KHRoaXMpLCByb290KTsKKyAgICBpZiAodHlwZSgpID09IENsYXNzTm9kZUxpc3RUeXBl
KQorICAgICAgICByZXR1cm4gZmlyc3RNYXRjaGluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3Qg
Q2xhc3NOb2RlTGlzdCo+KHRoaXMpLCByb290KTsKKyAgICByZXR1cm4gZmlyc3RNYXRjaGluZ0Vs
ZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgTGl2ZU5vZGVMaXN0Kj4odGhpcyksIHJvb3QpOworfQor
CisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gTGl2ZU5vZGVMaXN0CitpbmxpbmUgRWxlbWVu
dCogTGl2ZU5vZGVMaXN0QmFzZTo6dHJhdmVyc2VMaXZlTm9kZUxpc3RGb3J3YXJkVG9PZmZzZXQo
dW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCwgdW5zaWduZWQmIGN1cnJl
bnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTm9k
ZUxpc3QodHlwZSgpKSk7CisgICAgQVNTRVJUKHR5cGUoKSAhPSBDaGlsZE5vZGVMaXN0VHlwZSk7
CisgICAgQVNTRVJUKCFvdmVycmlkZXNJdGVtQWZ0ZXIoKSk7CisgICAgaWYgKHR5cGUoKSA9PSBI
VE1MVGFnTm9kZUxpc3RUeXBlKQorICAgICAgICByZXR1cm4gdHJhdmVyc2VNYXRjaGluZ0VsZW1l
bnRzRm9yd2FyZFRvT2Zmc2V0KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxUYWdOb2RlTGlzdCo+KHRo
aXMpLCBvZmZzZXQsIGN1cnJlbnRFbGVtZW50LCBjdXJyZW50T2Zmc2V0LCByb290KTsKKyAgICBp
ZiAodHlwZSgpID09IENsYXNzTm9kZUxpc3RUeXBlKQorICAgICAgICByZXR1cm4gdHJhdmVyc2VN
YXRjaGluZ0VsZW1lbnRzRm9yd2FyZFRvT2Zmc2V0KHN0YXRpY19jYXN0PGNvbnN0IENsYXNzTm9k
ZUxpc3QqPih0aGlzKSwgb2Zmc2V0LCBjdXJyZW50RWxlbWVudCwgY3VycmVudE9mZnNldCwgcm9v
dCk7CisgICAgcmV0dXJuIHRyYXZlcnNlTWF0Y2hpbmdFbGVtZW50c0ZvcndhcmRUb09mZnNldChz
dGF0aWNfY2FzdDxjb25zdCBMaXZlTm9kZUxpc3QqPih0aGlzKSwgb2Zmc2V0LCBjdXJyZW50RWxl
bWVudCwgY3VycmVudE9mZnNldCwgcm9vdCk7CiB9CiAKIGJvb2wgQUxXQVlTX0lOTElORSBMaXZl
Tm9kZUxpc3RCYXNlOjppc0xhc3RJdGVtQ2xvc2VyVGhhbkxhc3RPckNhY2hlZEl0ZW0odW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdApAQCAtMzc0LDYgKzQ1MCw3IEBAIHVuc2lnbmVkIExpdmVOb2RlTGlz
dEJhc2U6Omxlbmd0aCgpIGNvbnMKICAgICByZXR1cm4gY2FjaGVkTGVuZ3RoKCk7CiB9CiAKKy8v
IEZJWE1FOiBJdCBpcyBzaWxseSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gSFRNTENvbGxl
Y3Rpb24uY3BwLgogTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlbSh1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0CiB7CiAgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQoKSAmJiBjYWNoZWRJdGVtT2Zmc2V0
KCkgPT0gb2Zmc2V0KQpAQCAtMzg5LDEzICs0NjYsMjcgQEAgTm9kZSogTGl2ZU5vZGVMaXN0QmFz
ZTo6aXRlbSh1bnNpZ25lZCBvZgogICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBQcm9wZXJ0eU5v
ZGVMaXN0Kj4odGhpcyktPnVwZGF0ZVJlZkVsZW1lbnRzKCk7CiAjZW5kaWYKIAorICAgIENvbnRh
aW5lck5vZGUqIHJvb3QgPSByb290Q29udGFpbmVyTm9kZSgpOworICAgIGlmICghcm9vdCkgewor
ICAgICAgICAvLyBGSU1YRTogSW4gc29tZVRleHROb2RlLmNoaWxkTm9kZXMgY2FzZSB0aGUgcm9v
dCBpcyBUZXh0LiBXZSBzaG91bGRuJ3QgZXZlbiBtYWtlIGEgTGl2ZU5vZGVMaXN0IGZvciB0aGF0
LgorICAgICAgICBzZXRMZW5ndGhDYWNoZSgwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CiAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmICFvdmVycmlkZXNJdGVtQWZ0ZXIoKSAm
JiBpc0xhc3RJdGVtQ2xvc2VyVGhhbkxhc3RPckNhY2hlZEl0ZW0ob2Zmc2V0KSkgewogICAgICAg
ICBOb2RlKiBsYXN0SXRlbSA9IGl0ZW1CZWZvcmUoMCk7CiAgICAgICAgIEFTU0VSVChsYXN0SXRl
bSk7CiAgICAgICAgIHNldEl0ZW1DYWNoZShsYXN0SXRlbSwgY2FjaGVkTGVuZ3RoKCkgLSAxLCAw
KTsKICAgICB9IGVsc2UgaWYgKCFpc0l0ZW1DYWNoZVZhbGlkKCkgfHwgaXNGaXJzdEl0ZW1DbG9z
ZXJUaGFuQ2FjaGVkSXRlbShvZmZzZXQpIHx8IChvdmVycmlkZXNJdGVtQWZ0ZXIoKSAmJiBvZmZz
ZXQgPCBjYWNoZWRJdGVtT2Zmc2V0KCkpKSB7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldEluQXJy
YXkgPSAwOwotICAgICAgICBOb2RlKiBmaXJzdEl0ZW0gPSBpdGVtQWZ0ZXIob2Zmc2V0SW5BcnJh
eSwgMCk7CisgICAgICAgIE5vZGUqIGZpcnN0SXRlbTsKKyAgICAgICAgaWYgKHR5cGUoKSA9PSBD
aGlsZE5vZGVMaXN0VHlwZSkKKyAgICAgICAgICAgIGZpcnN0SXRlbSA9IHJvb3QtPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgZWxzZSBpZiAoaXNOb2RlTGlzdCh0eXBlKCkpKQorICAgICAgICAgICAg
Zmlyc3RJdGVtID0gdHJhdmVyc2VMaXZlTm9kZUxpc3RGaXJzdEVsZW1lbnQocm9vdCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZpcnN0SXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxD
b2xsZWN0aW9uKj4odGhpcyktPnRyYXZlcnNlRmlyc3RFbGVtZW50KG9mZnNldEluQXJyYXksIHJv
b3QpOworCiAgICAgICAgIGlmICghZmlyc3RJdGVtKSB7CiAgICAgICAgICAgICBzZXRMZW5ndGhD
YWNoZSgwKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtNDA3LDEzICs0OTgsMTQgQEAgTm9k
ZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlbSh1bnNpZ25lZCBvZgogICAgIGlmIChjYWNoZWRJdGVt
T2Zmc2V0KCkgPT0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gY2FjaGVkSXRlbSgpOwogCi0gICAg
cmV0dXJuIGl0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbShvZmZzZXQpOworICAgIHJldHVybiBp
dGVtQmVmb3JlT3JBZnRlckNhY2hlZEl0ZW0ob2Zmc2V0LCByb290KTsKIH0KIAotTm9kZSogTGl2
ZU5vZGVMaXN0QmFzZTo6aXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNl
dCkgY29uc3QKK2lubGluZSBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVtQmVmb3JlT3JBZnRl
ckNhY2hlZEl0ZW0odW5zaWduZWQgb2Zmc2V0LCBDb250YWluZXJOb2RlKiByb290KSBjb25zdAog
ewogICAgIHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQgPSBjYWNoZWRJdGVtT2Zmc2V0KCk7CiAgICAg
Tm9kZSogY3VycmVudEl0ZW0gPSBjYWNoZWRJdGVtKCk7CisgICAgQVNTRVJUKGN1cnJlbnRJdGVt
KTsKICAgICBBU1NFUlQoY3VycmVudE9mZnNldCAhPSBvZmZzZXQpOwogCiAgICAgaWYgKG9mZnNl
dCA8IGNhY2hlZEl0ZW1PZmZzZXQoKSkgewpAQCAtNDMwLDE5ICs1MjIsMjEgQEAgTm9kZSogTGl2
ZU5vZGVMaXN0QmFzZTo6aXRlbUJlZm9yZU9yQWZ0ZQogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICB1bnNpZ25lZCBvZmZzZXRJbkFycmF5ID0gb3ZlcnJpZGVzSXRlbUFmdGVyKCkgPyBz
dGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlvbio+KHRoaXMpLT5tX2NhY2hlZEVsZW1lbnRz
QXJyYXlPZmZzZXQgOiAwOwotICAgIHdoaWxlICgoY3VycmVudEl0ZW0gPSBpdGVtQWZ0ZXIob2Zm
c2V0SW5BcnJheSwgY3VycmVudEl0ZW0pKSkgewotICAgICAgICBjdXJyZW50T2Zmc2V0Kys7Ci0g
ICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ID09IG9mZnNldCkgewotICAgICAgICAgICAgc2V0SXRl
bUNhY2hlKGN1cnJlbnRJdGVtLCBjdXJyZW50T2Zmc2V0LCBvZmZzZXRJbkFycmF5KTsKLSAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50SXRlbTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2ln
bmVkIG9mZnNldE9mTGFzdEl0ZW0gPSBjdXJyZW50T2Zmc2V0OwotICAgIHNldExlbmd0aENhY2hl
KG9mZnNldE9mTGFzdEl0ZW0gKyAxKTsKKyAgICB1bnNpZ25lZCBvZmZzZXRJbkFycmF5ID0gMDsK
KyAgICBpZiAodHlwZSgpID09IENoaWxkTm9kZUxpc3RUeXBlKSB7CisgICAgICAgIGN1cnJlbnRJ
dGVtID0gdHJhdmVyc2VDaGlsZE5vZGVMaXN0Rm9yd2FyZFRvT2Zmc2V0KG9mZnNldCwgY3VycmVu
dEl0ZW0sIGN1cnJlbnRPZmZzZXQpOworICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdCh0eXBlKCkp
KQorICAgICAgICBjdXJyZW50SXRlbSA9IHRyYXZlcnNlTGl2ZU5vZGVMaXN0Rm9yd2FyZFRvT2Zm
c2V0KG9mZnNldCwgdG9FbGVtZW50KGN1cnJlbnRJdGVtKSwgY3VycmVudE9mZnNldCwgcm9vdCk7
CisgICAgZWxzZQorICAgICAgICBjdXJyZW50SXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxD
b2xsZWN0aW9uKj4odGhpcyktPnRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KG9mZnNldCwgdG9FbGVt
ZW50KGN1cnJlbnRJdGVtKSwgY3VycmVudE9mZnNldCwgb2Zmc2V0SW5BcnJheSwgcm9vdCk7CiAK
LSAgICByZXR1cm4gMDsKKyAgICBpZiAoIWN1cnJlbnRJdGVtKSB7CisgICAgICAgIC8vIERpZCBu
b3QgZmluZCB0aGUgaXRlbS4gT24gcGx1cyBzaWRlLCB3ZSBub3cga25vdyB0aGUgbGVuZ3RoLgor
ICAgICAgICBzZXRMZW5ndGhDYWNoZShjdXJyZW50T2Zmc2V0ICsgMSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBzZXRJdGVtQ2FjaGUoY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZzZXQs
IG9mZnNldEluQXJyYXkpOworICAgIHJldHVybiBjdXJyZW50SXRlbTsKIH0KIAogRWxlbWVudCog
SFRNTENvbGxlY3Rpb246OnZpcnR1YWxJdGVtQWZ0ZXIodW5zaWduZWQmLCBFbGVtZW50KikgY29u
c3QKQEAgLTQ3OSw2ICs1NzMsNDUgQEAgYm9vbCBIVE1MQ29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1l
TWF0Y2goRQogICAgIHJldHVybiBlLT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbmFtZSAmJiBlLT5n
ZXRJZEF0dHJpYnV0ZSgpICE9IG5hbWU7CiB9CiAKK2lubGluZSBFbGVtZW50KiBIVE1MQ29sbGVj
dGlvbjo6dHJhdmVyc2VGaXJzdEVsZW1lbnQodW5zaWduZWQmIG9mZnNldEluQXJyYXksIENvbnRh
aW5lck5vZGUqIHJvb3QpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc05vZGVMaXN0KHR5cGUoKSkp
OworICAgIGlmIChvdmVycmlkZXNJdGVtQWZ0ZXIoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxJ
dGVtQWZ0ZXIob2Zmc2V0SW5BcnJheSwgMCk7CisgICAgQVNTRVJUKCFvZmZzZXRJbkFycmF5KTsK
KyAgICBpZiAoc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbigpKQorICAgICAgICByZXR1
cm4gZmlyc3RNYXRjaGluZ0NoaWxkRWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVj
dGlvbio+KHRoaXMpLCByb290KTsKKyAgICByZXR1cm4gZmlyc3RNYXRjaGluZ0VsZW1lbnQoc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKSwgcm9vdCk7Cit9CisKK2lubGlu
ZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0RWxlbWVudCh1bnNpZ25lZCYg
b2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXMsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFpc05vZGVMaXN0KHR5cGUoKSkpOworICAgIGlmIChVTkxJS0VM
WShvdmVycmlkZXNJdGVtQWZ0ZXIoKSkpCisgICAgICAgIHJldHVybiB2aXJ0dWFsSXRlbUFmdGVy
KG9mZnNldEluQXJyYXksIHByZXZpb3VzKTsKKyAgICBBU1NFUlQoIW9mZnNldEluQXJyYXkpOwor
ICAgIGlmIChzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpCisgICAgICAgIHJldHVy
biBuZXh0TWF0Y2hpbmdDaGlsZEVsZW1lbnQodGhpcywgcHJldmlvdXMsIHJvb3QpOworICAgIHJl
dHVybiBuZXh0TWF0Y2hpbmdFbGVtZW50KHRoaXMsIHByZXZpb3VzLCByb290KTsKK30KKworaW5s
aW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJzZUZvcndhcmRUb09mZnNldCh1bnNp
Z25lZCBvZmZzZXQsIEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50LCB1bnNpZ25lZCYgY3VycmVudE9m
ZnNldCwgdW5zaWduZWQmIG9mZnNldEluQXJyYXksIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFpc05vZGVMaXN0KHR5cGUoKSkpOworICAgIGlmIChvdmVycmlkZXNJ
dGVtQWZ0ZXIoKSkgeworICAgICAgICBvZmZzZXRJbkFycmF5ID0gbV9jYWNoZWRFbGVtZW50c0Fy
cmF5T2Zmc2V0OworICAgICAgICB3aGlsZSAoY3VycmVudE9mZnNldCAhPSBvZmZzZXQgJiYgKGN1
cnJlbnRFbGVtZW50ID0gdmlydHVhbEl0ZW1BZnRlcihvZmZzZXRJbkFycmF5LCBjdXJyZW50RWxl
bWVudCkpKQorICAgICAgICAgICAgKytjdXJyZW50T2Zmc2V0OworICAgICAgICByZXR1cm4gY3Vy
cmVudEVsZW1lbnQ7CisgICAgfQorICAgIGlmIChzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuKCkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRPZmZzZXQgIT0gb2Zmc2V0ICYmIChjdXJy
ZW50RWxlbWVudCA9IG5leHRNYXRjaGluZ0NoaWxkRWxlbWVudCh0aGlzLCBjdXJyZW50RWxlbWVu
dCwgcm9vdCkpKQorICAgICAgICAgICAgKytjdXJyZW50T2Zmc2V0OworICAgICAgICByZXR1cm4g
Y3VycmVudEVsZW1lbnQ7CisgICAgfQorICAgIHJldHVybiB0cmF2ZXJzZU1hdGNoaW5nRWxlbWVu
dHNGb3J3YXJkVG9PZmZzZXQodGhpcywgb2Zmc2V0LCBjdXJyZW50RWxlbWVudCwgY3VycmVudE9m
ZnNldCwgcm9vdCk7Cit9CisKIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vd29ya3Nob3AvYXV0aG9yL2RodG1sL3JlZmVyZW5jZS9tZXRob2RzL25hbWVkaXRlbS5h
c3AKQEAgLTQ4NywyMSArNjIwLDI1IEBAIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0o
Y29uc3QgQXQKICAgICAvLyBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIG5hbWUgYXR0cmlidXRlLCBi
dXQgb25seSBvbiB0aG9zZSBlbGVtZW50cwogICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1l
IGF0dHJpYnV0ZS4KIAorICAgIENvbnRhaW5lck5vZGUqIHJvb3QgPSByb290Q29udGFpbmVyTm9k
ZSgpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICB1bnNpZ25lZCBh
cnJheU9mZnNldCA9IDA7CiAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZm9yIChOb2RlKiBlID0g
aXRlbUFmdGVyKGFycmF5T2Zmc2V0LCAwKTsgZTsgZSA9IGl0ZW1BZnRlcihhcnJheU9mZnNldCwg
ZSkpIHsKLSAgICAgICAgaWYgKGNoZWNrRm9yTmFtZU1hdGNoKHRvRWxlbWVudChlKSwgLyogY2hl
Y2tOYW1lICovIGZhbHNlLCBuYW1lKSkgewotICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGUsIGks
IGFycmF5T2Zmc2V0KTsKLSAgICAgICAgICAgIHJldHVybiBlOworICAgIGZvciAoRWxlbWVudCog
ZWxlbWVudCA9IHRyYXZlcnNlRmlyc3RFbGVtZW50KGFycmF5T2Zmc2V0LCByb290KTsgZWxlbWVu
dDsgZWxlbWVudCA9IHRyYXZlcnNlTmV4dEVsZW1lbnQoYXJyYXlPZmZzZXQsIGVsZW1lbnQsIHJv
b3QpKSB7CisgICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChlbGVtZW50LCAvKiBjaGVja05h
bWUgKi8gZmFsc2UsIG5hbWUpKSB7CisgICAgICAgICAgICBzZXRJdGVtQ2FjaGUoZWxlbWVudCwg
aSwgYXJyYXlPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0K
ICAgICAgICAgaSsrOwogICAgIH0KIAogICAgIGkgPSAwOwotICAgIGZvciAoTm9kZSogZSA9IGl0
ZW1BZnRlcihhcnJheU9mZnNldCwgMCk7IGU7IGUgPSBpdGVtQWZ0ZXIoYXJyYXlPZmZzZXQsIGUp
KSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaCh0b0VsZW1lbnQoZSksIC8qIGNoZWNr
TmFtZSAqLyB0cnVlLCBuYW1lKSkgewotICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGUsIGksIGFy
cmF5T2Zmc2V0KTsKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQoZSk7CisgICAgZm9yIChF
bGVtZW50KiBlbGVtZW50ID0gdHJhdmVyc2VGaXJzdEVsZW1lbnQoYXJyYXlPZmZzZXQsIHJvb3Qp
OyBlbGVtZW50OyBlbGVtZW50ID0gdHJhdmVyc2VOZXh0RWxlbWVudChhcnJheU9mZnNldCwgZWxl
bWVudCwgcm9vdCkpIHsKKyAgICAgICAgaWYgKGNoZWNrRm9yTmFtZU1hdGNoKGVsZW1lbnQsIC8q
IGNoZWNrTmFtZSAqLyB0cnVlLCBuYW1lKSkgeworICAgICAgICAgICAgc2V0SXRlbUNhY2hlKGVs
ZW1lbnQsIGksIGFycmF5T2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAg
ICAgICB9CiAgICAgICAgIGkrKzsKICAgICB9CkBAIC01MTQsMTcgKzY1MSwyMSBAQCB2b2lkIEhU
TUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjCiAgICAgaWYgKGhhc05hbWVDYWNoZSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBDb250YWluZXJOb2RlKiByb290ID0gcm9vdENvbnRh
aW5lck5vZGUoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybjsKKwogICAgIHVuc2ln
bmVkIGFycmF5T2Zmc2V0ID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBpdGVtQWZ0ZXIoYXJy
YXlPZmZzZXQsIDApOyBub2RlOyBub2RlID0gaXRlbUFmdGVyKGFycmF5T2Zmc2V0LCBub2RlKSkg
ewotICAgICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBmb3IgKEVsZW1lbnQq
IGVsZW1lbnQgPSB0cmF2ZXJzZUZpcnN0RWxlbWVudChhcnJheU9mZnNldCwgcm9vdCk7IGVsZW1l
bnQ7IGVsZW1lbnQgPSB0cmF2ZXJzZU5leHRFbGVtZW50KGFycmF5T2Zmc2V0LCBlbGVtZW50LCBy
b290KSkgeworICAgICAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBIVE1MRWxlbWVudCogZSA9IHRvSFRNTEVsZW1lbnQobm9k
ZSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRBdHRy
aWJ1dGUoKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdl
dE5hbWVBdHRyaWJ1dGUoKTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gdG9I
VE1MRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJW
YWwgPSBodG1sRWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lQXR0clZhbCA9IGh0bWxFbGVtZW50LT5nZXROYW1lQXR0cmlidXRlKCk7CiAg
ICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFwcGVuZElkQ2Fj
aGUoaWRBdHRyVmFsLCBlKTsKLSAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYg
aWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsICYmICh0eXBlKCkgIT0gRG9jQWxsIHx8IG5hbWVTaG91
bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKGUpKSkKLSAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNo
ZShuYW1lQXR0clZhbCwgZSk7CisgICAgICAgICAgICBhcHBlbmRJZENhY2hlKGlkQXR0clZhbCwg
aHRtbEVsZW1lbnQpOworICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0
dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgKHR5cGUoKSAhPSBEb2NBbGwgfHwgbmFtZVNob3VsZEJl
VmlzaWJsZUluRG9jdW1lbnRBbGwoaHRtbEVsZW1lbnQpKSkKKyAgICAgICAgICAgIGFwcGVuZE5h
bWVDYWNoZShuYW1lQXR0clZhbCwgaHRtbEVsZW1lbnQpOwogICAgIH0KIAogICAgIHNldEhhc05h
bWVDYWNoZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAkocmV2aXNp
b24gMTM3NzE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRWxlbWVu
dCogdmlydHVhbEl0ZW1BZnRlcih1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCopIGNv
bnN0OwogCisgICAgRWxlbWVudCogdHJhdmVyc2VGaXJzdEVsZW1lbnQodW5zaWduZWQmIG9mZnNl
dEluQXJyYXksIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OworICAgIEVsZW1lbnQqIHRyYXZl
cnNlRm9yd2FyZFRvT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1l
bnQsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0LCB1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29u
dGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBIVE1MQ29sbGVjdGlv
bihOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSwgSXRlbUFmdGVyT3ZlcnJpZGVUeXBlKTsKIApA
QCAtNzcsNiArODAsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja0Zv
ck5hbWVNYXRjaChFbGVtZW50KiwgYm9vbCBjaGVja05hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgRWxlbWVudCogdHJhdmVyc2VOZXh0RWxlbWVudCh1bnNpZ25lZCYg
b2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXMsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzTGl2ZU5vZGVMaXN0KCkgY29uc3QgT1ZFUlJJREUg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHRydWU7IH0KIAo=
</data>
<flag name="review"
          id="197367"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>