<?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>47702</bug_id>
          
          <creation_ts>2010-10-14 17:10:50 -0700</creation_ts>
          <short_desc>Use more specific types for node pointers, especially when calling node insertion and removal functions</short_desc>
          <delta_ts>2019-02-06 09:03:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>294477</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-14 17:10:50 -0700</bug_when>
    <thetext>Use more specific types for node pointers, especially when calling node insertion and removal functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294479</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-14 17:12:23 -0700</bug_when>
    <thetext>I am preparing to make functions such as insertBefore non-virtual and make sure almost all callers call the versions in ContainerNode. We’ll still need a way to call these from DOM bindings on an arbitrary node.

To get started on this, I commented out the functions in Node, and changed almost every caller so they had a specific enough type that they could call directly to ContainerNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294508</commentid>
    <comment_count>2</comment_count>
      <attachid>70812</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-14 17:56:47 -0700</bug_when>
    <thetext>Created attachment 70812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294594</commentid>
    <comment_count>3</comment_count>
      <attachid>70812</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-14 23:21:07 -0700</bug_when>
    <thetext>Comment on attachment 70812
Patch

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

Looks great, r=me.

&gt; WebCore/dom/Element.cpp:125
&gt; -            Node* firstChild = node-&gt;firstChild();
&gt; +            HTMLElement* element = static_cast&lt;HTMLElement*&gt;(node.get());

It would be nice to keep the name more specific.

&gt; WebCore/dom/Range.cpp:670
&gt; -                    m_start.container()-&gt;removeChild(n, ec);
&gt; +                    static_cast&lt;ContainerNode*&gt;(m_start.container())-&gt;removeChild(n, ec);

We use &quot;toXXX&quot; functions in some code areas to ASSERT at runtime. But perhaps this is obvious enough as is.

&gt; WebCore/dom/Text.cpp:156
&gt;      RefPtr&lt;Text&gt; protectedThis(this); // Mutation event handlers could cause our last ref to go away
&gt; -    Node* parent = parentNode(); // Protect against mutation handlers moving this node during traversal
&gt; +    ContainerNode* parent = parentNode(); // Protect against mutation handlers moving this node during traversal

This code looks very suspicious. It seems that nothing prevents parent from being destroyed by mutation event handlers.

&gt; WebCore/dom/TreeWalker.cpp:100
&gt;              if (!parent || parent == root() || parent == m_current)
&gt;                  return 0;
&gt;              node = parent;

I&apos;m not sure that this is an improvement. The pointer is never going to be used as a ContainerNode here, so seeing the more specific type makes one wonder a little. Another visual inconvenience is that parentNode() doesn&apos;t have &quot;Container&quot; in its name.

There are of course more places like this in this patch. Perhaps this is so minor that it&apos;s not worth going over the patch again or even debating.

I wish we could match DOM in not having a ContainerNode class, but that&apos;s probably impractical because it would make Text objects larger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294800</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-15 10:17:00 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #3)
&gt; &gt; WebCore/dom/Element.cpp:125
&gt; &gt; -            Node* firstChild = node-&gt;firstChild();
&gt; &gt; +            HTMLElement* element = static_cast&lt;HTMLElement*&gt;(node.get());
&gt; 
&gt; It would be nice to keep the name more specific.

This is a misunderstanding. There is still a firstChild variable, I’m not renaming that. I’m just adding an “element”

&gt; &gt; WebCore/dom/Range.cpp:670
&gt; &gt; -                    m_start.container()-&gt;removeChild(n, ec);
&gt; &gt; +                    static_cast&lt;ContainerNode*&gt;(m_start.container())-&gt;removeChild(n, ec);
&gt; 
&gt; We use &quot;toXXX&quot; functions in some code areas to ASSERT at runtime. But perhaps this is obvious enough as is.

Good idea. I’ll add toContainerNode.

&gt; &gt; WebCore/dom/Text.cpp:156
&gt; &gt;      RefPtr&lt;Text&gt; protectedThis(this); // Mutation event handlers could cause our last ref to go away
&gt; &gt; -    Node* parent = parentNode(); // Protect against mutation handlers moving this node during traversal
&gt; &gt; +    ContainerNode* parent = parentNode(); // Protect against mutation handlers moving this node during traversal
&gt; 
&gt; This code looks very suspicious. It seems that nothing prevents parent from being destroyed by mutation event handlers.

You may be right. I’ll take a second look after landing this.

&gt; &gt; WebCore/dom/TreeWalker.cpp:100
&gt; &gt;              if (!parent || parent == root() || parent == m_current)
&gt; &gt;                  return 0;
&gt; &gt;              node = parent;
&gt; 
&gt; I&apos;m not sure that this is an improvement. The pointer is never going to be used as a ContainerNode here, so seeing the more specific type makes one wonder a little. Another visual inconvenience is that parentNode() doesn&apos;t have &quot;Container&quot; in its name.
&gt; 
&gt; There are of course more places like this in this patch. Perhaps this is so minor that it&apos;s not worth going over the patch again or even debating.

I’d like these local variables to have the more specific type even if there is no immediate concrete benefit.

I want these local variables to get their type from the result of the parentNode function. If we were requiring newer C++ compilers we could do it with the auto keyword instead of specifying a type directly. I agree that doesn’t seem important to make the type be ContainerNode, but on the other hand it doesn’t seem helpful to broaden the type from ContainerNode to Node for no particular reason either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294839</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-15 11:31:04 -0700</bug_when>
    <thetext>Committed r69868: &lt;http://trac.webkit.org/changeset/69868&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502986</commentid>
    <comment_count>6</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:32 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70812</attachid>
            <date>2010-10-14 17:56:47 -0700</date>
            <delta_ts>2010-10-14 23:21:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47702-20101014175646.patch</filename>
            <type>text/plain</type>
            <size>89341</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQ3IEBACisyMDEwLTEwLTE0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2Ug
bW9yZSBzcGVjaWZpYyB0eXBlcyBmb3Igbm9kZSBwb2ludGVycywgZXNwZWNpYWxseSB3aGVuIGNh
bGxpbmcgbm9kZSBpbnNlcnRpb24gYW5kIHJlbW92YWwgZnVuY3Rpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzcwMgorCisgICAgICAgIFJlZmFj
dG9yaW5nLiBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgV2hpbGUgZGV2ZWxvcGluZyB0aGlzIHBh
dGNoIEkgdGVtcG9yYXJpbHkgcmVtb3ZlZCB0aGUgbm9kZSBpbnNlcnRpb24gYW5kCisgICAgICAg
IHJlbW92YWwgbWVtYmVyIGZ1bmN0aW9ucyBmcm9tIHRoZSBOb2RlIGNsYXNzIGFuZCBmaXhlZCBh
bG1vc3QgYWxsIGNhbGwgc2l0ZXMKKyAgICAgICAgc28gdGhleSBjYWxsIGl0IGRpcmVjdGx5IG9u
IHRoZSBDb250YWluZXJOb2RlIGNsYXNzLCB3aGljaCB3aWxsIGJlIGltcG9ydGFudAorICAgICAg
ICBvbmNlIHdlIG1ha2UgdGhlIGZ1bmN0aW9ucyBub24tdmlydHVhbC4KKworICAgICAgICAqIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAgICogZG9tL0NvbnRh
aW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6aW5zZXJ0QmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYXJldFJhbmdl
RnJvbVBvaW50KToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cGFyZW50RWxlbWVudCk6CisgICAg
ICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwcmV2
aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4dCk6CisgICAgICAgICogZG9t
L1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6cmVwbGFjZVdob2xlVGV4dCk6Cisg
ICAgICAgICogZG9tL1RyZWVXYWxrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtl
cjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAg
KiBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogZWRpdGluZy9C
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNEZWxldGFibGVFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5n
L0luZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRl
bnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydE5v
ZGVCZWZvcmVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb1VuYXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmRvVW5hcHBseSk6Cisg
ICAgICAgICogZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW1vdmVOb2RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVO
b2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21t
YW5kLmg6CisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmV4ZWN1dGVBcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
cGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRl
eHROb2RlQ29tbWFuZDo6ZG9SZWFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMp
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jbG9zaW5nTGlzdCk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2VyaWFsaXplTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JUb1Jl
dGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFy
a3VwKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6CisgICAgICAgICog
aHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICogaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OmFzc29jaWF0ZWRDb250cm9sKToK
KyAgICAgICAgKiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9w
dGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVDZWxsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVu
dDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMpOgorICAgICAgICAqIGh0bWwvSFRNTFRh
YmxlQ29sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50
OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyk6CisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6Omluc2Vy
dFJvdyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyk6CisgICAgICAg
ICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9u
OjpnZXRSYW5nZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29udGFpbnNO
b2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRFbGVtZW50KToK
KyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50Ojpvd25lclNWR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6dmll
d3BvcnRFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVMaWdodEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IHN2Zy9TVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VGb3JtYXRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9T
VkdGb250RmFjZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VV
cmlFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdHbHlwaEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR2x5cGhFbGVtZW50OjppbnZhbGlkYXRlR2x5
cGhDYWNoZSk6CisgICAgICAgICogc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdIS2VybkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAg
ICogc3ZnL1NWR0xvY2F0YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6
Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxl
OjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6dXBkYXRlQ29udGFpbmVyT2Zm
c2V0cyk6CisgICAgICAgICogc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdWS2VybkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1ZLZXJuRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgICog
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCk6CisgICAgICAgICogd21sL1dNTERvRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxEb0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OldNTERvRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6
CisgICAgICAgICogd21sL1dNTE5vb3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldN
TE5vb3BFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogd21sL1dNTE9w
dGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3duZXJTZWxlY3RFbGVtZW50KToK
KyAgICAgICAgKiB3bWwvV01MUG9zdGZpZWxkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXTUxQb3N0ZmllbGRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxQb3N0ZmllbGRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAg
ICAgKiB3bWwvV01MU2V0dmFyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZXR2
YXJFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXTUxT
ZXR2YXJFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAgKiB3bWwvV01MVGFz
a0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MVGFza0VsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldNTFRhc2tFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KToKKyAgICAgICAgKiB3bWwvV01MVGltZXJFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldNTFRpbWVyRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V01MVGltZXJFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAg
ICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
Ojpub2Rlc0luQXhpcyk6CisgICAgICAgIFVzZSBDb250YWluZXJOb2RlKiBmb3IgdGhlIHJlc3Vs
dCBvZiB0aGUgcGFyZW50Tm9kZSBmdW5jdGlvbiBub3cgdGhhdAorICAgICAgICBpdCByZXR1cm5z
IGEgQ29udGFpbmVyTm9kZSouIEluIHRoZSBwYXN0IGl0IHVzZWQgdG8gcmV0dXJuIGp1c3QgTm9k
ZSouCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KTogRXhwbGNpdGx5CisgICAg
ICAgIGNhc3QgdG8gSFRNTEVsZW1lbnQqIGluIHRoZSBjYXNlIHRoYXQgaGFuZGxlcyA8aHRtbD4g
YW5kIDxib2R5PgorICAgICAgICBlbGVtZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmJhc2VVUkkpOiBVc2UgQ29udGFpbmVyTm9kZSouCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptYXJrQW5jZXN0b3JzV2l0aENoaWxkTmVlZHNTdHls
ZVJlY2FsYyk6IFVzZSBDb250YWluZXJOb2RlKi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omlz
RGVzY2VuZGFudE9mKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjcmVhdGVSZW5k
ZXJlcklmTmVlZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRUZXh0Q29u
dGVudCk6IFVzZSBhbHJlYWR5LXR5cGVjYXN0IHBvaW50ZXIgaW4gYSBjYWxsIHRvCisgICAgICAg
IGFwcGVuZENoaWxkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YW5jZXN0b3JFbGVtZW50KTog
VXNlIENvbnRhaW5lck5vZGUqLgorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlTm9kZSk6IFVzZSBDb250YWluZXJOb2RlKi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNlY3RzTm9kZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50cyk6IENhc3QgdG8gQ29udGFpbmVyTm9kZSogaW4g
YSBjb3VwbGUgY2FzZXMKKyAgICAgICAgd2hlcmUgd2UgcHJldmlvdXNseSBjaGVja2VkIHRoYXQg
dGhlIG5vZGUgaW4gcXVlc3Rpb24gaGFzIGEgY2hpbGQuIEFueSBub2RlCisgICAgICAgIHRoYXQg
cmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGZvciBmaXJzdENoaWxkIGlzIGEgQ29udGFpbmVyTm9k
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjaGVja05vZGVCQSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vWE1MRG9j
dW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Omlu
c2VydEVycm9yTWVzc2FnZUJsb2NrKTogUmV3cm90ZSBjb2RlIHRvIHVzZQorICAgICAgICBtb3Jl
IHNwZWNpZmljIHR5cGVzLCBkb2N1bWVudCBpbnN0ZWFkIG9mIGRvYywgYW5kIHBhcmFncmFwaCBp
bnN0ZWFkIG9mIHBhci4KKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZVN0eWxlRnJvbVJ1
bkJlZm9yZUFwcGx5aW5nU3R5bGUpOgorICAgICAgICBVc2UgQ29udGFpbmVyTm9kZSouCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJ
ZldpdGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgVXNlIHJlcGxhY2VFbGVtZW50V2l0aFNwYW5Q
cmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzOyB0aGUgb2xkIGZ1bmN0aW9uCisgICAgICAg
IHRvb2sgYSBOb2RlIGFyZ3VtZW50IGFuZCBoYWQgTm9kZSBpbiBpdHMgbmFtZS4KKworICAgICAg
ICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyk6IFVzZSBD
b250YWluZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
cGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgUmVuYW1lZCBhbmQgY2hhbmdlZCB0byB0YWtlIEhUTUxFbGVtZW50LiBBbHNvIHVzZSBD
b250YWluZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBy
dW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJl
YWtPdXRPZkVtcHR5TGlzdEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgpOiBE
aXR0by4KKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OlJlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kKTogVGFrZSBhbgorICAgICAgICBIVE1MRWxlbWVudCBpbnN0ZWFk
IG9mIGEgTm9kZS4gQ2FsbCBpdCBtX2VsZW1lbnRUb1JlcGxhY2UgaW5zdGVhZCBvZiBtX25vZGUu
CisgICAgICAgIChXZWJDb3JlOjpzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGls
ZHJlbik6IFRha2UgSFRNTEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZDo6ZG9BcHBseSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkpOiBEaXR0
by4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmg6IERpdHRv
LgorCisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KTog
VXNlIFN0eWxlZEVsZW1lbnQgZm9yIHJlc3VsdAorICAgICAgICBvZiBpbnNlcnRGcmFnbWVudEZv
clRlc3RSZW5kZXJpbmcgc2luY2UgdGhhdCdzIHdoYXQgaXQgcmV0dXJucy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGUpOiBVc2UgQ29udGFpbmVyTm9k
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6Omluc2VydE5vZGVCZWZv
cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6Omluc2Vy
dEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZyk6IFJldHVybiBTdHlsZWRFbGVtZW50LgorICAgICAg
ICBVc2UgSFRNTEVsZW1lbnQgZm9yIGJvZHkuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVu
dEZyYWdtZW50OjpyZXN0b3JlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudCk6IFRha2UKKyAg
ICAgICAgU3R5bGVkRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKTogVXNlIENvbnRhaW5lck5vZGUuCisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y29weVN0eWxlVG9DaGlsZHJlbik6IFVz
ZSBIVE1MRWxlbWVudCBmb3IKKyAgICAgICAgdGhlIGNsb25lZCBzcGFuLCBzaW5jZSB0aGUgY2xv
bmUgd2lsbCBiZSBhIHNzcGFuIHRvby4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyk6IFVzZSBDb250YWluZXJOb2RlIHNpbmNlCisg
ICAgICAgIHRoZSBsaXN0IGl0ZW0gaGFzIGEgY2hpbGQsIGFuZCB0aGF0IHByb3ZlcyBpdCBpcyBh
IENvbnRhaW5lck5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICBVc2UgQ29udGFpbmVyTm9k
ZSBhbmQgYWxzbyByZW1vdmVkIGFuIHVubm5lZGVkIGxvY2FsIHZhcmlhYmxlLgorCisgICAgICAg
ICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6
c2V0T3V0ZXJUZXh0KTogVXNlIENvbnRhaW5lck5vZGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQpOiBVc2UgQ29udGFpbmVyTm9kZSBhbmQgYWxzbyB1c2Ug
JiYgdG8gbWFrZQorICAgICAgICB0aGUgbG9naWMgYSBsaXR0bGUgc2ltcGxlci4KKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKTogVXNlIENvbnRhaW5lck5vZGUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6ZmluZEZvcm1BbmNlc3Rvcik6IERpdHRv
LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKTogVXNlIENvbnRhaW5lck5v
ZGUuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRN
TCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFy
ZW50Tm9kZSk6IFVzZSBpc0RvY3VtZW50Tm9kZSBpbnN0ZWFkIG9mCisgICAgICAgIG5vZGVUeXBl
LiBXZSBzaG91bGQgYWxtb3N0IG5ldmVyIHVzZSBub2RlVHlwZSBpbnNpZGUgdGhlIGVuZ2luZS4K
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKTog
VXNlIENvbnRhaW5lck5vZGUuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
ZGlkUmVtb3ZlRE9NTm9kZSk6IERpdHRvLgorCisgICAgICAgICogd21sL1dNTE9wdEdyb3VwRWxl
bWVudC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgb3ZlcnJpZGVzIG9mIGluc2VydEJlZm9yZSwKKyAg
ICAgICAgcmVwbGFjZUNoaWxkLCByZW1vdmVDaGlsZCwgYXBwZW5kQ2hpbGQsIGFuZCByZW1vdmVD
aGlsZHJlbiBmdW5jdGlvbnMuCisgICAgICAgIFRocyBhbHJlYWR5IG92ZXJyaWRlcyBjaGlsZHJl
bkNoYW5nZWQsIHRoYXQgaXMgY2FsbGVkIGJ5IGFsbCBvZiB0aGUgYWJvdmUsCisgICAgICAgIGFu
ZCBpdCBkb2VzIHRoZSBzYW1lIHRoaW5nIHRoZXNlIGZ1bmN0aW9ucyBkaWQuCisgICAgICAgIChX
ZWJDb3JlOjpvd25lclNlbGVjdEVsZW1lbnQpOiBVc2UgQ29udGFpbmVyTm9kZS4KKyAgICAgICAg
KiB3bWwvV01MT3B0R3JvdXBFbGVtZW50Lmg6IERpdHRvLgorCiAyMDEwLTEwLTE0ICBKYW1lcyBS
b2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDY5ODI3
KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NjQsNyArMTk2NCw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5
bGUKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRl
c2NlbmRhbnQ6CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIE5v
ZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSog
biA9IGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxl
bWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5OwogICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CkBA
IC0xOTc1LDcgKzE5NzUsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNoIENTU1N0
eWxlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7CisgICAg
ICAgICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAg
aWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1
LDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZgogICAgICAgICBO
b2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKIAogICAgICAgICAvLyBJZiBjaGlsZCBpcyBhbHJlYWR5
IHByZXNlbnQgaW4gdGhlIHRyZWUsIGZpcnN0IHJlbW92ZSBpdCBmcm9tIHRoZSBvbGQgbG9jYXRp
b24uCi0gICAgICAgIGlmIChOb2RlKiBvbGRQYXJlbnQgPSBjaGlsZC0+cGFyZW50Tm9kZSgpKQor
ICAgICAgICBpZiAoQ29udGFpbmVyTm9kZSogb2xkUGFyZW50ID0gY2hpbGQtPnBhcmVudE5vZGUo
KSkKICAgICAgICAgICAgIG9sZFBhcmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQsIGVjKTsKICAgICAg
ICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg1LDcgKzI4NSw3IEBA
IGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWYKICAgICAgICAgUmVmUHRy
PE5vZGU+IG5leHRDaGlsZCA9IGlzRnJhZ21lbnQgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IDA7
CiAKICAgICAgICAgLy8gUmVtb3ZlIGNoaWxkIGZyb20gaXRzIG9sZCBwb3NpdGlvbi4KLSAgICAg
ICAgaWYgKE5vZGUqIG9sZFBhcmVudCA9IGNoaWxkLT5wYXJlbnROb2RlKCkpCisgICAgICAgIGlm
IChDb250YWluZXJOb2RlKiBvbGRQYXJlbnQgPSBjaGlsZC0+cGFyZW50Tm9kZSgpKQogICAgICAg
ICAgICAgb2xkUGFyZW50LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgZWMpOwogICAgICAgICBp
ZiAoZWMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NzEsNyArNTcxLDcgQEAgYm9v
bCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNzUmVmUAogICAgIGZvciAoTm9kZVZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdldHMuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBpdC0+Z2V0KCk7CiAgICAgICAgIC8v
IElmIGNoaWxkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdHJlZSwgZmlyc3QgcmVtb3ZlIGl0
Ci0gICAgICAgIGlmIChOb2RlKiBvbGRQYXJlbnQgPSBjaGlsZC0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChDb250YWluZXJOb2RlKiBvbGRQYXJlbnQgPSBjaGlsZC0+cGFyZW50Tm9kZSgp
KSB7CiAgICAgICAgICAgICBvbGRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxkLCBlYyk7CiAgICAg
ICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNjIsNyArMTE2Miw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50
OjpjYXJldFJhbmdlRnIKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUgPSBub2RlLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKTsKICAgICBpZiAoc2hhZG93QW5jZXN0b3JOb2RlICE9IG5vZGUpIHsK
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc2hhZG93QW5jZXN0b3JOb2RlLT5ub2RlSW5kZXgo
KTsKLSAgICAgICAgTm9kZSogY29udGFpbmVyID0gc2hhZG93QW5jZXN0b3JOb2RlLT5wYXJlbnRO
b2RlKCk7CisgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHNoYWRvd0FuY2VzdG9y
Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSh0aGlzLCBj
b250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpOwogICAgIH0KIApJbmRleDogV2Vi
Q29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZG9tL0R5bmFt
aWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBOb2RlKiBE
eW5hbWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zCiAgICAgaWYgKG1fcm9vdE5vZGUtPmlz
RG9jdW1lbnROb2RlKCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIEVs
ZW1lbnQqIG5vZGUgPSBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVt
ZW50SWQpOwogICAgICAgICBpZiAobm9kZSAmJiBub2RlTWF0Y2hlcyhub2RlKSkgewotICAgICAg
ICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICBmb3IgKENvbnRhaW5lck5vZGUqIHAgPSBub2RlLT5wYXJl
bnROb2RlKCk7IHA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
cCA9PSBtX3Jvb3ROb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTggKzEyMiwxOSBAQCBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IEVsZW1lbnQ6OmRlCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9k
ZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAg
ICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKLSAgICAg
ICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZS5n
ZXQoKSk7CisgICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGls
ZCgpOwogICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCiAgICAgICAgICAgICAgICAgbmV4dE5v
ZGUgPSBmaXJzdENoaWxkOwogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRDaGlsZDsKICAg
ICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZmlyc3RDaGlsZDsgY2hpbGQ7IGNo
aWxkID0gbmV4dENoaWxkKSB7CiAgICAgICAgICAgICAgICAgbmV4dENoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0
KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5yZW1v
dmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIGZyYWdt
ZW50LT5pbnNlcnRCZWZvcmUoY2hpbGQsIG5vZGUuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2Rl
KTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBlbGVtZW50
LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVk
RXhjZXB0aW9uQ29kZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmFnbWVudC0+cmVt
b3ZlQ2hpbGQobm9kZS5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAg
ZnJhZ21lbnQtPnJlbW92ZUNoaWxkKGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKICAg
ICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwogICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykpIHsKICAgICAgICAgICAgIGZyYWdtZW50LT5y
ZW1vdmVDaGlsZChub2RlLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CkBAIC03NzUsNyAr
Nzc2LDcgQEAgS1VSTCBFbGVtZW50OjpiYXNlVVJJKCkgY29uc3QKICAgICBpZiAoIWJhc2UucHJv
dG9jb2woKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBiYXNlOwogCi0gICAgTm9kZSogcGFy
ZW50ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIGJhc2U7CiAKSW5kZXg6IFdl
YkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zODksNyArMzg5LDcgQEAgaW5saW5lIE5hbWVkTm9kZU1hcCogTm9kZTo6YXR0cmlidXRl
cygpIAogCiBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVudCgpIGNvbnN0CiB7Ci0g
ICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsKICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50
Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHBhcmVudCkgOiAwOwogfQogCkluZGV4OiBX
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAko
cmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzI0LDcgKzcyNCw3IEBAIGlubGluZSB2b2lkIE5vZGU6OnNldFN0eWxlQ2hhbmdlKFN0eWxl
Q2gKIAogaW5saW5lIHZvaWQgTm9kZTo6bWFya0FuY2VzdG9yc1dpdGhDaGlsZE5lZWRzU3R5bGVS
ZWNhbGMoKQogewotICAgIGZvciAoTm9kZSogcCA9IHBhcmVudE5vZGUoKTsgcCAmJiAhcC0+Y2hp
bGROZWVkc1N0eWxlUmVjYWxjKCk7IHAgPSBwLT5wYXJlbnROb2RlKCkpCisgICAgZm9yIChDb250
YWluZXJOb2RlKiBwID0gcGFyZW50Tm9kZSgpOyBwICYmICFwLT5jaGlsZE5lZWRzU3R5bGVSZWNh
bGMoKTsgcCA9IHAtPnBhcmVudE5vZGUoKSkKICAgICAgICAgcC0+c2V0Q2hpbGROZWVkc1N0eWxl
UmVjYWxjKCk7CiAgICAgCiAgICAgaWYgKGRvY3VtZW50KCktPmNoaWxkTmVlZHNTdHlsZVJlY2Fs
YygpKQpAQCAtMTE2Niw3ICsxMTY2LDcgQEAgYm9vbCBOb2RlOjppc0Rlc2NlbmRhbnRPZihjb25z
dCBOb2RlICpvdAogICAgIC8vIFJldHVybiB0cnVlIGlmIG90aGVyIGlzIGFuIGFuY2VzdG9yIG9m
IHRoaXMsIG90aGVyd2lzZSBmYWxzZQogICAgIGlmICghb3RoZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmb3IgKGNvbnN0IE5vZGUgKm4gPSBwYXJlbnROb2RlKCk7IG47IG4gPSBuLT5w
YXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKGNvbnN0IENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnRO
b2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4gPT0gb3RoZXIp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2
b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQogCiAgICAgQVNTRVJUKCFyZW5kZXJl
cigpKTsKICAgICAKLSAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7ICAgIAorICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgICAgCiAgICAgQVNTRVJUKHBhcmVu
dCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVu
ZGVyZXIoKTsKQEAgLTE5NzMsNyArMTk3Myw3IEBAIFN0cmluZyBOb2RlOjp0ZXh0Q29udGVudChi
b29sIGNvbnZlcnRCUnMKICAgICByZXR1cm4gaXNOdWxsU3RyaW5nID8gU3RyaW5nKCkgOiBjb250
ZW50LnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgTm9kZTo6c2V0VGV4dENvbnRlbnQoY29uc3QgU3Ry
aW5nICZ0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6c2V0VGV4dENvbnRlbnQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsgICAgICAgICAgIAogICAg
IHN3aXRjaCAobm9kZVR5cGUoKSkgewogICAgICAgICBjYXNlIFRFWFRfTk9ERToKQEAgLTE5ODEs
MzMgKzE5ODEsMzIgQEAgdm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChjb25zdCBTdHJpbmcgJgog
ICAgICAgICBjYXNlIENPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBQUk9DRVNTSU5HX0lOU1RS
VUNUSU9OX05PREU6CiAgICAgICAgICAgICBzZXROb2RlVmFsdWUodGV4dCwgZWMpOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgRUxFTUVOVF9O
T0RFOgogICAgICAgICBjYXNlIEFUVFJJQlVURV9OT0RFOgogICAgICAgICBjYXNlIEVOVElUWV9O
T0RFOgogICAgICAgICBjYXNlIEVOVElUWV9SRUZFUkVOQ0VfTk9ERToKICAgICAgICAgY2FzZSBE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFOiB7Ci0gICAgICAgICAgICBDb250YWluZXJOb2RlICpjb250
YWluZXIgPSBzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlICo+KHRoaXMpOwotICAgICAgICAgICAg
CisgICAgICAgICAgICBDb250YWluZXJOb2RlKiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxDb250
YWluZXJOb2RlKj4odGhpcyk7CiAgICAgICAgICAgICBjb250YWluZXItPnJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodGV4dCks
IGVjKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodGV4dCksIGVjKTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIERPQ1VNRU5UX05PREU6CiAgICAg
ICAgIGNhc2UgRE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICBjYXNlIE5PVEFUSU9OX05PREU6
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5nCi0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAg
IC8vIERvIG5vdGhpbmcuCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBFbGVtZW50KiBOb2RlOjphbmNlc3RvckVsZW1lbnQoKSBjb25z
dAogewogICAgIC8vIEluIHRoZW9yeSwgdGhlcmUgY2FuIGJlIEVudGl0eVJlZmVyZW5jZSBub2Rl
cyBiZXR3ZWVuIGVsZW1lbnRzLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4K
LSAgICBmb3IgKE5vZGUqIG4gPSBwYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkp
IHsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnROb2RlKCk7IG47IG4gPSBuLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMoUG9z
aXRpb25Nb3ZlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBOb2RlKiBwYXJlbnQgPSBuLT5wYXJl
bnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbi0+cGFyZW50Tm9kZSgpOwog
ICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKQEAgLTI3MSw3ICsyNzEs
NyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbihuLCAobW92ZVR5cGUgPT0gQ2hhcmFjdGVyKSA/IHVuY2hlY2tlZE5leHRP
ZmZzZXQobiwgbykgOiBvICsgMSk7CiAgICAgfQogCi0gICAgTm9kZSogcGFyZW50ID0gbi0+cGFy
ZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKTsK
ICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCkluZGV4OiBXZWJDb3Jl
L2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZp
c2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzczLDcgKzM3Myw3IEBAIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUK
ICAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwogICAgIH0KIAotICAgIE5vZGUqIHBhcmVudE5v
ZGUgPSByZWZOb2RlLT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9k
ZSA9IHJlZk5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpbnQgbm9kZUluZGV4ID0gcmVmTm9kZS0+
bm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYgKCFwYXJlbnROb2RlKSB7CkBAIC01NzIsNyArNTcy
LDcgQEAgYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSogcmVmTm9kZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgTm9kZSogcGFyZW50Tm9kZSA9IHJlZk5vZGUtPnBh
cmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGludCBub2RlSW5kZXggPSByZWZOb2RlLT5ub2RlSW5kZXgoKTsKICAg
ICAKICAgICBpZiAoIXBhcmVudE5vZGUpIHsKQEAgLTY2Nyw3ICs2NjcsNyBAQCBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
YWN0aW9uID09IENMT05FX0NPTlRFTlRTKQogICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC0+
YXBwZW5kQ2hpbGQobi0+Y2xvbmVOb2RlKHRydWUpLCBlYyk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lcigpLT5yZW1vdmVDaGlsZChu
LCBlYyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPiht
X3N0YXJ0LmNvbnRhaW5lcigpKS0+cmVtb3ZlQ2hpbGQobiwgZWMpOwogICAgICAgICAgICAgICAg
IG4gPSBuZXh0OwogICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgIH0KQEAgLTczMCwx
MiArNzMwLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OnByb2MKICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCiAgICAgICAg
ICAgICAgICAgICAgIGxlZnRDb250ZW50cy0+YXBwZW5kQ2hpbGQobi0+Y2xvbmVOb2RlKHRydWUp
LCBlYyk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0
LmNvbnRhaW5lcigpLT5yZW1vdmVDaGlsZChuLCBlYyk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPihtX3N0YXJ0LmNvbnRhaW5lcigpKS0+cmVtb3ZlQ2hp
bGQobiwgZWMpOwogICAgICAgICAgICAgICAgIG4gPSBuZXh0OwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgTm9kZSogbGVmdFBhcmVudCA9IG1fc3RhcnQuY29udGFpbmVyKCkt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogbGVmdFBhcmVudCA9IG1fc3Rh
cnQuY29udGFpbmVyKCktPnBhcmVudE5vZGUoKTsKICAgICAgICAgTm9kZSogbiA9IG1fc3RhcnQu
Y29udGFpbmVyKCktPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGZvciAoOyBsZWZ0UGFyZW50ICE9
IGNvbW1vblJvb3Q7IGxlZnRQYXJlbnQgPSBsZWZ0UGFyZW50LT5wYXJlbnROb2RlKCkpIHsKICAg
ICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xP
TkVfQ09OVEVOVFMpIHsKQEAgLTgwMCwxMiArODAwLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OnByb2MKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9u
ID09IENMT05FX0NPTlRFTlRTKQogICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50
cy0+aW5zZXJ0QmVmb3JlKG4tPmNsb25lTm9kZSh0cnVlKSwgcmlnaHRDb250ZW50cy0+Zmlyc3RD
aGlsZCgpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZW5kLmNvbnRhaW5lcigpLT5yZW1vdmVDaGlsZChuLCBlYyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4obV9lbmQuY29udGFpbmVy
KCkpLT5yZW1vdmVDaGlsZChuLCBlYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgTm9kZSogcmlnaHRQYXJlbnQgPSBtX2VuZC5jb250YWlu
ZXIoKS0+cGFyZW50Tm9kZSgpOworICAgICAgICBDb250YWluZXJOb2RlKiByaWdodFBhcmVudCA9
IG1fZW5kLmNvbnRhaW5lcigpLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIE5vZGUqIG4gPSBtX2Vu
ZC5jb250YWluZXIoKS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgIGZvciAoOyByaWdodFBh
cmVudCAhPSBjb21tb25Sb290OyByaWdodFBhcmVudCA9IHJpZ2h0UGFyZW50LT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rp
b24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsKQEAgLTExNjEsNyArMTE2MSw3IEBAIHZvaWQgUmFuZ2U6
OmNoZWNrTm9kZUJBKE5vZGUqIG4sIEV4Y2VwdGkKICAgICB9CiAKICAgICBOb2RlKiByb290ID0g
bjsKLSAgICB3aGlsZSAoTm9kZSogcGFyZW50ID0gcm9vdC0+cGFyZW50Tm9kZSgpKQorICAgIHdo
aWxlIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSByb290LT5wYXJlbnROb2RlKCkpCiAgICAgICAg
IHJvb3QgPSBwYXJlbnQ7CiAKICAgICBzd2l0Y2ggKHJvb3QtPm5vZGVUeXBlKCkpIHsKQEAgLTEy
ODcsNyArMTI4Nyw3IEBAIHZvaWQgUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSogcmVmTm9kZSwgRXgK
ICAgICAvLyBJTlZBTElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBvZiBy
ZWZOb2RlIGlzIGFuIEVudGl0eSwgTm90YXRpb24gb3IKICAgICAvLyBEb2N1bWVudFR5cGUgbm9k
ZSBvciBpZiByZWZOb2RlIGlzIGEgRG9jdW1lbnQsIERvY3VtZW50RnJhZ21lbnQsIEF0dHIsIEVu
dGl0eSwgb3IgTm90YXRpb24KICAgICAvLyBub2RlLgotICAgIGZvciAoTm9kZSogYW5jID0gcmVm
Tm9kZS0+cGFyZW50Tm9kZSgpOyBhbmM7IGFuYyA9IGFuYy0+cGFyZW50Tm9kZSgpKSB7CisgICAg
Zm9yIChDb250YWluZXJOb2RlKiBhbmMgPSByZWZOb2RlLT5wYXJlbnROb2RlKCk7IGFuYzsgYW5j
ID0gYW5jLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgc3dpdGNoIChhbmMtPm5vZGVUeXBlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CiAgICAgICAgICAgICBj
YXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIHZvaWQg
UmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjwKIAogICAgIGVjID0gMDsKICAgICB3
aGlsZSAoTm9kZSogbiA9IG5ld1BhcmVudC0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIG5ld1Bh
cmVudC0+cmVtb3ZlQ2hpbGQobiwgZWMpOworICAgICAgICBzdGF0aWNfY2FzdDxDb250YWluZXJO
b2RlKj4obmV3UGFyZW50LmdldCgpKS0+cmVtb3ZlQ2hpbGQobiwgZWMpOwogICAgICAgICBpZiAo
ZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogV2ViQ29yZS9kb20vVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDY5ODI3KQor
KysgV2ViQ29yZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBA
QCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnJlcGxhY2VXaG9sZVRleHQoCiAgICAgUmVmUHRyPFRl
eHQ+IGVuZFRleHQgPSBjb25zdF9jYXN0PFRleHQqPihsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRl
eHROb2RlKHRoaXMpKTsKIAogICAgIFJlZlB0cjxUZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOyAv
LyBNdXRhdGlvbiBldmVudCBoYW5kbGVycyBjb3VsZCBjYXVzZSBvdXIgbGFzdCByZWYgdG8gZ28g
YXdheQotICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgLy8gUHJvdGVjdCBhZ2FpbnN0
IG11dGF0aW9uIGhhbmRsZXJzIG1vdmluZyB0aGlzIG5vZGUgZHVyaW5nIHRyYXZlcnNhbAorICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgLy8gUHJvdGVjdCBhZ2FpbnN0
IG11dGF0aW9uIGhhbmRsZXJzIG1vdmluZyB0aGlzIG5vZGUgZHVyaW5nIHRyYXZlcnNhbAogICAg
IEV4Y2VwdGlvbkNvZGUgaWdub3JlZCA9IDA7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbiA9IHN0
YXJ0VGV4dDsgbiAmJiBuICE9IHRoaXMgJiYgbi0+aXNUZXh0Tm9kZSgpICYmIG4tPnBhcmVudE5v
ZGUoKSA9PSBwYXJlbnQ7KSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlVG9SZW1vdmUobi5y
ZWxlYXNlKCkpOwpJbmRleDogV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29y
ZS9kb20vVHJlZVdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgTm9k
ZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChTY3JpcHRTdGF0ZQogICAgICAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwor
ICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgICAgICAgICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50ID09IHJvb3QoKSB8fCBwYXJlbnQgPT0g
bV9jdXJyZW50KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgbm9kZSA9
IHBhcmVudDsKQEAgLTEyNyw3ICsxMjcsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQo
U2NyaXB0U3RhdGUqCiAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGlu
ZygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Tm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFwYXJl
bnQgfHwgcGFyZW50ID09IHJvb3QoKSB8fCBwYXJlbnQgPT0gbV9jdXJyZW50KQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgbm9kZSA9IHBhcmVudDsKQEAgLTIzNiw3ICsy
MzYsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhCiAgICAgICAg
IH0KICAgICAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIXBhcmVu
dCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBub2RlID0gcGFyZW50OwpJbmRleDog
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Myw0NyArMjkzLDQ3
IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2EKIAogICAgIC8vIENy
ZWF0ZSBlbGVtZW50cyBmb3IgZGlzcGxheQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAgIE5vZGUqIGRvY3VtZW50RWxlbWVudCA9
IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKKyAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHsKLSAgICAgICAgUmVm
UHRyPE5vZGU+IHJvb3RFbGVtZW50ID0gZG9jLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNl
KTsKLSAgICAgICAgZG9jLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgZWMpOwotICAgICAgICBS
ZWZQdHI8Tm9kZT4gYm9keSA9IGRvYy0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCBmYWxzZSk7Cisg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVt
ZW50KGh0bWxUYWcsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQtPmFwcGVuZENoaWxkKHJvb3RF
bGVtZW50LCBlYyk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNy
ZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwogICAgICAgICByb290RWxlbWVudC0+YXBwZW5k
Q2hpbGQoYm9keSwgZWMpOwogICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOwog
ICAgIH0KICNpZiBFTkFCTEUoU1ZHKQogICAgIGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudC0+bmFt
ZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSkgewotICAgICAgICBSZWZQ
dHI8Tm9kZT4gcm9vdEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2Up
OwotICAgICAgICBSZWZQdHI8Tm9kZT4gYm9keSA9IGRvYy0+Y3JlYXRlRWxlbWVudChib2R5VGFn
LCBmYWxzZSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVudCA9IGRvY3VtZW50
LT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IGJvZHkgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCBmYWxzZSk7CiAgICAgICAg
IHJvb3RFbGVtZW50LT5hcHBlbmRDaGlsZChib2R5LCBlYyk7CiAgICAgICAgIGJvZHktPmFwcGVu
ZENoaWxkKGRvY3VtZW50RWxlbWVudCwgZWMpOwotICAgICAgICBkb2MtPmFwcGVuZENoaWxkKHJv
b3RFbGVtZW50LmdldCgpLCBlYyk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290
RWxlbWVudC5nZXQoKSwgZWMpOwogICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgp
OwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgZWxzZSBpZiAoaXNXTUxEb2N1
bWVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiByb290RWxlbWVudCA9IGRvYy0+Y3JlYXRl
RWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBib2R5ID0gZG9j
LT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOwor
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGJv
ZHlUYWcsIGZhbHNlKTsKICAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVj
KTsKICAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBlYyk7Ci0gICAg
ICAgIGRvYy0+YXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgZG9j
dW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7CiAgICAgICAgIGRvY3Vt
ZW50RWxlbWVudCA9IGJvZHkuZ2V0KCk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBSZWZQdHI8RWxl
bWVudD4gcmVwb3J0RWxlbWVudCA9IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JIZWFkZXIoZG9jLCBt
X2Vycm9yTWVzc2FnZXMpOworICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0gY3Jl
YXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihkb2N1bWVudCwgbV9lcnJvck1lc3NhZ2VzKTsKICAg
ICBkb2N1bWVudEVsZW1lbnQtPmluc2VydEJlZm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVs
ZW1lbnQtPmZpcnN0Q2hpbGQoKSwgZWMpOwogI2lmIEVOQUJMRShYU0xUKQotICAgIGlmIChkb2Mt
PnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBh
ciA9IGRvYy0+Y3JlYXRlRWxlbWVudChwVGFnLCBmYWxzZSk7Ci0gICAgICAgIHJlcG9ydEVsZW1l
bnQtPmFwcGVuZENoaWxkKHBhciwgZWMpOwotICAgICAgICBwYXItPnNldEF0dHJpYnV0ZShzdHls
ZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIik7Ci0gICAgICAgIHBhci0+YXBwZW5kQ2hpbGQo
ZG9jLT5jcmVhdGVUZXh0Tm9kZSgiVGhpcyBkb2N1bWVudCB3YXMgY3JlYXRlZCBhcyB0aGUgcmVz
dWx0IG9mIGFuIFhTTCB0cmFuc2Zvcm1hdGlvbi4gVGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJz
IGdpdmVuIGFyZSBmcm9tIHRoZSB0cmFuc2Zvcm1lZCByZXN1bHQuIiksIGVjKTsKKyAgICBpZiAo
ZG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpIHsKKyAgICAgICAgUmVmUHRyPEVs
ZW1lbnQ+IHBhcmFncmFwaCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KHBUYWcsIGZhbHNlKTsK
KyAgICAgICAgcGFyYWdyYXBoLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAid2hpdGUtc3BhY2U6
IG5vcm1hbCIpOworICAgICAgICBwYXJhZ3JhcGgtPmFwcGVuZENoaWxkKGRvY3VtZW50LT5jcmVh
dGVUZXh0Tm9kZSgiVGhpcyBkb2N1bWVudCB3YXMgY3JlYXRlZCBhcyB0aGUgcmVzdWx0IG9mIGFu
IFhTTCB0cmFuc2Zvcm1hdGlvbi4gVGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGdpdmVuIGFy
ZSBmcm9tIHRoZSB0cmFuc2Zvcm1lZCByZXN1bHQuIiksIGVjKTsKKyAgICAgICAgcmVwb3J0RWxl
bWVudC0+YXBwZW5kQ2hpbGQocGFyYWdyYXBoLnJlbGVhc2UoKSwgZWMpOwogICAgIH0KICNlbmRp
ZgotICAgIGRvYy0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CiB9CiAKIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlz
aGVkKENhY2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJjZSkKSW5kZXg6IFdlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsNyAr
NTk4LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvYwogICAgIHdo
aWxlIChwYXJlbnRFbGVtZW50KSB7CiAgICAgICAgIGVsZW1TdGFjay5hcHBlbmQocGFyZW50RWxl
bWVudCk7CiAKLSAgICAgICAgTm9kZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsK
KyAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjk4MjcpCisr
KyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTk2LDcgKzExOTYsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZy
b21SCiAgICAgICAgIAogICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2
aW91c1NpYmxpbmcoKTsKICAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcgPSBub2RlLT5uZXh0U2li
bGluZygpOwotICAgICAgICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAg
ICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAg
cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPihub2RlKSwgUmVtb3ZlQWx3YXlzKTsKICAgICAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIHVwZGF0ZSB0aGUg
c3RhcnQgYW5kIHRoZSBlbmQgb2YgY3VycmVudCBzZWxlY3Rpb24gaGVyZSBidXQgbmVlZCBhIHRl
c3QuCkBAIC0xMzYyLDcgKzEzNjIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZXBsYWNl
V2l0aFNwYW5PCiAgICAgaWYgKHJlbW92ZU5vZGUpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4oZWxlbSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBuZXdT
cGFuRWxlbWVudCA9IHJlcGxhY2VOb2RlV2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRy
aWJ1dGVzKGVsZW0pOworICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbkVsZW1lbnQgPSByZXBs
YWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhlbGVtKTsK
ICAgICAgICAgQVNTRVJUKG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pbkRvY3Vt
ZW50KCkpOwogICAgICAgICBlbGVtID0gbmV3U3BhbkVsZW1lbnQ7CiAgICAgfQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjk4Mjcp
CisrKyBXZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAKICAgICAvLyBGaW5kIHRoZSB0b3AtbW9zdCBibG9ja3F1b3RlIGZyb20gdGhl
IHN0YXJ0LgogICAgIEVsZW1lbnQqIHRvcEJsb2NrcXVvdGUgPSAwOwotICAgIGZvciAoTm9kZSAq
bm9kZSA9IHBvcy5ub2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgeworICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9IHBvcy5ub2RlKCktPnBh
cmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBp
ZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKICAgICAgICAgICAgIHRvcEJsb2NrcXVvdGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiwxMiAr
MjE2LDEyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmUKIAogdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKFBhc3NS
ZWZQdHI8Tm9kZT4gbm9kZSkKIHsKLSAgICBSZWZQdHI8Tm9kZT4gcGFyZW50ID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBub2RlLT5wYXJl
bnROb2RlKCk7CiAgICAgcmVtb3ZlTm9kZShub2RlKTsKICAgICBwcnVuZShwYXJlbnQucmVsZWFz
ZSgpKTsKIH0KIAotSFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlTm9k
ZVdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+
IG5vZGUpCitIVE1MRWxlbWVudCogQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50
V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IG5vZGUpCiB7CiAgICAgLy8gSXQgd291bGQgYWxzbyBiZSBwb3NzaWJsZSB0byBpbXBs
ZW1lbnQgYWxsIG9mIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kCiAgICAgLy8gYXMgYSBzZXJp
ZXMgb2YgZXhpc3Rpbmcgc21hbGxlciBlZGl0IGNvbW1hbmRzLiAgU29tZW9uZSB3aG8gd2FudGVk
IHRvCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUo
UGFzc1JlZgogICAgICAgICBpZiAocmVuZGVyZXIgJiYgKCFyZW5kZXJlci0+Y2FuSGF2ZUNoaWxk
cmVuKCkgfHwgaGFzQVJlbmRlcmVkRGVzY2VuZGFudChub2RlLmdldCgpKSB8fCBub2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCkgPT0gbm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBub2RlLT5wYXJlbnROb2RlKCk7Cisg
ICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBuZXh0ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgICAgICByZW1vdmVOb2RlKG5vZGUpOwogICAgICAgICBub2RlID0gbmV4dDsKICAgICB9CkBA
IC0xMDA0LDcgKzEwMDQsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9m
RW1wCiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQXBw
bHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKIAotICAgIE5vZGUqIGxpc3ROb2RlID0gZW1w
dHlMaXN0SXRlbS0+cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIGxpc3ROb2RlID0g
ZW1wdHlMaXN0SXRlbS0+cGFyZW50Tm9kZSgpOwogICAgIC8vIEZJWE1FOiBDYW4ndCB3ZSBkbyBz
b21ldGhpbmcgYmV0dGVyIHdoZW4gdGhlIGltbWVkaWF0ZSBwYXJlbnQgd2Fzbid0IGEgbGlzdCBu
b2RlPwogICAgIGlmICghbGlzdE5vZGUKICAgICAgICAgfHwgKCFsaXN0Tm9kZS0+aGFzVGFnTmFt
ZSh1bFRhZykgJiYgIWxpc3ROb2RlLT5oYXNUYWdOYW1lKG9sVGFnKSkKQEAgLTEwMTMsNyArMTAx
Myw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0Jsb2NrID0gMDsKLSAgICBp
ZiAoTm9kZSogYmxvY2tFbmNsb3NpbmdMaXN0ID0gbGlzdE5vZGUtPnBhcmVudE5vZGUoKSkgewor
ICAgIGlmIChDb250YWluZXJOb2RlKiBibG9ja0VuY2xvc2luZ0xpc3QgPSBsaXN0Tm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChibG9ja0VuY2xvc2luZ0xpc3QtPmhhc1RhZ05hbWUo
bGlUYWcpKSB7IC8vIGxpc3ROb2RlIGlzIGluc2lkZSBhbm90aGVyIGxpc3QgaXRlbQogICAgICAg
ICAgICAgaWYgKHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShibG9ja0VuY2xvc2luZ0xpc3QpID09
IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShsaXN0Tm9kZSkpIHsKICAgICAgICAgICAgICAgICAv
LyBJZiBsaXN0Tm9kZSBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlIG91dGVyIGxpc3QgaXRlbSwg
dGhlbiBtb3ZlIGxpc3ROb2RlIG91dHNpZGUgb2YgdGhpcyBsaXN0IGl0ZW0KQEAgLTExMDQsNyAr
MTEwNCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICB9
IGVsc2UgewogICAgICAgICBBU1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA9PSAwKTsKICAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oY2Fy
ZXRQb3Mubm9kZSgpKTsKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHRleHROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9kZS0+
cGFyZW50Tm9kZSgpOwogICAgICAgICAvLyBUaGUgcHJlc2VydmVkIG5ld2xpbmUgbXVzdCBiZSB0
aGUgZmlyc3QgdGhpbmcgaW4gdGhlIG5vZGUsIHNpbmNlIG90aGVyd2lzZSB0aGUgcHJldmlvdXMK
ICAgICAgICAgLy8gcGFyYWdyYXBoIHdvdWxkIGJlIHF1b3RlZCwgYW5kIHdlIHZlcmlmaWVkIHRo
YXQgaXQgd2Fzbid0IGFib3ZlLgogICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dE5vZGUs
IDAsIDEpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlz
aW9uIDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVtb3Zl
Tm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGUpOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKFBhc3NSZWZQdHI8Tm9k
ZT4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Tm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICBIVE1MRWxlbWVudCogcmVwbGFjZU5vZGVXaXRo
U3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPik7Cisg
ICAgSFRNTEVsZW1lbnQqIHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5B
bmRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+KTsKICAgICB2b2lkIHJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPik7CiAgICAgdm9pZCByZW1vdmVO
b2RlQW5kUHJ1bmVBbmNlc3RvcnMoUGFzc1JlZlB0cjxOb2RlPik7CiAgICAgdm9pZCBwcnVuZShQ
YXNzUmVmUHRyPE5vZGU+KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgc3Rh
dGljIGJvb2wgaXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZAogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAgICAgLy8gQWxsb3cgYmxvY2tzIHRoYXQgaGF2ZSBhIGRpZmZlcmVudCBi
YWNrZ3JvdW5kIGZyb20gaXQncyBwYXJlbnQKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5kZW50
T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3IKICAgICAgICAgLy8gb3V0ZGVudFJlZ2lvbigp
IGFzc3VtZXMgaXQgaXMgb3BlcmF0aW5nIG9uIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgYW4gZW5j
bG9zaW5nIGJsb2NrcXVvdGUsIGJ1dCBpZiB0aGVyZSBhcmUgbXVsdGlwbHkgbmVzdGVkIGJsb2Nr
cXVvdGVzIGFuZCB3ZSd2ZQogICAgICAgICAvLyBqdXN0IHJlbW92ZWQgb25lLCB0aGVuIHRoaXMg
YXNzdW1wdGlvbiBpc24ndCB0cnVlLiBCeSBzcGxpdHRpbmcgdGhlIG5leHQgY29udGFpbmluZyBi
bG9ja3F1b3RlIGFmdGVyIHRoaXMgbm9kZSwgd2Uga2VlcCB0aGlzIGFzc3VtcHRpb24gdHJ1ZQog
ICAgICAgICBpZiAoc3BsaXRQb2ludCkgewotICAgICAgICAgICAgaWYgKE5vZGUqIHNwbGl0UG9p
bnRQYXJlbnQgPSBzcGxpdFBvaW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChD
b250YWluZXJOb2RlKiBzcGxpdFBvaW50UGFyZW50ID0gc3BsaXRQb2ludC0+cGFyZW50Tm9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUoYmxv
Y2txdW90ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1RhZ05h
bWUoYmxvY2txdW90ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVu
dC0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50
IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dE5vZGVCZWZvcmVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZWRp
dGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2VydE5vZGVCZWZvcgogCiB2b2lk
IEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBOb2RlKiBwYXJlbnQg
PSBtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
bV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUv
ZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKG1f
dGV4dDEtPm5leHRTaWJsaW5nKCkgIT0gbV90ZXh0MikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Tm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFy
ZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC02Miw3
ICs2Miw3IEBAIHZvaWQgSm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgaWYg
KG1fdGV4dDEtPnBhcmVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogcGFy
ZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcAkocmV2aXNpb24gNjk4
MjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQ6OmRvVW4KIAogICAgIFJlZlB0cjxOb2RlPiBhdENoaWxkID0gbV9hdENoaWxk
LnJlbGVhc2UoKTsKIAotICAgIE5vZGUqIHBhcmVudCA9IG1fZWxlbWVudDItPnBhcmVudCgpOwor
ICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fZWxlbWVudDItPnBhcmVudCgpOwogICAgIGlm
ICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2
OTgyNykKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21t
YW5kKFBhcwogCiB2b2lkIFJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBOb2Rl
KiBwYXJlbnQgPSBtX25vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBtX25vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0LDcgKzU0LDcgQEAg
dm9pZCBSZW1vdmVOb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgUmVtb3ZlTm9kZUNvbW1h
bmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IHBhcmVudCA9IG1fcGFyZW50LnJl
bGVhc2UoKTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gbV9wYXJlbnQucmVs
ZWFzZSgpOwogICAgIFJlZlB0cjxOb2RlPiByZWZDaGlsZCA9IG1fcmVmQ2hpbGQucmVsZWFzZSgp
OwogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCShyZXZpc2lv
biA2OTgyNykKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRvVW5h
cHBseSgpOwogCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9w
YXJlbnQ7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fcGFyZW50OwogICAgIFJlZlB0cjxO
b2RlPiBtX3JlZkNoaWxkOyAgICAKIH07CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSwxOCArNDEsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6UmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQotICAgIDogU2ltcGxlRWRpdENvbW1h
bmQobm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fbm9kZShub2RlKQorUmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQ6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kKFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGVsZW1lbnQpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVu
dCgpKQorICAgICwgbV9lbGVtZW50VG9SZXBsYWNlKGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG1f
bm9kZSk7CisgICAgQVNTRVJUKG1fZWxlbWVudFRvUmVwbGFjZSk7CiB9CiAKLXN0YXRpYyB2b2lk
IHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENoaWxkcmVuKE5vZGUqIG5ld05vZGUs
IE5vZGUqIG5vZGVUb1JlcGxhY2UpCitzdGF0aWMgdm9pZCBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0
dHJpYnV0ZXNBbmRDaGlsZHJlbihIVE1MRWxlbWVudCogbmV3Tm9kZSwgSFRNTEVsZW1lbnQqIG5v
ZGVUb1JlcGxhY2UpCiB7CiAgICAgQVNTRVJUKG5vZGVUb1JlcGxhY2UtPmluRG9jdW1lbnQoKSk7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogcGFyZW50Tm9kZSA9IG5vZGVU
b1JlcGxhY2UtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0g
bm9kZVRvUmVwbGFjZS0+cGFyZW50Tm9kZSgpOwogICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9y
ZShuZXdOb2RlLCBub2RlVG9SZXBsYWNlLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiAKQEAgLTcx
LDE4ICs3MSwxOCBAQCBzdGF0aWMgdm9pZCBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0CiAK
IHZvaWQgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICgh
bV9ub2RlLT5pbkRvY3VtZW50KCkpCisgICAgaWYgKCFtX2VsZW1lbnRUb1JlcGxhY2UtPmluRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9zcGFuRWxlbWVudCkKLSAgICAg
ICAgbV9zcGFuRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwg
c3BhblRhZyk7Ci0gICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4o
bV9zcGFuRWxlbWVudC5nZXQoKSwgbV9ub2RlLmdldCgpKTsKKyAgICAgICAgbV9zcGFuRWxlbWVu
dCA9IGNyZWF0ZUhUTUxFbGVtZW50KG1fZWxlbWVudFRvUmVwbGFjZS0+ZG9jdW1lbnQoKSwgc3Bh
blRhZyk7CisgICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4obV9z
cGFuRWxlbWVudC5nZXQoKSwgbV9lbGVtZW50VG9SZXBsYWNlLmdldCgpKTsKIH0KIAogdm9pZCBS
ZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBpZiAoIW1fc3Bh
bkVsZW1lbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHN3YXBJbk5vZGVQ
cmVzZXJ2aW5nQXR0cmlidXRlc0FuZENoaWxkcmVuKG1fbm9kZS5nZXQoKSwgbV9zcGFuRWxlbWVu
dC5nZXQoKSk7CisgICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4o
bV9lbGVtZW50VG9SZXBsYWNlLmdldCgpLCBtX3NwYW5FbGVtZW50LmdldCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmgJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIzICszNywy
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxFbGVtZW50OwogCi0vLyBNb3Jl
IGFjY3VyYXRlbHksIHRoaXMgaXMgUmVwbGFjZU5vZGVXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJl
bkFuZEF0dHJpYnV0ZXNDb21tYW5kCisvLyBNb3JlIGFjY3VyYXRlbHksIHRoaXMgaXMgUmVwbGFj
ZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXNDb21tYW5kCiBj
bGFzcyBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFu
ZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBlbGVtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZChub2RlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoZWxlbWVudCkpOwogICAgIH0KIAogICAgIEhUTUxF
bGVtZW50KiBzcGFuRWxlbWVudCgpIHsgcmV0dXJuIG1fc3BhbkVsZW1lbnQuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKLSAgICBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+
KTsKKyAgICBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNzUmVmUHRyPEhUTUxFbGVtZW50
Pik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1Vu
YXBwbHkoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPEhUTUxFbGVt
ZW50PiBtX2VsZW1lbnRUb1JlcGxhY2U7CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX3NwYW5F
bGVtZW50OwogfTsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihOb2RlKik7CiAKIHByaXZh
dGU6Ci0gICAgUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRGcmFnbWVudEZvclRlc3RSZW5kZXJpbmco
Tm9kZSogY29udGV4dCk7CisgICAgUGFzc1JlZlB0cjxTdHlsZWRFbGVtZW50PiBpbnNlcnRGcmFn
bWVudEZvclRlc3RSZW5kZXJpbmcoTm9kZSogY29udGV4dCk7CiAgICAgdm9pZCByZW1vdmVVbnJl
bmRlcmVkTm9kZXMoTm9kZSopOwotICAgIHZvaWQgcmVzdG9yZVRlc3RSZW5kZXJpbmdOb2Rlc1Rv
RnJhZ21lbnQoTm9kZSopOworICAgIHZvaWQgcmVzdG9yZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJh
Z21lbnQoU3R5bGVkRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlSW50ZXJjaGFuZ2VOb2RlcyhO
b2RlKik7CiAgICAgCiAgICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSwgTm9kZSogcmVmTm9kZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgUmVwbGFjZW1lbnRGcmFn
bWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgIH0KIAogICAgIE5vZGUqIHN0eWxlTm9kZSA9
IHNlbGVjdGlvbi5iYXNlKCkubm9kZSgpOwotICAgIFJlZlB0cjxOb2RlPiBob2xkZXIgPSBpbnNl
cnRGcmFnbWVudEZvclRlc3RSZW5kZXJpbmcoc3R5bGVOb2RlKTsKKyAgICBSZWZQdHI8U3R5bGVk
RWxlbWVudD4gaG9sZGVyID0gaW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVuZGVyaW5nKHN0eWxlTm9k
ZSk7CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNl
bGVjdGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgU3RyaW5nIHRleHQgPSBwbGFpblRleHQocmFuZ2UuZ2V0KCkpOwpAQCAtMjA4LDcg
KzIwOCw3IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlTm9kZShQYXMKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBOb2RlICpwYXJlbnQgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50
Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yMjIs
NyArMjIyLDcgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjppbnNlcnROb2RlQmVmbwogICAg
IGlmICghbm9kZSB8fCAhcmVmTm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBO
b2RlKiBwYXJlbnQgPSByZWZOb2RlLT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIApAQCAtMjMxLDkgKzIzMSw5IEBAIHZvaWQgUmVwbGFjZW1lbnRG
cmFnbWVudDo6aW5zZXJ0Tm9kZUJlZm8KICAgICBBU1NFUlQoZWMgPT0gMCk7CiB9CiAKLVBhc3NS
ZWZQdHI8Tm9kZT4gUmVwbGFjZW1lbnRGcmFnbWVudDo6aW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVu
ZGVyaW5nKE5vZGUqIGNvbnRleHQpCitQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IFJlcGxhY2Vt
ZW50RnJhZ21lbnQ6Omluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZyhOb2RlKiBjb250ZXh0
KQogewotICAgIE5vZGUqIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCk7CisgICAgSFRNTEVsZW1l
bnQqIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCk7CiAgICAgaWYgKCFib2R5KQogICAgICAgICBy
ZXR1cm4gMDsKIApAQCAtMjY2LDcgKzI2Niw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gUmVwbGFjZW1l
bnRGcmFnbWVudDo6aW4KICAgICByZXR1cm4gaG9sZGVyLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBS
ZXBsYWNlbWVudEZyYWdtZW50OjpyZXN0b3JlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudChO
b2RlICpob2xkZXIpCit2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlc3RvcmVUZXN0UmVuZGVy
aW5nTm9kZXNUb0ZyYWdtZW50KFN0eWxlZEVsZW1lbnQqIGhvbGRlcikKIHsKICAgICBpZiAoIWhv
bGRlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNjI4LDcgKzYyOCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWwKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHNvdXJjZURvY3VtZW50U3R5bGUg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHNvdXJjZURvY3VtZW50U3R5bGVTcGFuKS0+Z2V0
SW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKLSAgICBOb2RlKiBjb250ZXh0ID0gc291cmNlRG9j
dW1lbnRTdHlsZVNwYW4tPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBjb250ZXh0
ID0gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4tPnBhcmVudE5vZGUoKTsKICAgICAKICAgICAvLyBJ
ZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJsb2Nr
cXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLAogICAgIC8v
IHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJyaWRlIHRob3Nl
IGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTMwOTg2PiBh
bmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgpAQCAtNzEwLDEzICs3MTAsMTUgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y29weVN0eWxlVAogICAgIGZvciAoTm9kZSogY2hpbGRO
b2RlID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNo
aWxkTm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGROb2RlLT5pc1RleHRO
b2RlKCkgfHwgIWlzQmxvY2soY2hpbGROb2RlKSB8fCBjaGlsZE5vZGUtPmhhc1RhZ05hbWUocHJl
VGFnKSkgewogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBwdXQgYSBzcGFuIHRhZyBhcm91
bmQgdGhlIGNoaWxkIG5vZGUuCi0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3U3BhbiA9IHBh
cmVudE5vZGUtPmNsb25lTm9kZShmYWxzZSk7Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuZXdTcGFuLmdldCgpKSwgc3R5bGVBdHRyLCBwYXJlbnRT
dHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gcGFy
ZW50Tm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdOb2RlLT5o
YXNUYWdOYW1lKHNwYW5UYWcpKTsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBuZXdTcGFuID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuZXdOb2RlLmdldCgpKTsKKyAgICAgICAgICAgIHNl
dE5vZGVBdHRyaWJ1dGUobmV3U3Bhbiwgc3R5bGVBdHRyLCBwYXJlbnRTdHlsZS0+Y3NzVGV4dCgp
KTsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdTcGFuLCBjaGlsZE5vZGUpOwogICAg
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgICAgICBuZXdTcGFuLT5hcHBl
bmRDaGlsZChjaGlsZE5vZGUsIGVjKTsKICAgICAgICAgICAgIEFTU0VSVCghZWMpOwotICAgICAg
ICAgICAgY2hpbGROb2RlID0gbmV3U3Bhbi5nZXQoKTsKKyAgICAgICAgICAgIGNoaWxkTm9kZSA9
IG5ld1NwYW47CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGROb2RlLT5pc0hUTUxFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhbmQgbWVyZ2UgdGhl
bSBpbnRvIHRoZSBjaGlsZCBub2RlLiAgV2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZQogICAgICAg
ICAgICAgLy8gZXhpc3Rpbmcgc3R5bGVzLCBzbyBkb24ndCBjbG9iYmVyIG9uIG1lcmdlLgpAQCAt
MTIxMSw3ICsxMjEzLDcgQEAgTm9kZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFz
TAogCiAgICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBsaXN0SXRlbSA9IGxpc3RFbGVtZW50LT5maXJz
dENoaWxkKCkpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGxpc3RF
bGVtZW50LT5yZW1vdmVDaGlsZChsaXN0SXRlbS5nZXQoKSwgZWMpOworICAgICAgICBzdGF0aWNf
Y2FzdDxDb250YWluZXJOb2RlKj4obGlzdEVsZW1lbnQuZ2V0KCkpLT5yZW1vdmVDaGlsZChsaXN0
SXRlbS5nZXQoKSwgZWMpOwogICAgICAgICBBU1NFUlQoIWVjKTsKICAgICAgICAgaWYgKGlzU3Rh
cnQgfHwgaXNNaWRkbGUpCiAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGxpc3RJdGVtLCBs
YXN0Tm9kZSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiwxMSArMTIyMiwxMCBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNlbGVjdEZyYW1lRWxlCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdldCB0
byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3IgZXZlbiA8b2JqZWN0PikgZWxlbWVudCBpbiB0
aGUgcGFyZW50IGZyYW1lLgotICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
OwotICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IGRvYy0+b3duZXJFbGVtZW50KCk7CisgICAg
RWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50
KCk7CiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBOb2RlKiBv
d25lckVsZW1lbnRQYXJlbnQgPSBvd25lckVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICBDb250
YWluZXJOb2RlKiBvd25lckVsZW1lbnRQYXJlbnQgPSBvd25lckVsZW1lbnQtPnBhcmVudE5vZGUo
KTsKICAgICBpZiAoIW93bmVyRWxlbWVudFBhcmVudCkKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhl
Y3V0ZUFwcGx5KCkKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKLSAgICBO
b2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQyLT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50IHx8
ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBwYXJl
bnQtPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLmdldCgpLCBtX2VsZW1lbnQyLmdldCgpLCBlYyk7
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRU
ZXh0Tm9kZUNvbW1hCiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewot
ICAgIE5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJO
b2RlKiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQgfHwg
IXBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04Nyw3
ICs4Nyw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvUmVhcHBseSgpCiAgICAgaWYg
KCFtX3RleHQxIHx8ICFtX3RleHQyKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlKiBwYXJl
bnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
bV90ZXh0Mi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29u
dGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw5ICsxNTQsOSBAQCB1bnNpZ25lZCBCaXRTdGFj
azo6c2l6ZSgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tCiAKLXN0YXRpYyBpbmxpbmUgTm9kZSogcGFy
ZW50Q3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5vZGUqIG5vZGUpCitzdGF0aWMgaW5saW5lIENv
bnRhaW5lck5vZGUqIHBhcmVudENyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhOb2RlKiBub2RlKQog
ewotICAgIGlmIChOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpCisgICAgaWYgKENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKSkKICAgICAgICAgcmV0dXJu
IHBhcmVudDsKICAgICByZXR1cm4gbm9kZS0+c2hhZG93UGFyZW50Tm9kZSgpOwogfQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczOSw3ICs3MzksNyBAQCBIVE1M
RWxlbWVudCogZW5jbG9zaW5nTGlzdChOb2RlKiBub2RlKQogICAgICAgICAKICAgICBOb2RlKiBy
b290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChQb3NpdGlvbihub2RlLCAwKSk7CiAgICAgCi0gICAg
Zm9yIChOb2RlKiBuID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgp
KSB7CisgICAgZm9yIChDb250YWluZXJOb2RlKiBuID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBuOyBu
ID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8
fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG4pOwogICAgICAgICBpZiAobiA9PSByb290KQpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgzNCwxMCArODM0LDEwIEBAIHN0YXRpYyBOb2RlKiBzZXJpYWxpemVOb2Rl
cyhTdHlsZWRNYXJrdXAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gU3Vycm91bmQg
dGhlIGN1cnJlbnRseSBhY2N1bXVsYXRlZCBtYXJrdXAgd2l0aCBtYXJrdXAgZm9yIGFuY2VzdG9y
cyB3ZSBuZXZlciBvcGVuZWQgYXMgd2UgbGVhdmUgdGhlIHN1YnRyZWUocykgcm9vdGVkIGF0IHRo
b3NlIGFuY2VzdG9ycy4KLSAgICAgICAgICAgIE5vZGUqIG5leHRQYXJlbnQgPSBuZXh0ID8gbmV4
dC0+cGFyZW50Tm9kZSgpIDogMDsKKyAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG5leHRQYXJl
bnQgPSBuZXh0ID8gbmV4dC0+cGFyZW50Tm9kZSgpIDogMDsKICAgICAgICAgICAgIGlmIChuZXh0
ICE9IHBhc3RFbmQgJiYgbiAhPSBuZXh0UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgTm9kZSog
bGFzdEFuY2VzdG9yQ2xvc2VkT3JTZWxmID0gbi0+aXNEZXNjZW5kYW50T2YobGFzdENsb3NlZCkg
PyBsYXN0Q2xvc2VkIDogbjsKLSAgICAgICAgICAgICAgICBmb3IgKE5vZGUgKnBhcmVudCA9IGxh
c3RBbmNlc3RvckNsb3NlZE9yU2VsZi0+cGFyZW50KCk7IHBhcmVudCAmJiBwYXJlbnQgIT0gbmV4
dFBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IGxhc3RBbmNlc3RvckNsb3NlZE9yU2VsZi0+
cGFyZW50KCk7IHBhcmVudCAmJiBwYXJlbnQgIT0gbmV4dFBhcmVudDsgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWxsIGFuY2VzdG9ycyB0
aGF0IGFyZW4ndCBpbiB0aGUgYW5jZXN0b3JzVG9DbG9zZSBsaXN0IHNob3VsZCBlaXRoZXIgYmUg
YSkgdW5yZW5kZXJlZDoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQtPnJlbmRlcmVy
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTg2MSw3ICs4NjEsNyBA
QCBzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgaWYgKGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodGJvZHlUYWcp
IHx8IGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodHJUYWcpKSB7Ci0gICAgICAgIE5v
ZGUqIHRhYmxlID0gY29tbW9uQW5jZXN0b3JCbG9jay0+cGFyZW50Tm9kZSgpOworICAgICAgICBD
b250YWluZXJOb2RlKiB0YWJsZSA9IGNvbW1vbkFuY2VzdG9yQmxvY2stPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgd2hpbGUgKHRhYmxlICYmICF0YWJsZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCiAg
ICAgICAgICAgICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2RlKCk7CiAKQEAgLTEwNzEsNyArMTA3
MSw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKIAogICAgIGlm
IChzcGVjaWFsQ29tbW9uQW5jZXN0b3IgJiYgbGFzdENsb3NlZCkgewogICAgICAgICAvLyBBbHNv
IGluY2x1ZGUgYWxsIG9mIHRoZSBhbmNlc3RvcnMgb2YgbGFzdENsb3NlZCB1cCB0byB0aGlzIHNw
ZWNpYWwgYW5jZXN0b3IuCi0gICAgICAgIGZvciAoTm9kZSogYW5jZXN0b3IgPSBsYXN0Q2xvc2Vk
LT5wYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICAgICAgZm9yIChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IGxhc3RDbG9zZWQt
PnBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUo
KSkgewogICAgICAgICAgICAgaWYgKGFuY2VzdG9yID09IGZ1bGx5U2VsZWN0ZWRSb290ICYmICFj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBmdWxseVNlbGVjdGVkUm9vdFN0eWxlID0gc3R5bGVGcm9tTWF0
Y2hlZFJ1bGVzQW5kSW5saW5lRGVjbChmdWxseVNlbGVjdGVkUm9vdCk7CiAKQEAgLTExMDYsNyAr
MTEwNiw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAgICB9
CiAKICAgICAvLyBBZGQgYSB3cmFwcGVyIHNwYW4gd2l0aCB0aGUgc3R5bGVzIHRoYXQgYWxsIG9m
IHRoZSBub2RlcyBpbiB0aGUgbWFya3VwIGluaGVyaXQuCi0gICAgTm9kZSogcGFyZW50T2ZMYXN0
Q2xvc2VkID0gbGFzdENsb3NlZCA/IGxhc3RDbG9zZWQtPnBhcmVudE5vZGUoKSA6IDA7CisgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50T2ZMYXN0Q2xvc2VkID0gbGFzdENsb3NlZCA/IGxhc3RDbG9z
ZWQtPnBhcmVudE5vZGUoKSA6IDA7CiAgICAgaWYgKHBhcmVudE9mTGFzdENsb3NlZCAmJiBwYXJl
bnRPZkxhc3RDbG9zZWQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVB
dFBvc2l0aW9uKFBvc2l0aW9uKHBhcmVudE9mTGFzdENsb3NlZCwgMCkpOwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQg
SFRNTEFyZWFFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmEKICAgICBpZiAoIWlzRm9jdXNhYmxl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2Rl
KCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICgh
cGFyZW50IHx8ICFwYXJlbnQtPmhhc1RhZ05hbWUobWFwVGFnKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Niw3ICs0NTYsNyBAQCB2
b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KSB7CiAgICAgICAg
IGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CkBAIC01
MDcsOSArNTA3LDggQEAgTm9kZSogSFRNTEVsZW1lbnQ6Omluc2VydEFkamFjZW50KGNvbnN0IAog
ICAgIC8vIE9wZXJhIGFsc28gYXBwZWFycyB0byBkaXNhbGxvdyBzdWNoIHVzYWdlLgogCiAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlQmVnaW4iKSkgewotICAgICAgICBp
ZiAoTm9kZSogcCA9IHBhcmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHAtPmluc2VydEJlZm9y
ZShuZXdDaGlsZCwgdGhpcywgZWMpID8gbmV3Q2hpbGQgOiAwOwotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gdGhpcy0+cGFyZW50KCk7CisgICAgICAg
IHJldHVybiAocGFyZW50ICYmIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCB0aGlzLCBl
YykpID8gbmV3Q2hpbGQgOiAwOwogICAgIH0KIAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh3
aGVyZSwgImFmdGVyQmVnaW4iKSkKQEAgLTUxOSw5ICs1MTgsOCBAQCBOb2RlKiBIVE1MRWxlbWVu
dDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgCiAgICAgICAgIHJldHVybiBhcHBlbmRDaGlsZChuZXdD
aGlsZCwgZWMpID8gbmV3Q2hpbGQgOiAwOwogCiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHdo
ZXJlLCAiYWZ0ZXJFbmQiKSkgewotICAgICAgICBpZiAoTm9kZSogcCA9IHBhcmVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHAtPmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcoKSwg
ZWMpID8gbmV3Q2hpbGQgOiAwOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gdGhpcy0+cGFyZW50KCk7CisgICAgICAgIHJldHVybiAocGFyZW50ICYm
IHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZygpLCBlYykpID8gbmV3
Q2hpbGQgOiAwOwogICAgIH0KICAgICAKICAgICAvLyBJRSB0aHJvd3MgQ09NIEV4Y2VwdGlvbiBF
X0lOVkFMSURBUkc7IHRoaXMgaXMgdGhlIGJlc3QgRE9NIGV4Y2VwdGlvbiBhbHRlcm5hdGl2ZS4K
QEAgLTU0Niw3ICs1NDQsNyBAQCBFbGVtZW50KiBIVE1MRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRF
bGVtCiBzdGF0aWMgRWxlbWVudCogY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24oY29uc3QgU3Ry
aW5nJiB3aGVyZSwgRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlQmVnaW4iKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZSh3aGVyZSwgImFmdGVyRW5kIikpIHsKLSAgICAgICAgTm9kZSogcGFyZW50ID0gZWxl
bWVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBlbGVt
ZW50LT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0RvY3Vt
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtNzkzLDkgKzc5MSwxMCBAQCBSZW5kZXJPYmpl
Y3QqIEhUTUxFbGVtZW50OjpjcmVhdGVSZW5kZXJlCiAKIEhUTUxGb3JtRWxlbWVudCogSFRNTEVs
ZW1lbnQ6OmZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdAogewotICAgIGZvciAoTm9kZSogYW5jZXN0
b3IgPSBwYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRO
b2RlKCkpCisgICAgZm9yIChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsg
YW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICBp
ZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoZm9ybVRhZykpCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0KICAgICByZXR1cm4g
MDsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNjk4Mjcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Miw3ICsxOTIsNyBAQCBib29sIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
CiAKICAgICAvLyBJZiBteSBwYXJlbnQgaXMgYW4gPG9iamVjdD4gYW5kIGlzIG5vdCBzZXQgdG8g
dXNlIGZhbGxiYWNrIGNvbnRlbnQsIEkKICAgICAvLyBzaG91bGQgYmUgaWdub3JlZCBhbmQgbm90
IGdldCBhIHJlbmRlcmVyLgotICAgIE5vZGUqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgQ29udGFp
bmVyTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAocCAmJiBwLT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpIHsKICAgICAgICAgQVNTRVJUKHAtPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAo
IXN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4ocCktPnVzZUZhbGxiYWNrQ29udGVudCgp
KSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcg
KzEwNyw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFIKICAgICBp
ZiAoIWlzRGVtb3RlZCgpKQogICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoc3R5bGUpOwogCi0gICAgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsKKyAgICBDb250
YWluZXJOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOwogICAgIFJlbmRlck9iamVjdCogcGFyZW50
UmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGJvb2wgcGFyZW50SXNUYWJsZUVsZW1l
bnRQYXJ0ID0gKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlKCkgJiYgbm9kZS0+aGFzVGFnTmFtZSh0
YWJsZVRhZykpCiAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZVJvdygpICYmIG5v
ZGUtPmhhc1RhZ05hbWUodHJUYWcpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50
LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxGcmFtZVNl
dEVsZW1lbnQ6OmF0dGFjaCgpCiB7CiAgICAgLy8gSW5oZXJpdCBkZWZhdWx0IHNldHRpbmdzIGZy
b20gcGFyZW50IGZyYW1lc2V0CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGR5bmFtaWMuCi0g
ICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgp
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkgewogICAgICAgICAgICAgSFRNTEZyYW1lU2V0RWxlbWVu
dCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50Kj4obm9kZSk7CiAg
ICAgICAgICAgICBpZiAoIWZyYW1lQm9yZGVyU2V0KQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEhUTUxJbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoCiB7CiAgICAgaWYgKCFtX2Zvcm0pIHsKICAgICAgICAg
Ly8gbV9mb3JtIGNhbiBiZSBub24tbnVsbCBpZiBpdCB3YXMgc2V0IGluIGNvbnN0cnVjdG9yLgot
ICAgICAgICBmb3IgKE5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpOyBhbmNlc3RvcjsgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGZvciAoQ29udGFpbmVy
Tm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFt
ZShmb3JtVGFnKSkgewogICAgICAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudCo+KGFuY2VzdG9yKTsKICAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVy
SW1nRWxlbWVudCh0aGlzKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkocmV2
aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTExlZ2Vu
ZEVsZW1lbnQ6OmYKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50Ojph
c3NvY2lhdGVkQ29udHJvbCgpCiB7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGZpZWxkc2V0
IGJlbG9uZ2luZyB0byB0aGlzIGxlZ2VuZC4KLSAgICBOb2RlKiBmaWVsZHNldCA9IHBhcmVudE5v
ZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKICAgICB3
aGlsZSAoZmllbGRzZXQgJiYgIWZpZWxkc2V0LT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSkKICAg
ICAgICAgZmllbGRzZXQgPSBmaWVsZHNldC0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghZmllbGRz
ZXQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgy
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0CiAKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7
Ci0gICAgTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHNl
bGVjdCA9IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1Rh
Z05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7
CiAgICAgaWYgKHNlbGVjdCkKQEAgLTEyMyw3ICsxMjMsNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3Vw
RWxlbWVudDo6Z3JvdXBMYWJlbFRlCiAgICAgCiBIVE1MU2VsZWN0RWxlbWVudCogSFRNTE9wdEdy
b3VwRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3QKIHsKLSAgICBOb2RlKiBzZWxl
Y3QgPSBwYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9k
ZSgpOwogICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShzZWxlY3RUYWcp
KQogICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcg
QEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKAogCiBIVE1MU2VsZWN0
RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7
Ci0gICAgTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHNl
bGVjdCA9IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAoc2VsZWN0ICYmICEoc2VsZWN0LT5oYXNU
YWdOYW1lKHNlbGVjdFRhZykgfHwgc2VsZWN0LT5oYXNUYWdOYW1lKGtleWdlblRhZykpKQogICAg
ICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKIApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ2VsbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MVGFibGVDZWxsRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBA
QCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpwYXJzZU1hcHBlZEF0CiAvLyB1c2VkIGJ5IHRh
YmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0
YWJsZS4KIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+JiByZXN1bHRzKQogewot
ICAgIE5vZGUqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVu
dE5vZGUoKTsKICAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCiAgICAg
ICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwKQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVDb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ29sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9p
ZCBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0cgogewogICAgIGlmICghaGFzTG9j
YWxOYW1lKGNvbGdyb3VwVGFnKSkKICAgICAgICAgcmV0dXJuOwotICAgIE5vZGUqIHAgPSBwYXJl
bnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKICAgICB3aGls
ZSAocCAmJiAhcC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCiAgICAgICAgIHAgPSBwLT5wYXJlbnRO
b2RlKCk7CiAgICAgaWYgKCFwKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkocmV2
aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1M
VGFibGVFbGVtZW50CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBOb2RlKiBwYXJlbnQ7CisgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50OwogICAgIGlmIChsYXN0Um93KQogICAgICAgICBwYXJlbnQg
PSByb3cgPyByb3ctPnBhcmVudCgpIDogbGFzdFJvdy0+cGFyZW50KCk7CiAgICAgZWxzZSB7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCBQYXNzUmVmUHRyPEhUTUxUYWJsZVJvd0VsZW1lbnQ+IEhUTUxUYWJsCiAK
IGludCBIVE1MVGFibGVSb3dFbGVtZW50Ojpyb3dJbmRleCgpIGNvbnN0CiB7Ci0gICAgTm9kZSAq
dGFibGUgPSBwYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogdGFibGUgPSBwYXJlbnRO
b2RlKCk7CiAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHRhYmxlID0g
dGFibGUtPnBhcmVudE5vZGUoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25F
bGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIFBhc3NSZWZQ
dHI8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+IEhUTUwKIC8vIHVzZWQgYnkgdGFibGUgcm93IGdy
b3VwcyB0byBzaGFyZSBzdHlsZSBkZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUu
CiB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNscyhWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiYgcmVzdWx0cykKIHsKLSAg
ICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHAgPSBwYXJlbnRO
b2RlKCk7CiAgICAgd2hpbGUgKHAgJiYgIXAtPmhhc1RhZ05hbWUodGFibGVUYWcpKQogICAgICAg
ICBwID0gcC0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODUsNyArNDg1
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShsb25nIAogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50
Tm9kZSgpOwogICAgIGlmICghcGFyZW50Tm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01MjAs
NyArNTIwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZShsbwogICAg
ICAgICBuZXdFbGVtLT5hcHBlbmRDaGlsZChjaGlsZCwgZWMpOwogCiAgICAgLy8gUmVwbGFjZSB0
aGUgb2xkIG5vZGUgd2l0aCB0aGUgbmV3IG5vZGUKLSAgICBOb2RlKiBwYXJlbnQgPSBvbGROb2Rl
LT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0VsZW0sIG9sZE5vZGUtPm5l
eHRTaWJsaW5nKCksIGVjKTsKICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG9sZE5vZGUsIGVjKTsK
IApAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRN
TChsb24KIAogICAgIGJvb2wgY2hpbGRyZW5SZXF1ZXN0ZWQgPSBtX2NoaWxkcmVuUmVxdWVzdGVk
LmNvbnRhaW5zKG5vZGVJZCk7CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCk7Ci0gICAgTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
CiAgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pihub2RlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTEwMzQsOCArMTAzNCw4IEBA
IHVuc2lnbmVkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckNoaWxkTm8KIAogTm9kZSogSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShOb2RlKiBub2RlKQogewotICAgIE5vZGUqIHBh
cmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFKQorICAgIENvbnRhaW5lck5vZGUqIHBhcmVu
dCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNEb2N1
bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4ocGFyZW50
KS0+b3duZXJFbGVtZW50KCk7CiAgICAgcmV0dXJuIHBhcmVudDsKIH0KQEAgLTEwNzYsNyArMTA3
Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUKICAgICAvLyBX
ZSBjb3VsZCBiZSBhdHRhY2hpbmcgZXhpc3Rpbmcgc3VidHJlZS4gRm9yZ2V0IHRoZSBiaW5kaW5n
cy4KICAgICB1bmJpbmQobm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKLSAgICBOb2Rl
KiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGxvbmcgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlmIHBhcmVudCBpcyBub3QgbWFw
cGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQpAQCAtMTExNCw3ICsxMTE0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZQogICAgICAgICB9IHdoaWxlICghc3Rh
Y2suaXNFbXB0eSgpKTsKICAgICB9CiAKLSAgICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnRO
b2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgIGxvbmcgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAg
ICAgLy8gSWYgcGFyZW50IGlzIG5vdCBtYXBwZWQgeWV0IC0+IGlnbm9yZSB0aGUgZXZlbnQuCiAg
ICAgaWYgKCFwYXJlbnRJZCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA2OTgy
NykKKysrIFdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NzAsNyArMzcwLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRE9NU2VsZWN0aW9uOjpnZXRSYW5nZQog
ICAgIEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7CiAKICAgICBpZiAoTm9kZSogc2hhZG93QW5j
ZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihtX2ZyYW1lKSkgewotICAgICAgICBOb2Rl
KiBjb250YWluZXIgPSBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZSgpOworICAgICAgICBDb250
YWluZXJOb2RlKiBjb250YWluZXIgPSBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAg
ICAgICBpbnQgb2Zmc2V0ID0gc2hhZG93QW5jZXN0b3ItPm5vZGVJbmRleCgpOwogICAgICAgICBy
ZXR1cm4gUmFuZ2U6OmNyZWF0ZShzaGFkb3dBbmNlc3Rvci0+ZG9jdW1lbnQoKSwgY29udGFpbmVy
LCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTsKICAgICB9CkBAIC00NjAsNyArNDYwLDcgQEAg
Ym9vbCBET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZShjb25zdCBObwogICAgIGlmICghbiB8fCBt
X2ZyYW1lLT5kb2N1bWVudCgpICE9IG4tPmRvY3VtZW50KCkgfHwgc2VsZWN0aW9uLT5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTm9kZSogcGFyZW50Tm9kZSA9IG4tPnBh
cmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbi0+cGFyZW50Tm9k
ZSgpOwogICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG4tPm5vZGVJbmRleCgpOwogICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVu
dFN0b3AuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0dyYWRpZW50U3RvcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBS
ZW5kZXJTVkdHcmFkaWVudFN0b3A6OmxheW91dCgpCiAKIFNWR0dyYWRpZW50RWxlbWVudCogUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wOjpncmFkaWVudEVsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUq
IHBhcmVudE5vZGUgPSBub2RlKCktPnBhcmVudCgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVu
dE5vZGUgPSBub2RlKCktPnBhcmVudCgpOwogICAgIGlmIChwYXJlbnROb2RlLT5oYXNUYWdOYW1l
KGxpbmVhckdyYWRpZW50VGFnKSB8fCBwYXJlbnROb2RlLT5oYXNUYWdOYW1lKHJhZGlhbEdyYWRp
ZW50VGFnKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0dyYWRpZW50RWxlbWVudCo+
KHBhcmVudE5vZGUpOwogICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9u
IDY5ODI3KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw3ICsxMTYsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6OnNldFhtbGJhc2UoY29uc3QgU3RyaW5n
CiAKIFNWR1NWR0VsZW1lbnQqIFNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCgpIGNvbnN0CiB7
Ci0gICAgTm9kZSogbiA9IGlzU2hhZG93Tm9kZSgpID8gY29uc3RfY2FzdDxTVkdFbGVtZW50Kj4o
dGhpcyktPnNoYWRvd1BhcmVudE5vZGUoKSA6IHBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJO
b2RlKiBuID0gaXNTaGFkb3dOb2RlKCkgPyBjb25zdF9jYXN0PFNWR0VsZW1lbnQqPih0aGlzKS0+
c2hhZG93UGFyZW50Tm9kZSgpIDogcGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChuKSB7CiAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKQogICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihuKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBT
VkdFbGVtZW50KiBTVkdFbGVtZW50Ojp2aWV3cG9ydEVsZW1lbnQoCiB7CiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBuZWVkcyBzaGFkb3cgdHJlZSBzdXBwb3J0IC0gYXMgUmVuZGVyU1ZHQ29udGFpbmVy
IHVzZXMgdGhpcyBmdW5jdGlvbgogICAgIC8vIHRvIGRldGVybWluZSB0aGUgIm92ZXJmbG93IiBw
cm9wZXJ0eS4gPHVzZT4gb24gPHN5bWJvbD4gd291bGRuJ3Qgd29yayBvdGhlcndoaXNlLgotICAg
IE5vZGUqIG4gPSBpc1NoYWRvd05vZGUoKSA/IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMp
LT5zaGFkb3dQYXJlbnROb2RlKCkgOiBwYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSog
biA9IGlzU2hhZG93Tm9kZSgpID8gY29uc3RfY2FzdDxTVkdFbGVtZW50Kj4odGhpcyktPnNoYWRv
d1BhcmVudE5vZGUoKSA6IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAobikgewogICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSB8fCBuLT5oYXNUYWdOYW1lKFNWR05h
bWVzOjppbWFnZVRhZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obik7CkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHRkVMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvc3ZnL1NW
R0ZFTGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lk
IFNWR0ZFTGlnaHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuCiAgICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyCiAgICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cgogICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGltaXRpbmdDb25lQW5nbGVBdHRyKSB7Ci0gICAgICAgIGlmIChOb2RlKiBwYXJlbnROb2Rl
ID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBw
YXJlbnQoKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHBhcmVudE5v
ZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlz
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSkKICAgICAgICAgICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQoCiAgICAgU1ZHRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNl
ciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKIAogICAgIGlm
ICghY2hhbmdlZEJ5UGFyc2VyKSB7Ci0gICAgICAgIGlmIChOb2RlKiBwYXJlbnROb2RlID0gcGFy
ZW50KCkpIHsKKyAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBwYXJlbnQo
KSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHBhcmVudE5vZGUtPnJl
bmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUoKSkKICAgICAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjk4Mjcp
CisrKyBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpzdmdBdHRyaWJ1
dGUKICAgICBpZiAoYXR0ck5hbWUgIT0gU1ZHTmFtZXM6OmluQXR0cikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgTm9kZSogcGFyZW50Tm9kZSA9IHBhcmVudCgpOworICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudE5vZGUgPSBwYXJlbnQoKTsKICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJl
dHVybjsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRm9ybWF0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBTVkdGb250RmFjZUZvcm1h
dEVsZW1lbnQ6OmNoaWxkcmVuQwogICAgIGlmICghcGFyZW50Tm9kZSgpIHx8ICFwYXJlbnROb2Rl
KCktPmhhc1RhZ05hbWUoZm9udF9mYWNlX3VyaVRhZykpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5vZGUoKS0+cGFyZW50Tm9kZSgpOworICAgIENv
bnRhaW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpLT5wYXJlbnROb2RlKCk7CiAgICAg
aWYgKCFhbmNlc3RvciB8fCAhYW5jZXN0b3ItPmhhc1RhZ05hbWUoZm9udF9mYWNlX3NyY1RhZykp
CiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJp
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVt
ZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw5IEBAIHZvaWQgU1ZHRm9udEZh
Y2VVcmlFbGVtZW50OjpjaGlsZHJlbkNoYW4KICAgICBpZiAoIXBhcmVudE5vZGUoKSB8fCAhcGFy
ZW50Tm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRfZmFjZV9zcmNUYWcpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgTm9kZSogZ3JhbmRQYXJlbnQgPSBwYXJlbnROb2RlKCktPnBhcmVudE5vZGUo
KTsKLSAgICBpZiAoZ3JhbmRQYXJlbnQgJiYgZ3JhbmRQYXJlbnQtPmhhc1RhZ05hbWUoZm9udF9m
YWNlVGFnKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHRm9udEZhY2VFbGVtZW50Kj4oZ3JhbmRQ
YXJlbnQpLT5yZWJ1aWxkRm9udEZhY2UoKTsKKyAgICBDb250YWluZXJOb2RlKiBncmFuZHBhcmVu
dCA9IHBhcmVudE5vZGUoKS0+cGFyZW50Tm9kZSgpOworICAgIGlmIChncmFuZHBhcmVudCAmJiBn
cmFuZHBhcmVudC0+aGFzVGFnTmFtZShmb250X2ZhY2VUYWcpKQorICAgICAgICBzdGF0aWNfY2Fz
dDxTVkdGb250RmFjZUVsZW1lbnQqPihncmFuZHBhcmVudCktPnJlYnVpbGRGb250RmFjZSgpOwog
fQogCiB2b2lkIFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUv
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAg
UGFzc1JlZlB0cjxTVkdHbHlwaEVsZW1lbnQ+IFNWR0dseXBoRWxlbQogCiB2b2lkIFNWR0dseXBo
RWxlbWVudDo6aW52YWxpZGF0ZUdseXBoQ2FjaGUoKQogewotICAgIE5vZGUqIGZvbnROb2RlID0g
cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIGZvbnROb2RlID0gcGFyZW50Tm9kZSgp
OwogICAgIGlmIChmb250Tm9kZSAmJiBmb250Tm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9u
dFRhZykpIHsKICAgICAgICAgaWYgKFNWR0ZvbnRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRm9udEVsZW1lbnQqPihmb250Tm9kZSkpCiAgICAgICAgICAgICBlbGVtZW50LT5pbnZh
bGlkYXRlR2x5cGhDYWNoZSgpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCShyZXZpc2lv
biA2OTgyNykKKysrIFdlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFzc1JlZlB0cjxTVkdIS2VybkVsZW1lbnQ+IFNWR0hLZXJu
RWxlbQogCiB2b2lkIFNWR0hLZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewot
ICAgIE5vZGUqIGZvbnROb2RlID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIGZv
bnROb2RlID0gcGFyZW50Tm9kZSgpOwogICAgIGlmIChmb250Tm9kZSAmJiBmb250Tm9kZS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6Zm9udFRhZykpIHsKICAgICAgICAgaWYgKFNWR0ZvbnRFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihmb250Tm9kZSkpCiAgICAg
ICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlR2x5cGhDYWNoZSgpOwpAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIFNWR0hLZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiAKIHZvaWQgU1ZHSEtl
cm5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBOb2RlKiBmb250Tm9kZSA9
IHBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBmb250Tm9kZSA9IHBhcmVudE5vZGUo
KTsKICAgICBpZiAoZm9udE5vZGUgJiYgZm9udE5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZv
bnRUYWcpKSB7CiAgICAgICAgIGlmIChTVkdGb250RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0ZvbnRFbGVtZW50Kj4oZm9udE5vZGUpKQogICAgICAgICAgICAgZWxlbWVudC0+aW52
YWxpZGF0ZUdseXBoQ2FjaGUoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAkocmV2aXNpb24gNjk4
MjcpCisrKyBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIHN0YXRpYyBib29sIGlzVmlld3BvcnRFbGVtZW50KE5vZGUqIG5vZGUKIFNW
R0VsZW1lbnQqIFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdF
bGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBmb3IgKE5vZGUq
IG4gPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7IG4gJiYgIW4tPmlzRG9jdW1lbnROb2RlKCk7IG4g
PSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUqIG4gPSBlbGVtZW50
LT5wYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKGlz
Vmlld3BvcnRFbGVtZW50KG4pKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihuKTsKICAgICB9CkBAIC01Niw3ICs1Niw3IEBAIFNWR0VsZW1lbnQqIFNWR0xvY2F0
YWJsZTo6ZmFydGhlc3RWaWV3cG8KIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgU1ZHRWxl
bWVudCogZmFydGhlc3QgPSAwOwotICAgIGZvciAoTm9kZSogbiA9IGVsZW1lbnQtPnBhcmVudE5v
ZGUoKTsgbiAmJiAhbi0+aXNEb2N1bWVudE5vZGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewor
ICAgIGZvciAoQ29udGFpbmVyTm9kZSogbiA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsgbjsgbiA9
IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXNWaWV3cG9ydEVsZW1lbnQobikpCiAg
ICAgICAgICAgICBmYXJ0aGVzdCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKTsKICAgICB9
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZv
aWQgU1ZHVXNlRWxlbWVudDo6dXBkYXRlQ29udGFpbmVyT2Zmc2UKICAgICBTVkdFbGVtZW50KiBz
aGFkb3dSb290ID0gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCk7
CiAgICAgQVNTRVJUKHNoYWRvd1Jvb3QpOwogCi0gICAgTm9kZSogcGFyZW50Tm9kZSA9IHNoYWRv
d1Jvb3QtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gc2hh
ZG93Um9vdC0+cGFyZW50Tm9kZSgpOwogICAgIEFTU0VSVChwYXJlbnROb2RlKTsKICAgICBBU1NF
UlQocGFyZW50Tm9kZS0+aXNTVkdFbGVtZW50KCkpOwogICAgIEFTU0VSVChwYXJlbnROb2RlLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjpnVGFnKSk7CkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBTVkdV
c2VFbGVtZW50OjpidWlsZFNoYWRvd0FuZEluc3RhbgogCiAgICAgLy8gRG8gbm90IGJ1aWxkIHRo
ZSBzaGFkb3cvaW5zdGFuY2UgdHJlZSBmb3IgPHVzZT4gZWxlbWVudHMgbGl2aW5nIGluIGEgc2hh
ZG93IHRyZWUuCiAgICAgLy8gVGhlIHdpbGwgYmUgZXhwYW5kZWQgc29vbiBhbnl3YXkgLSBzZWUg
ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoKS4KLSAgICBOb2RlKiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAg
IHdoaWxlIChwYXJlbnQpIHsKICAgICAgICAgaWYgKHBhcmVudC0+aXNTaGFkb3dOb2RlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9u
IDY5ODI3KQorKysgV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCBQYXNzUmVmUHRyPFNWR1ZLZXJuRWxlbWVudD4gU1ZHVktlcm5F
bGVtCiAKIHZvaWQgU1ZHVktlcm5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0g
ICAgTm9kZSogZm9udE5vZGUgPSBwYXJlbnROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogZm9u
dE5vZGUgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKGZvbnROb2RlICYmIGZvbnROb2RlLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpmb250VGFnKSkgewogICAgICAgICBpZiAoU1ZHRm9udEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KGZvbnROb2RlKSkKICAgICAg
ICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVHbHlwaENhY2hlKCk7CkBAIC01NCw3ICs1NCw3IEBA
IHZvaWQgU1ZHVktlcm5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKIAogdm9pZCBTVkdWS2Vy
bkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewotICAgIE5vZGUqIGZvbnROb2RlID0g
cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIGZvbnROb2RlID0gcGFyZW50Tm9kZSgp
OwogICAgIGlmIChmb250Tm9kZSAmJiBmb250Tm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9u
dFRhZykpIHsKICAgICAgICAgaWYgKFNWR0ZvbnRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRm9udEVsZW1lbnQqPihmb250Tm9kZSkpCiAgICAgICAgICAgICBlbGVtZW50LT5pbnZh
bGlkYXRlR2x5cGhDYWNoZSgpOwpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIFNW
R1NNSUxFbGVtZW50OjpyZXNjaGVkdWxlKCkKIFNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0
YXJnZXRFbGVtZW50KCkgY29uc3QKIHsKICAgICBTdHJpbmcgaHJlZiA9IHhsaW5rSHJlZigpOwot
ICAgIE5vZGUqIHRhcmdldCA9IGhyZWYuaXNFbXB0eSgpID8gcGFyZW50Tm9kZSgpIDogZG9jdW1l
bnQoKS0+Z2V0RWxlbWVudEJ5SWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZikpOwor
ICAgIENvbnRhaW5lck5vZGUqIHRhcmdldCA9IGhyZWYuaXNFbXB0eSgpID8gcGFyZW50Tm9kZSgp
IDogZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQo
aHJlZikpOwogICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpOwogICAgIHJldHVybiAw
OwpJbmRleDogV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dtbC9XTUxEb0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvd21s
L1dNTERvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lk
IFdNTERvRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoCiAgICAgaWYgKCFoYXNBdHRyaWJ1
dGUoSFRNTE5hbWVzOjpuYW1lQXR0cikpCiAgICAgICAgIG1fbmFtZSA9IG1fdHlwZTsKIAotICAg
IE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNXTUxFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgV01MRG9FbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgKIAogdm9pZCBXTUxEb0VsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoKQogewotICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAKICAgICBpZiAocGFyZW50ICAm
JiBwYXJlbnQtPmlzV01MRWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChXTUxFdmVudEhhbmRsaW5n
RWxlbWVudCogZXZlbnRIYW5kbGluZ0VsZW1lbnQgPSB0b1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50
KHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihwYXJlbnQpKSkKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TE5vb3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxOb29wRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS93bWwvV01MTm9vcEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgV01MTm9vcEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW4KIHsKICAgICBXTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogCi0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5p
c1dNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxP
cHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTE9wdEdyb3Vw
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS93bWwvV01MT3B0R3JvdXBF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNDkgKzU1LDkgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBXTUxPcHRHcm91cEVsZW1lbnQ6OgogICAgIHJldHVybiBvcHRncm91cDsKIH0KIAot
Ym9vbCBXTUxPcHRHcm91cEVsZW1lbnQ6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5l
d0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvb2wgc2hvdWxkTGF6
eUF0dGFjaCkKLXsKLSAgICBib29sIHJlc3VsdCA9IFdNTEZvcm1Db250cm9sRWxlbWVudDo6aW5z
ZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZDaGlsZCwgZWMsIHNob3VsZExhenlBdHRhY2gpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIFdNTE9wdEdyb3VwRWxlbWVudDo6cmVwbGFjZUNoaWxkKFBhc3NS
ZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywg
Ym9vbCBzaG91bGRMYXp5QXR0YWNoKQotewotICAgIGJvb2wgcmVzdWx0ID0gV01MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZXBsYWNlQ2hpbGQobmV3Q2hpbGQsIG9sZENoaWxkLCBlYywgc2hvdWxkTGF6
eUF0dGFjaCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVjYWxjU2VsZWN0T3B0aW9ucygp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgV01MT3B0R3JvdXBFbGVtZW50OjpyZW1v
dmVDaGlsZChOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgYm9vbCBy
ZXN1bHQgPSBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUNoaWxkKG9sZENoaWxkLCBlYyk7
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVjYWxjU2VsZWN0T3B0aW9ucygpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgV01MT3B0R3JvdXBFbGVtZW50OjphcHBlbmRDaGlsZChQ
YXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCBzaG91bGRM
YXp5QXR0YWNoKQotewotICAgIGJvb2wgcmVzdWx0ID0gV01MRm9ybUNvbnRyb2xFbGVtZW50Ojph
cHBlbmRDaGlsZChuZXdDaGlsZCwgZWMsIHNob3VsZExhenlBdHRhY2gpOwotICAgIGlmIChyZXN1
bHQpCi0gICAgICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIFdNTE9wdEdyb3VwRWxlbWVudDo6cmVtb3ZlQ2hpbGRyZW4oKQotewotICAgIGJv
b2wgcmVzdWx0ID0gV01MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVDaGlsZHJlbigpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCiBzdGF0aWMgaW5saW5lIFdNTFNlbGVjdEVsZW1lbnQqIG93bmVyU2VsZWN0
RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogewotICAgIE5vZGUqIHNlbGVjdCA9IGVsZW1lbnQt
PnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBzZWxlY3QgPSBlbGVtZW50LT5wYXJl
bnROb2RlKCk7CiAgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogCkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxPcHRHcm91cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxPcHRHcm91cEVsZW1lbnQuaAkocmV2aXNpb24gNjk4MjcpCisrKyBXZWJDb3JlL3dtbC9X
TUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIGluc2VydEJlZm9yZShQYXNzUmVm
UHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wg
c2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxk
KFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2Rl
JiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwotICAgIHZpcnR1YWwgYm9vbCByZW1v
dmVDaGlsZChOb2RlKiBjaGlsZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgYm9vbCBh
cHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9v
bCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwotICAgIHZpcnR1YWwgYm9vbCByZW1vdmVDaGls
ZHJlbigpOwotCiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0Fu
eUVsZW1lbnQpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2Vk
QnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFu
Z2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwpJbmRleDogV2ViQ29yZS93bWwvV01MT3B0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5j
cHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBXTUxP
cHRpb25FbGVtZW50OjpmbwogCiBzdGF0aWMgaW5saW5lIFdNTFNlbGVjdEVsZW1lbnQqIG93bmVy
U2VsZWN0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogewotICAgIE5vZGUqIHNlbGVjdCA9IGVs
ZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBzZWxlY3QgPSBlbGVtZW50
LT5wYXJlbnROb2RlKCk7CiAgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1l
KHNlbGVjdFRhZykpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogCklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcAkocmV2aXNpb24gNjk4MjcpCisrKyBX
ZWJDb3JlL3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
MTQgKzQ4LDE0IEBAIHZvaWQgV01MUG9zdGZpZWxkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG8KIHsK
ICAgICBXTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogCi0gICAgTm9kZSogcGFy
ZW50ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aGFzVGFnTmFtZShnb1RhZykpCiAgICAg
ICAgIHN0YXRpY19jYXN0PFdNTEdvRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyUG9zdGZpZWxk
RWxlbWVudCh0aGlzKTsKIH0KIAogdm9pZCBXTUxQb3N0ZmllbGRFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKIHsKLSAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CisgICAgQ29u
dGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmIChwYXJlbnQgJiYgcGFy
ZW50LT5oYXNUYWdOYW1lKGdvVGFnKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50
Kj4ocGFyZW50KS0+ZGVyZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQodGhpcyk7CiAKSW5kZXg6IFdl
YkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTFNldHZhckVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvd21sL1dN
TFNldHZhckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQg
V01MU2V0dmFyRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW0KIHsKICAgICBXTUxFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCgpOwogIAotICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUo
KTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+aXNXTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzAsNyArNzAsNyBAQCB2b2lkIFdNTFNldHZhckVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtCiAK
IHZvaWQgV01MU2V0dmFyRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgTm9k
ZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBh
cmVudE5vZGUoKTsKICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNXTUxFbGVtZW50KCkpIHsK
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihwYXJlbnQpLT5pc1dNTFRhc2tF
bGVtZW50KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxUYXNrRWxlbWVudCo+KHBhcmVu
dCktPmRlcmVnaXN0ZXJWYXJpYWJsZVNldHRlcih0aGlzKTsKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TFRhc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDY5ODI3KQorKysgV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgV01MVGFza0VsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW4KIHsKICAgICBXTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogCi0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5p
c1dNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQg
V01MVGFza0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW4KIAogdm9pZCBXTUxUYXNrRWxlbWVu
dDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9k
ZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAo
cGFyZW50ICYmIHBhcmVudC0+aXNXTUxFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKHBhcmVudC0+
aGFzVGFnTmFtZShhbmNob3JUYWcpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MQW5jaG9y
RWxlbWVudCo+KHBhcmVudCktPmRlcmVnaXN0ZXJUYXNrKHRoaXMpOwpJbmRleDogV2ViQ29yZS93
bWwvV01MVGltZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUaW1l
ckVsZW1lbnQuY3BwCShyZXZpc2lvbiA2OTgyNykKKysrIFdlYkNvcmUvd21sL1dNTFRpbWVyRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBXTUxUaW1lckVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZQogICAgIGlmICh2YWx1ZSgpLnRvSW50KCkgPD0gMCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5pc1dNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NSw3ICs3
NSw3IEBAIHZvaWQgV01MVGltZXJFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKIAogdm9pZCBX
TUxUaW1lckVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewotICAgIE5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2Rl
KCk7CiAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzV01MRWxlbWVudCgpICYmIHBhcmVudC0+
aGFzVGFnTmFtZShjYXJkVGFnKSkgewogICAgICAgICBtX2NhcmQtPnNldEludHJpbnNpY0V2ZW50
VGltZXIoMCk7CiAgICAgICAgIG1fY2FyZCA9IDA7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFN0
ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHJldmlzaW9u
IDY5ODI3KQorKysgV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU1LDExICsyNTUsMTEgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBO
bwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFBhcmVudEF4aXM6CiAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBO
b2RlKiBuID0gc3RhdGljX2Nhc3Q8QXR0cio+KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBFbGVtZW50KiBuID0gc3RhdGljX2Nhc3Q8QXR0cio+KGNvbnRleHQpLT5v
d25lckVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwgUGFyZW50
QXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbiA9IGNvbnRleHQt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0gY29udGV4
dC0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgIGlmIChuICYmIG5vZGVNYXRjaGVzKG4s
IFBhcmVudEF4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBl
bmQobik7CiAgICAgICAgICAgICB9Cg==
</data>
<flag name="review"
          id="60721"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>