<?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>206509</bug_id>
          
          <creation_ts>2020-01-20 13:08:38 -0800</creation_ts>
          <short_desc>API::(User)ContentWorld cleanup</short_desc>
          <delta_ts>2020-01-21 10:43:16 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1608842</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-20 13:08:38 -0800</bug_when>
    <thetext>API::(User)ContentWorld cleanup

- Give them a shared base class for upcoming world
- Reference them by identifier instead of object instance whenever possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608849</commentid>
    <comment_count>1</comment_count>
      <attachid>388253</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-20 13:30:37 -0800</bug_when>
    <thetext>Created attachment 388253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608880</commentid>
    <comment_count>2</comment_count>
      <attachid>388253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 16:12:39 -0800</bug_when>
    <thetext>Comment on attachment 388253
Patch

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

&gt; Source/WebKit/UIProcess/API/APIContentWorld.cpp:73
&gt; +    : ContentWorldBase(API::UserContentWorld::generateIdentifier(), name)

Can write this more simply:

    : ContentWorldBase(generateIdentifier(), name)

Same applies to other calls to generateIdentifier() in other class members.

&gt; Source/WebKit/UIProcess/API/APIContentWorld.h:51
&gt; +    ContentWorldBase(uint64_t identifier, const WTF::String&amp; name)
&gt; +        : m_identifier(identifier)
&gt; +        , m_name(name)
&gt; +    {
&gt; +    }

I suggest considering a constructor that takes just the name and generates the identifier. Could be used by both derived classes, each of which has a constructor that wants to do the same thing.

Similarly, could consider having this default the name to null string so the caller doesn’t have to explicitly say { }, or maybe don’t provide one that lets you specify both name and identifier, since I don’t think any caller needs that.

&gt; Source/WebKit/UIProcess/API/APIContentWorld.h:68
&gt; +    void ref() const { API::ObjectImpl&lt;API::Object::Type::ContentWorld&gt;::ref(); }
&gt; +    void deref() const { API::ObjectImpl&lt;API::Object::Type::ContentWorld&gt;::deref(); }

I suggest this instead:

    void ref() const final { ObjectImpl::ref(); }
    void deref() const final { ObjectImpl::deref(); }

They should be marked final to emphasize they are intended to override, and give an error if they don’t. They don’t need to name the entire base template class. Just the name ObjectImpl should work.

&gt; Source/WebKit/UIProcess/API/APIContentWorld.h:72
&gt;      ContentWorld(const WTF::String&amp;);
&gt;      ContentWorld(uint64_t identifier);

These should be marked explicit.

&gt; Source/WebKit/UIProcess/API/APIUserContentWorld.cpp:45
&gt; +    : ContentWorldBase(ContentWorldBase::generateIdentifier(), name)

Can write this more simply:

    : ContentWorldBase(generateIdentifier(), name)

&gt; Source/WebKit/UIProcess/API/APIUserContentWorld.h:41
&gt; +    void ref() const { API::ObjectImpl&lt;API::Object::Type::UserContentWorld&gt;::ref(); }
&gt; +    void deref() const { API::ObjectImpl&lt;API::Object::Type::UserContentWorld&gt;::deref(); }

Same as above. I suggest:

    void ref() const final { ObjectImpl::ref(); }
    void deref() const final { ObjectImpl::deref(); }

&gt; Source/WebKit/UIProcess/API/APIUserContentWorld.h:44
&gt;      UserContentWorld(const WTF::String&amp;);

Should be marked explicit.

&gt; Source/WebKit/UIProcess/API/APIUserContentWorld.h:47
&gt;      UserContentWorld(ForNormalWorldOnly);

Should be marked explicit.

&gt; Source/WebKit/UIProcess/UserContent/WebScriptMessageHandler.h:27
&gt;  #ifndef WebScriptMessageHandler_h
&gt;  #define WebScriptMessageHandler_h

Noticed you moved to #pragma once on the other header. I suggest doing that here too.

&gt; Source/WebKit/UIProcess/UserContent/WebScriptMessageHandler.h:64
&gt; +    API::ContentWorldBase&amp; world() { return m_world.get(); }

Not sure why this is returning a base class reference; if this becomes a virtual function in the future that might make sense, or if the concrete classes are private. For now it mainly will just un-optimize virtual functions we might call, making them dynamic.

&gt; Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp:167
&gt;      for (unsigned i = 0; i &lt; numberOfUsesToRemove; ++i) {

Patterns like this where we use a HashCountedSet, but need a loop to subtract multiple times in a row, are intrinsically inefficient, with O(n) hash table lookups for no good reason. We should return to this kind of code (here and elsewhere in WebKit) and add a removeMultiple function to HashCountedSet instead of looping and calling remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609076</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-21 09:14:10 -0800</bug_when>
    <thetext>All suggestions taken verbatum

(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 388253 [details]
&gt; &gt; Source/WebKit/UIProcess/UserContent/WebScriptMessageHandler.h:64
&gt; &gt; +    API::ContentWorldBase&amp; world() { return m_world.get(); }
&gt; 
&gt; Not sure why this is returning a base class reference; if this becomes a
&gt; virtual function in the future that might make sense, or if the concrete
&gt; classes are private. For now it mainly will just un-optimize virtual
&gt; functions we might call, making them dynamic.

This change is actually the entire motivating change behind this refactoring patch - It will need to be the base class in upcoming work where API is throwing both ContentWorld and UserContentWorld instances at WebUserContentControllerProxy who needs to treat them the same.


&gt; 
&gt; &gt; Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp:167
&gt; &gt;      for (unsigned i = 0; i &lt; numberOfUsesToRemove; ++i) {
&gt; 
&gt; Patterns like this where we use a HashCountedSet, but need a loop to
&gt; subtract multiple times in a row, are intrinsically inefficient, with O(n)
&gt; hash table lookups for no good reason. We should return to this kind of code
&gt; (here and elsewhere in WebKit) and add a removeMultiple function to
&gt; HashCountedSet instead of looping and calling remove.

Sounds good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609078</commentid>
    <comment_count>4</comment_count>
      <attachid>388307</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-21 09:20:51 -0800</bug_when>
    <thetext>Created attachment 388307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609103</commentid>
    <comment_count>5</comment_count>
      <attachid>388307</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-21 09:56:08 -0800</bug_when>
    <thetext>Comment on attachment 388307
Patch

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

&gt; Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h:45
&gt;  class UserContentWorld;

Maybe take this out of this header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609108</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-21 09:57:50 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 388307 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=388307&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h:45
&gt; &gt;  class UserContentWorld;
&gt; 
&gt; Maybe take this out of this header.

There&apos;s still lots of UserContentWorld use there *for now*

Will remove in the followup work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609132</commentid>
    <comment_count>7</comment_count>
      <attachid>388307</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 10:42:45 -0800</bug_when>
    <thetext>Comment on attachment 388307
Patch

Clearing flags on attachment: 388307

Committed r254862: &lt;https://trac.webkit.org/changeset/254862&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609133</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 10:42:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609134</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-21 10:43:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/58764547&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388253</attachid>
            <date>2020-01-20 13:30:37 -0800</date>
            <delta_ts>2020-01-21 09:20:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206509-20200120133036.patch</filename>
            <type>text/plain</type>
            <size>16495</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc0OGVjZWM2NWExNGQ2OTNj
NWE5MzY0NGQ5Njk5YzU3Nzc3NTc3ZWYuLjJmZWE2NDJkODNjYWFiYWI5MWQyZTgzZDk3ZmE3ZWEz
ZjhiODlmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjAtMDEtMjAgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFQSTo6KFVzZXIpQ29udGVudFdv
cmxkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNjUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4KKyAgICAgICAgCisgICAgICAgIC0gR2l2ZSAoVXNlcilD
b250ZW50V29ybGQgYSBzaGFyZWQgYmFzZSBjbGFzcyBmb3IgdXBjb21pbmcgd29yay4KKyAgICAg
ICAgLSBSZWZlcmVuY2UgdGhlbSBieSBpZGVudGlmaWVyIGluc3RlYWQgb2Ygb2JqZWN0IGluc3Rh
bmNlIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAgICAtIE90aGVyIHNoYXJlZCBjbGFzcyBjbGVh
bnVwLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50V29ybGQuY3BwOgorICAg
ICAgICAoQVBJOjpDb250ZW50V29ybGRCYXNlOjpnZW5lcmF0ZUlkZW50aWZpZXIpOgorICAgICAg
ICAoQVBJOjpDb250ZW50V29ybGQ6OkNvbnRlbnRXb3JsZCk6CisgICAgICAgIChBUEk6OkNvbnRl
bnRXb3JsZDo6fkNvbnRlbnRXb3JsZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50V29ybGQuaDoKKyAgICAgICAgKEFQSTo6Q29udGVudFdvcmxkQmFzZTo6aWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRXb3JsZEJhc2U6Om5hbWUgY29uc3QpOgorICAg
ICAgICAoQVBJOjpDb250ZW50V29ybGRCYXNlOjp3b3JsZERhdGEgY29uc3QpOgorICAgICAgICAo
QVBJOjpDb250ZW50V29ybGRCYXNlOjpDb250ZW50V29ybGRCYXNlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50V29ybGQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyQ29u
dGVudFdvcmxkOjpVc2VyQ29udGVudFdvcmxkKToKKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRX
b3JsZDo6Z2VuZXJhdGVJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50V29ybGQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0
TWVzc2FnZUhhbmRsZXI6OndvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0TWVzc2Fn
ZUhhbmRsZXI6OnVzZXJDb250ZW50V29ybGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6dXNlckNvbnRlbnRXb3JsZCk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6YWRkVXNlckNvbnRlbnRXb3JsZFVzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpzaG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3Js
ZHNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJGb3JOYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92
ZUFsbFVzZXJNZXNzYWdlSGFuZGxlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgorCiAyMDIwLTAxLTIwICBBZHJpYW4g
UGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZC4gVXBkYXRlIE9wdGlvbnNXUEUuY21ha2UgYW5kIE5FV1MgZm9yIHRoZSAyLjI3LjQgcmVsZWFz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRXb3Js
ZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmNwcApp
bmRleCAxODhhYTE4MWM1ZGZkZDcwYjE2OGY0ZGFlNDdhZGUwZWQwYWM0MWFkLi44OGMzNjMxYTM5
YTdiMWQyNWUzNDgzNzhjNjFlODViYjJiMWMwMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmNwcApAQCAtMzMsNiArMzMsMTMgQEAKIAogbmFt
ZXNwYWNlIEFQSSB7CiAKK3VpbnQ2NF90IENvbnRlbnRXb3JsZEJhc2U6OmdlbmVyYXRlSWRlbnRp
ZmllcigpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBXZWJLaXQ6OnBhZ2VD
b250ZW50V29ybGRJZGVudGlmaWVyOworCisgICAgcmV0dXJuICsraWRlbnRpZmllcjsKK30KKwog
c3RhdGljIEhhc2hNYXA8V1RGOjpTdHJpbmcsIENvbnRlbnRXb3JsZCo+JiBzaGFyZWRXb3JsZE1h
cCgpCiB7CiAgICAgc3RhdGljIEhhc2hNYXA8V1RGOjpTdHJpbmcsIENvbnRlbnRXb3JsZCo+KiBz
aGFyZWRNYXAgPSBuZXcgSGFzaE1hcDxXVEY6OlN0cmluZywgQ29udGVudFdvcmxkKj47CkBAIC02
MywyMiArNzAsMjEgQEAgQ29udGVudFdvcmxkJiBDb250ZW50V29ybGQ6OmRlZmF1bHRDbGllbnRX
b3JsZCgpCiB9CiAKIENvbnRlbnRXb3JsZDo6Q29udGVudFdvcmxkKGNvbnN0IFdURjo6U3RyaW5n
JiBuYW1lKQotICAgIDogbV9pZGVudGlmaWVyKEFQSTo6VXNlckNvbnRlbnRXb3JsZDo6Z2VuZXJh
dGVJZGVudGlmaWVyKCkpCi0gICAgLCBtX25hbWUobmFtZSkKKyAgICA6IENvbnRlbnRXb3JsZEJh
c2UoQVBJOjpVc2VyQ29udGVudFdvcmxkOjpnZW5lcmF0ZUlkZW50aWZpZXIoKSwgbmFtZSkKIHsK
IH0KIAogQ29udGVudFdvcmxkOjpDb250ZW50V29ybGQodWludDY0X3QgaWRlbnRpZmllcikKLSAg
ICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgIDogQ29udGVudFdvcmxkQmFzZShpZGVu
dGlmaWVyLCB7IH0pCiB7CiB9CiAKIENvbnRlbnRXb3JsZDo6fkNvbnRlbnRXb3JsZCgpCiB7Ci0g
ICAgaWYgKG1fbmFtZS5pc051bGwoKSkKKyAgICBpZiAobmFtZSgpLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHRha2VuID0gc2hhcmVkV29ybGRNYXAoKS50YWtlKG1fbmFt
ZSk7CisgICAgYXV0byB0YWtlbiA9IHNoYXJlZFdvcmxkTWFwKCkudGFrZShuYW1lKCkpOwogICAg
IEFTU0VSVF9VTlVTRUQodGFrZW4sIHRha2VuID09IHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmgKaW5kZXggOTNlOTBhY2IzNDY3Zjky
ZmViY2M0NjczYThhNmQ3OGIxMGMxM2Q0Ni4uZWIxMzgxMmM4NDg1ZjYxYmUzYWZiY2MyZWI4NDBj
NDRjN2NhY2YyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRXb3JsZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50
V29ybGQuaApAQCAtMzAsNyArMzAsMzMgQEAKIAogbmFtZXNwYWNlIEFQSSB7CiAKLWNsYXNzIENv
bnRlbnRXb3JsZCBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkNvbnRlbnRXb3JsZD4geworY2xhc3MgQ29udGVudFdvcmxkQmFzZSB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+Q29udGVudFdvcmxkQmFzZSgpID0gZGVmYXVsdDsKKworICAgIHVpbnQ2NF90
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBX
VEY6OlN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHN0ZDo6cGFp
cjx1aW50NjRfdCwgV1RGOjpTdHJpbmc+IHdvcmxkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHsgaWRl
bnRpZmllcigpLCBuYW1lKCkgfTsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlZigpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBjb25zdCA9IDA7CisKKyAgICBzdGF0aWMgdWlu
dDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBDb250ZW50V29y
bGRCYXNlKHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKQorICAg
ICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICAgICAsIG1fbmFtZShuYW1lKQor
ICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFu
IE9iamVjdElkZW50aWZpZXIgb25jZSB3ZSBjYW4gZ2V0IGFsbCBTY3JpcHRXb3JsZCByZWxhdGVk
IGNsYXNzZXMgdG8gdXNlIE9iamVjdElkZW50aWZpZXIuCisgICAgdWludDY0X3QgbV9pZGVudGlm
aWVyOworICAgIFdURjo6U3RyaW5nIG1fbmFtZTsKK307CisKK2NsYXNzIENvbnRlbnRXb3JsZCBm
aW5hbCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvbnRlbnRX
b3JsZD4sIHB1YmxpYyBDb250ZW50V29ybGRCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PENvbnRlbnRXb3JsZD4gc2hhcmVkV29ybGRXaXRoTmFtZShjb25zdCBXVEY6OlN0cmluZyYpOwog
ICAgIHN0YXRpYyBDb250ZW50V29ybGQmIHBhZ2VDb250ZW50V29ybGQoKTsKQEAgLTM4LDE4ICs2
NCwxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5Db250ZW50V29ybGQoKTsKIAotICAgIGNv
bnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdWlu
dDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotCi0gICAg
c3RkOjpwYWlyPHVpbnQ2NF90LCBXVEY6OlN0cmluZz4gd29ybGREYXRhKCkgeyByZXR1cm4geyBt
X2lkZW50aWZpZXIsIG1fbmFtZSB9OyB9CisgICAgdm9pZCByZWYoKSBjb25zdCB7IEFQSTo6T2Jq
ZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29udGVudFdvcmxkPjo6cmVmKCk7IH0KKyAgICB2
b2lkIGRlcmVmKCkgY29uc3QgeyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
bnRlbnRXb3JsZD46OmRlcmVmKCk7IH0KIAogcHJpdmF0ZToKICAgICBDb250ZW50V29ybGQoY29u
c3QgV1RGOjpTdHJpbmcmKTsKICAgICBDb250ZW50V29ybGQodWludDY0X3QgaWRlbnRpZmllcik7
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gT2JqZWN0SWRlbnRpZmllciBvbmNl
IHdlIGNhbiBnZXQgYWxsIFNjcmlwdFdvcmxkIHJlbGF0ZWQgY2xhc3NlcyB0byB1c2UgT2JqZWN0
SWRlbnRpZmllci4KLSAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7Ci0gICAgV1RGOjpTdHJpbmcg
bV9uYW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRXb3JsZC5jcHAKaW5kZXggMzQ3OWJkNDM2ZDJh
NzQ5MTFiNjk2MDFlNmRlYzUwNTQxNjA1M2ZmNC4uYmJlNGI5Nzg1ZWY3ODk5YzQ4NWE0YzFiODNl
NTk0MTI3MGM5OGY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SVVzZXJDb250ZW50V29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElVc2VyQ29udGVudFdvcmxkLmNwcApAQCAtMzAsMTMgKzMwLDYgQEAKIAogbmFtZXNwYWNlIEFQ
SSB7CiAKLXVpbnQ2NF90IFVzZXJDb250ZW50V29ybGQ6OmdlbmVyYXRlSWRlbnRpZmllcigpCi17
Ci0gICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBXZWJLaXQ6OnBhZ2VDb250ZW50V29y
bGRJZGVudGlmaWVyOwotCi0gICAgcmV0dXJuICsraWRlbnRpZmllcjsKLX0KLQogUmVmPFVzZXJD
b250ZW50V29ybGQ+IFVzZXJDb250ZW50V29ybGQ6OndvcmxkV2l0aE5hbWUoY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRXb3Js
ZChuYW1lKSk7CkBAIC00OSwxMyArNDIsMTIgQEAgVXNlckNvbnRlbnRXb3JsZCYgVXNlckNvbnRl
bnRXb3JsZDo6bm9ybWFsV29ybGQoKQogfQogCiBVc2VyQ29udGVudFdvcmxkOjpVc2VyQ29udGVu
dFdvcmxkKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKQotICAgIDogbV9pZGVudGlmaWVyKGdlbmVy
YXRlSWRlbnRpZmllcigpKQotICAgICwgbV9uYW1lKG5hbWUpCisgICAgOiBDb250ZW50V29ybGRC
YXNlKENvbnRlbnRXb3JsZEJhc2U6OmdlbmVyYXRlSWRlbnRpZmllcigpLCBuYW1lKQogewogfQog
CiBVc2VyQ29udGVudFdvcmxkOjpVc2VyQ29udGVudFdvcmxkKEZvck5vcm1hbFdvcmxkT25seSkK
LSAgICA6IG1faWRlbnRpZmllcihXZWJLaXQ6OnBhZ2VDb250ZW50V29ybGRJZGVudGlmaWVyKQor
ICAgIDogQ29udGVudFdvcmxkQmFzZShXZWJLaXQ6OnBhZ2VDb250ZW50V29ybGRJZGVudGlmaWVy
LCB7IH0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElVc2VyQ29udGVudFdvcmxkLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVXNl
ckNvbnRlbnRXb3JsZC5oCmluZGV4IDllYWQ2MTg4OWI4NWM3ZWY4ODFlY2NmOTkxYTY0OWZkZmM3
NmIyZWMuLjhjNzJkYmZkZDY1NTRmMjBkNDVlMGI1ZWJhMmM0YTA2ODc1ZDZkZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudFdvcmxkLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50V29ybGQuaApAQCAt
MjMsNDAgKzIzLDI5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBBUElVc2VyQ29udGVudFdvcmxkX2gKLSNkZWZpbmUgQVBJVXNlckNvbnRlbnRX
b3JsZF9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUg
IkFQSUNvbnRlbnRXb3JsZC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgQVBJIHsKIAotY2xhc3MgQ29udGVudFdvcmxkOwotCi1jbGFzcyBVc2VyQ29udGVu
dFdvcmxkIGZpbmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6
VXNlckNvbnRlbnRXb3JsZD4geworY2xhc3MgVXNlckNvbnRlbnRXb3JsZCBmaW5hbCA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50V29ybGQ+LCBw
dWJsaWMgQ29udGVudFdvcmxkQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxVc2VyQ29u
dGVudFdvcmxkPiB3b3JsZFdpdGhOYW1lKGNvbnN0IFdURjo6U3RyaW5nJik7CiAgICAgc3RhdGlj
IFVzZXJDb250ZW50V29ybGQmIG5vcm1hbFdvcmxkKCk7CiAKICAgICB2aXJ0dWFsIH5Vc2VyQ29u
dGVudFdvcmxkKCk7CiAKLSAgICBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZTsgfQotICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXI7IH0KKyAgICB2b2lkIHJlZigpIGNvbnN0IHsgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudFdvcmxkPjo6cmVmKCk7IH0KKyAgICB2b2lkIGRl
cmVmKCkgY29uc3QgeyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVzZXJDb250
ZW50V29ybGQ+OjpkZXJlZigpOyB9CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvbnRl
bnRXb3JsZDsKLQogICAgIFVzZXJDb250ZW50V29ybGQoY29uc3QgV1RGOjpTdHJpbmcmKTsKIAog
ICAgIGVudW0gY2xhc3MgRm9yTm9ybWFsV29ybGRPbmx5IHsgTm9ybWFsV29ybGQgfTsKICAgICBV
c2VyQ29udGVudFdvcmxkKEZvck5vcm1hbFdvcmxkT25seSk7CiAKLSAgICBzdGF0aWMgdWludDY0
X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCk7Ci0KLSAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7Ci0g
ICAgV1RGOjpTdHJpbmcgbV9uYW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRp
ZiAvLyBBUElVc2VyQ29udGVudFdvcmxkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oCmluZGV4
IGMyMWViOWU3OTIwODVhMjYwZGI5Y2I2MjEzYzI5NWE3ZjlmYjYxMzMuLjBmZTc2Y2Y4ZDcwNDU1
OGUwNmQxYTg3YjU4MzM4OTU0ZDY5YzMzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaApA
QCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcl9oCiAjZGVm
aW5lIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyX2gKIAorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50
V29ybGQuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIK
ICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTYw
LDggKzYxLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KIAotICAgIGNvbnN0IEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRX
b3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGQ7IH0KLSAgICBBUEk6OlVzZXJDb250ZW50V29y
bGQmIHVzZXJDb250ZW50V29ybGQoKSB7IHJldHVybiBtX3dvcmxkOyB9CisgICAgQVBJOjpDb250
ZW50V29ybGRCYXNlJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KIAogICAgIENs
aWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY2xpZW50OyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCBkMDE0MTNkYzU1MjY0Mzk3ZGNmNmQ0
YmFjZTdjMWZhODUzMjUxNzEyLi4wYzk5M2JiNzhiMWY4ZTBjNzk5MTA4MjkwYzA3MTRlMTBjM2Zk
NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCkBAIC0xMDUs
OCArMTA1LDggQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwKICAgICAgICAgd2ViUHJvY2Vzc1By
b3h5LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgaWRlbnRpZmllcigpLCAqdGhpcyk7CiAKICAg
ICBBU1NFUlQocGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5pc0VtcHR5KCkpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgd29ybGQgOiBtX3VzZXJDb250ZW50V29ybGRzKQotICAgICAgICBwYXJh
bWV0ZXJzLnVzZXJDb250ZW50V29ybGRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih3b3JsZC5rZXkt
PmlkZW50aWZpZXIoKSwgd29ybGQua2V5LT5uYW1lKCkpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHdvcmxkIDogbV9jb250ZW50V29ybGRzKQorICAgICAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50
V29ybGRzLmFwcGVuZCh3b3JsZC5rZXktPndvcmxkRGF0YSgpKTsKIAogICAgIEFTU0VSVChwYXJh
bWV0ZXJzLnVzZXJTY3JpcHRzLmlzRW1wdHkoKSk7CiAgICAgZm9yIChhdXRvIHVzZXJTY3JpcHQg
OiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCkBAIC0x
MTgsNyArMTE4LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwKIAogICAgIEFTU0VSVChwYXJh
bWV0ZXJzLm1lc3NhZ2VIYW5kbGVycy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byYgaGFuZGxl
ciA6IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJz
Lm1lc3NhZ2VIYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRsZXIt
PnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRsZXItPm5hbWUoKSB9KTsKKyAg
ICAgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRp
ZmllcigpLCBoYW5kbGVyLT53b3JsZCgpLmlkZW50aWZpZXIoKSwgaGFuZGxlci0+bmFtZSgpIH0p
OwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBBU1NFUlQocGFyYW1ldGVy
cy5jb250ZW50UnVsZUxpc3RzLmlzRW1wdHkoKSk7CkBAIC0xNDYsMTUgKzE0NiwxNSBAQCB2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgd2ViUHJvY2Vzc1BybwogICAgIHdlYlByb2Nlc3NQcm94eS5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIGlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmFkZFVzZXJDb250ZW50V29ybGRVc2UoQVBJOjpVc2VyQ29udGVudFdvcmxk
JiB3b3JsZCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJDb250
ZW50V29ybGRVc2UoQVBJOjpDb250ZW50V29ybGRCYXNlJiB3b3JsZCkKIHsKICAgICBpZiAoJndv
cmxkID09ICZBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91c2VyQ29udGVudFdvcmxkcy5hZGQoJndv
cmxkKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGVudFdvcmxkcy5hZGQoJndvcmxkKTsK
ICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHMoeyBzdGQ6Om1ha2Vf
cGFpcih3b3JsZC5pZGVudGlmaWVyKCksIHdvcmxkLm5hbWUoKSkgfSksIGlkZW50aWZpZXIoKSk7
CisgICAgICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHMoeyB3b3JsZC53b3JsZERhdGEoKSB9KSwgaWRlbnRp
ZmllcigpKTsKICAgICB9CiB9CiAKQEAgLTE2Myw5ICsxNjMsOSBAQCBib29sIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpzaG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNNZXNz
YWdlKEFQSQogICAgIGlmICgmd29ybGQgPT0gJkFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9ybWFs
V29ybGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBpdCA9IG1fdXNlckNv
bnRlbnRXb3JsZHMuZmluZCgmd29ybGQpOworICAgIGF1dG8gaXQgPSBtX2NvbnRlbnRXb3JsZHMu
ZmluZCgmd29ybGQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlVzZXNU
b1JlbW92ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3VzZXJDb250ZW50V29ybGRzLnJlbW92ZShp
dCkpIHsKKyAgICAgICAgaWYgKG1fY29udGVudFdvcmxkcy5yZW1vdmUoaXQpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoaSA9PSAobnVtYmVyT2ZVc2VzVG9SZW1vdmUgLSAxKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzA2LDE5ICszMDYsMTkgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKCkKIAog
Ym9vbCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlclNjcmlwdE1lc3NhZ2VI
YW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyJiBoYW5kbGVyKQogewotICAgIFJlZjxBUEk6
OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0gaGFuZGxlci51c2VyQ29udGVudFdvcmxkKCk7Cisg
ICAgYXV0byYgd29ybGQgPSBoYW5kbGVyLndvcmxkKCk7CiAKICAgICBmb3IgKGF1dG8mIGV4aXN0
aW5nSGFuZGxlciA6IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKSB7Ci0gICAgICAg
IGlmIChleGlzdGluZ0hhbmRsZXItPm5hbWUoKSA9PSBoYW5kbGVyLm5hbWUoKSAmJiAmZXhpc3Rp
bmdIYW5kbGVyLT51c2VyQ29udGVudFdvcmxkKCkgPT0gd29ybGQucHRyKCkpCisgICAgICAgIGlm
IChleGlzdGluZ0hhbmRsZXItPm5hbWUoKSA9PSBoYW5kbGVyLm5hbWUoKSAmJiBleGlzdGluZ0hh
bmRsZXItPndvcmxkKCkuaWRlbnRpZmllcigpID09IHdvcmxkLmlkZW50aWZpZXIoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBhZGRVc2VyQ29udGVudFdvcmxkVXNl
KHdvcmxkLmdldCgpKTsKKyAgICBhZGRVc2VyQ29udGVudFdvcmxkVXNlKHdvcmxkKTsKIAogICAg
IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLmFkZChoYW5kbGVyLmlkZW50aWZpZXIoKSwgJmhhbmRs
ZXIpOwogCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHBy
b2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2Ny
aXB0TWVzc2FnZUhhbmRsZXJzKHsgeyBoYW5kbGVyLmlkZW50aWZpZXIoKSwgd29ybGQtPmlkZW50
aWZpZXIoKSwgaGFuZGxlci5uYW1lKCkgfSB9KSwgaWRlbnRpZmllcigpKTsKKyAgICAgICAgcHJv
Y2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3Jp
cHRNZXNzYWdlSGFuZGxlcnMoeyB7IGhhbmRsZXIuaWRlbnRpZmllcigpLCB3b3JsZC5pZGVudGlm
aWVyKCksIGhhbmRsZXIubmFtZSgpIH0gfSksIGlkZW50aWZpZXIoKSk7CiAgICAgCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0zMjYsNyArMzI2LDcgQEAgYm9vbCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2UK
IHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJNZXNzYWdlSGFu
ZGxlckZvck5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdv
cmxkKQogewogICAgIGZvciAoYXV0byBpdCA9IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLmJlZ2lu
KCksIGVuZCA9IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+bmFtZSgpID09IG5hbWUgJiYgJml0LT52YWx1ZS0+
dXNlckNvbnRlbnRXb3JsZCgpID09ICZ3b3JsZCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5u
YW1lKCkgPT0gbmFtZSAmJiBpdC0+dmFsdWUtPndvcmxkKCkuaWRlbnRpZmllcigpID09IHdvcmxk
LmlkZW50aWZpZXIoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9j
ZXNzZXMpCiAgICAgICAgICAgICAgICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcih3b3JsZC5pZGVu
dGlmaWVyKCksIGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSwgaWRlbnRpZmllcigpKTsKIApAQCAt
MzQ1LDcgKzM0NSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92
ZUFsbFVzZXJNZXNzYWdlSGFuZGxlcnMoQVBJOjpVc2VyQ29udGVuCiAKICAgICB1bnNpZ25lZCBu
dW1iZXJSZW1vdmVkID0gMDsKICAgICBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5yZW1vdmVJZihb
Jl0oYXV0byYgZW50cnkpIHsKLSAgICAgICAgaWYgKCZlbnRyeS52YWx1ZS0+dXNlckNvbnRlbnRX
b3JsZCgpID09ICZ3b3JsZCkgeworICAgICAgICBpZiAoZW50cnkudmFsdWUtPndvcmxkKCkuaWRl
bnRpZmllcigpID09IHdvcmxkLmlkZW50aWZpZXIoKSkgewogICAgICAgICAgICAgKytudW1iZXJS
ZW1vdmVkOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5oCmluZGV4IDY3NmQyMzdjMzM5NmY5NDE2YzY0OWEyZDBi
MjVkZWU5MjcyMTAzNmMuLjRmZmQ4NWZkMDQ3ODQ4NDJjNTNjOTY3Y2I0OWYxZjBiMDIwNGEyYzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaApAQCAtNDEsNyArNDEsNyBA
QAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBcnJheTsKIGNsYXNzIENvbnRlbnRSdWxlTGlzdDsK
LWNsYXNzIENvbnRlbnRXb3JsZDsKK2NsYXNzIENvbnRlbnRXb3JsZEJhc2U7CiBjbGFzcyBVc2Vy
Q29udGVudFdvcmxkOwogY2xhc3MgVXNlclNjcmlwdDsKIGNsYXNzIFVzZXJTdHlsZVNoZWV0OwpA
QCAtMTE3LDcgKzExNyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIEZyYW1lSW5mb0RhdGEmJiwg
dWludDY0X3QgbWVzc2FnZUhhbmRsZXJJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAK
LSAgICB2b2lkIGFkZFVzZXJDb250ZW50V29ybGRVc2UoQVBJOjpVc2VyQ29udGVudFdvcmxkJik7
CisgICAgdm9pZCBhZGRVc2VyQ29udGVudFdvcmxkVXNlKEFQSTo6Q29udGVudFdvcmxkQmFzZSYp
OwogICAgIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMoQVBJOjpVc2VyQ29udGVudFdv
cmxkJiwgdW5zaWduZWQgbnVtYmVyT2ZVc2VzVG9SZW1vdmUpOwogICAgIHZvaWQgcmVtb3ZlVXNl
ckNvbnRlbnRXb3JsZFVzZXMoSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQSTo6VXNlckNvbnRlbnRX
b3JsZD4+Jik7CiAgICAgYm9vbCBzaG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNNZXNz
YWdlKEFQSTo6VXNlckNvbnRlbnRXb3JsZCYsIHVuc2lnbmVkIG51bWJlck9mVXNlc1RvUmVtb3Zl
KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIFJlZjxBUEk6OkFycmF5PiBtX3Vz
ZXJTY3JpcHRzOwogICAgIFJlZjxBUEk6OkFycmF5PiBtX3VzZXJTdHlsZVNoZWV0czsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI+PiBtX3Njcmlw
dE1lc3NhZ2VIYW5kbGVyczsKLSAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8QVBJOjpVc2VyQ29u
dGVudFdvcmxkPj4gbV91c2VyQ29udGVudFdvcmxkczsKKyAgICBIYXNoQ291bnRlZFNldDxSZWZQ
dHI8QVBJOjpDb250ZW50V29ybGRCYXNlPj4gbV9jb250ZW50V29ybGRzOwogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICBXZWFrSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5
PiBtX25ldHdvcmtQcm9jZXNzZXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388307</attachid>
            <date>2020-01-21 09:20:51 -0800</date>
            <delta_ts>2020-01-21 10:42:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206509-20200121092050.patch</filename>
            <type>text/plain</type>
            <size>17003</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc0OGVjZWM2NWExNGQ2OTNj
NWE5MzY0NGQ5Njk5YzU3Nzc3NTc3ZWYuLmFiMjU5ODhiZjgxOWMzNGU0NzQ3YmM5ZTZhZGFjZWRl
OGMxOTU4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjAtMDEtMjAgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFQSTo6KFVzZXIpQ29udGVudFdv
cmxkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNjUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IE5vIGJlaGF2aW9yIGNoYW5nZS4KKyAgICAgICAgCisgICAgICAgIC0gR2l2ZSAoVXNlcilDb250
ZW50V29ybGQgYSBzaGFyZWQgYmFzZSBjbGFzcyBmb3IgdXBjb21pbmcgd29yay4KKyAgICAgICAg
LSBSZWZlcmVuY2UgdGhlbSBieSBpZGVudGlmaWVyIGluc3RlYWQgb2Ygb2JqZWN0IGluc3RhbmNl
IHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAgICAtIE90aGVyIHNoYXJlZCBjbGFzcyBjbGVhbnVw
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50V29ybGQuY3BwOgorICAgICAg
ICAoQVBJOjpDb250ZW50V29ybGRCYXNlOjpnZW5lcmF0ZUlkZW50aWZpZXIpOgorICAgICAgICAo
QVBJOjpDb250ZW50V29ybGQ6OkNvbnRlbnRXb3JsZCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRX
b3JsZDo6fkNvbnRlbnRXb3JsZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50
V29ybGQuaDoKKyAgICAgICAgKEFQSTo6Q29udGVudFdvcmxkQmFzZTo6aWRlbnRpZmllciBjb25z
dCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRXb3JsZEJhc2U6Om5hbWUgY29uc3QpOgorICAgICAg
ICAoQVBJOjpDb250ZW50V29ybGRCYXNlOjp3b3JsZERhdGEgY29uc3QpOgorICAgICAgICAoQVBJ
OjpDb250ZW50V29ybGRCYXNlOjpDb250ZW50V29ybGRCYXNlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSVVzZXJDb250ZW50V29ybGQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyQ29udGVu
dFdvcmxkOjpVc2VyQ29udGVudFdvcmxkKToKKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRXb3Js
ZDo6Z2VuZXJhdGVJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50V29ybGQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXI6OndvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhh
bmRsZXI6OnVzZXJDb250ZW50V29ybGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6dXNlckNvbnRlbnRXb3JsZCk6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTo6YWRkVXNlckNvbnRlbnRXb3JsZFVzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5OjpzaG91bGRTZW5kUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHNN
ZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJGb3JOYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFs
bFVzZXJNZXNzYWdlSGFuZGxlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgorCiAyMDIwLTAxLTIwICBBZHJpYW4gUGVy
ZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
VXBkYXRlIE9wdGlvbnNXUEUuY21ha2UgYW5kIE5FV1MgZm9yIHRoZSAyLjI3LjQgcmVsZWFzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRXb3JsZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmNwcAppbmRl
eCAxODhhYTE4MWM1ZGZkZDcwYjE2OGY0ZGFlNDdhZGUwZWQwYWM0MWFkLi40MWI2MDM3NTk0NTFi
YmMxZTIyNjQ0NDE4NGViNmRjNDQwYzM5OWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJQ29udGVudFdvcmxkLmNwcApAQCAtMzMsNiArMzMsMTMgQEAKIAogbmFtZXNw
YWNlIEFQSSB7CiAKK3VpbnQ2NF90IENvbnRlbnRXb3JsZEJhc2U6OmdlbmVyYXRlSWRlbnRpZmll
cigpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBXZWJLaXQ6OnBhZ2VDb250
ZW50V29ybGRJZGVudGlmaWVyOworCisgICAgcmV0dXJuICsraWRlbnRpZmllcjsKK30KKwogc3Rh
dGljIEhhc2hNYXA8V1RGOjpTdHJpbmcsIENvbnRlbnRXb3JsZCo+JiBzaGFyZWRXb3JsZE1hcCgp
CiB7CiAgICAgc3RhdGljIEhhc2hNYXA8V1RGOjpTdHJpbmcsIENvbnRlbnRXb3JsZCo+KiBzaGFy
ZWRNYXAgPSBuZXcgSGFzaE1hcDxXVEY6OlN0cmluZywgQ29udGVudFdvcmxkKj47CkBAIC01OCwy
NyArNjUsMjYgQEAgQ29udGVudFdvcmxkJiBDb250ZW50V29ybGQ6OnBhZ2VDb250ZW50V29ybGQo
KQogCiBDb250ZW50V29ybGQmIENvbnRlbnRXb3JsZDo6ZGVmYXVsdENsaWVudFdvcmxkKCkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPENvbnRlbnRXb3JsZD4+IHdvcmxkKGFk
b3B0UmVmKG5ldyBDb250ZW50V29ybGQoQVBJOjpVc2VyQ29udGVudFdvcmxkOjpnZW5lcmF0ZUlk
ZW50aWZpZXIoKSkpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPENvbnRlbnRX
b3JsZD4+IHdvcmxkKGFkb3B0UmVmKG5ldyBDb250ZW50V29ybGQoZ2VuZXJhdGVJZGVudGlmaWVy
KCkpKSk7CiAgICAgcmV0dXJuICp3b3JsZC5nZXQoKTsKIH0KIAogQ29udGVudFdvcmxkOjpDb250
ZW50V29ybGQoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpCi0gICAgOiBtX2lkZW50aWZpZXIoQVBJ
OjpVc2VyQ29udGVudFdvcmxkOjpnZW5lcmF0ZUlkZW50aWZpZXIoKSkKLSAgICAsIG1fbmFtZShu
YW1lKQorICAgIDogQ29udGVudFdvcmxkQmFzZShuYW1lKQogewogfQogCiBDb250ZW50V29ybGQ6
OkNvbnRlbnRXb3JsZCh1aW50NjRfdCBpZGVudGlmaWVyKQotICAgIDogbV9pZGVudGlmaWVyKGlk
ZW50aWZpZXIpCisgICAgOiBDb250ZW50V29ybGRCYXNlKGlkZW50aWZpZXIpCiB7CiB9CiAKIENv
bnRlbnRXb3JsZDo6fkNvbnRlbnRXb3JsZCgpCiB7Ci0gICAgaWYgKG1fbmFtZS5pc051bGwoKSkK
KyAgICBpZiAobmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHRh
a2VuID0gc2hhcmVkV29ybGRNYXAoKS50YWtlKG1fbmFtZSk7CisgICAgYXV0byB0YWtlbiA9IHNo
YXJlZFdvcmxkTWFwKCkudGFrZShuYW1lKCkpOwogICAgIEFTU0VSVF9VTlVTRUQodGFrZW4sIHRh
a2VuID09IHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFdvcmxkLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudFdvcmxkLmgKaW5kZXggOTNlOTBhY2IzNDY3ZjkyZmViY2M0NjczYThhNmQ3OGIxMGMxM2Q0
Ni4uYjM0ZjEyOWM0Y2JiZWJjNWU1NjJhM2I5YWQ5ZjAyYjIxOWRiNzg4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRXb3JsZC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50V29ybGQuaApAQCAtMzAsMjYgKzMwLDUx
IEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1jbGFzcyBDb250ZW50V29ybGQgZmluYWwgOiBwdWJs
aWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb250ZW50V29ybGQ+IHsKK2Ns
YXNzIENvbnRlbnRXb3JsZEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29udGVudFdv
cmxkPiBzaGFyZWRXb3JsZFdpdGhOYW1lKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgc3RhdGlj
IENvbnRlbnRXb3JsZCYgcGFnZUNvbnRlbnRXb3JsZCgpOwotICAgIHN0YXRpYyBDb250ZW50V29y
bGQmIGRlZmF1bHRDbGllbnRXb3JsZCgpOworICAgIHZpcnR1YWwgfkNvbnRlbnRXb3JsZEJhc2Uo
KSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIH5Db250ZW50V29ybGQoKTsKLQotICAgIGNvbnN0
IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgdWludDY0
X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIGNvbnN0
IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgc3RkOjpw
YWlyPHVpbnQ2NF90LCBXVEY6OlN0cmluZz4gd29ybGREYXRhKCkgY29uc3QgeyByZXR1cm4geyBp
ZGVudGlmaWVyKCksIG5hbWUoKSB9OyB9CiAKLSAgICBzdGQ6OnBhaXI8dWludDY0X3QsIFdURjo6
U3RyaW5nPiB3b3JsZERhdGEoKSB7IHJldHVybiB7IG1faWRlbnRpZmllciwgbV9uYW1lIH07IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZigpIGNvbnN0ID0gMDsKIAotcHJpdmF0ZToKLSAgICBDb250ZW50V29ybGQoY29uc3QgV1RGOjpT
dHJpbmcmKTsKLSAgICBDb250ZW50V29ybGQodWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3Rh
dGljIHVpbnQ2NF90IGdlbmVyYXRlSWRlbnRpZmllcigpOworCitwcm90ZWN0ZWQ6CisgICAgQ29u
dGVudFdvcmxkQmFzZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBtX2lkZW50
aWZpZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAg
eworICAgIH0KIAorICAgIENvbnRlbnRXb3JsZEJhc2UodWludDY0X3QgaWRlbnRpZmllcikKKyAg
ICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBPYmplY3RJZGVudGlmaWVyIG9uY2Ug
d2UgY2FuIGdldCBhbGwgU2NyaXB0V29ybGQgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZSBPYmplY3RJ
ZGVudGlmaWVyLgogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBXVEY6OlN0cmluZyBt
X25hbWU7CiB9OwogCitjbGFzcyBDb250ZW50V29ybGQgZmluYWwgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb250ZW50V29ybGQ+LCBwdWJsaWMgQ29udGVudFdv
cmxkQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb250ZW50V29ybGQ+IHNoYXJlZFdv
cmxkV2l0aE5hbWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICBzdGF0aWMgQ29udGVudFdvcmxk
JiBwYWdlQ29udGVudFdvcmxkKCk7CisgICAgc3RhdGljIENvbnRlbnRXb3JsZCYgZGVmYXVsdENs
aWVudFdvcmxkKCk7CisKKyAgICB2aXJ0dWFsIH5Db250ZW50V29ybGQoKTsKKworICAgIHZvaWQg
cmVmKCkgY29uc3QgZmluYWwgeyBPYmplY3RJbXBsOjpyZWYoKTsgfQorICAgIHZvaWQgZGVyZWYo
KSBjb25zdCBmaW5hbCB7IE9iamVjdEltcGw6OmRlcmVmKCk7IH0KKworcHJpdmF0ZToKKyAgICBl
eHBsaWNpdCBDb250ZW50V29ybGQoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICBleHBsaWNpdCBD
b250ZW50V29ybGQodWludDY0X3QgaWRlbnRpZmllcik7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBB
UEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVu
dFdvcmxkLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudFdv
cmxkLmNwcAppbmRleCAzNDc5YmQ0MzZkMmE3NDkxMWI2OTYwMWU2ZGVjNTA1NDE2MDUzZmY0Li5k
YjlkMDAzOGI1MjAyYTI3ZjJhYzRiYTgzYjQyYjAyZTQ0N2FiMjQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRXb3JsZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50V29ybGQuY3BwCkBAIC0zMCwx
MyArMzAsNiBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIAotdWludDY0X3QgVXNlckNvbnRlbnRXb3Js
ZDo6Z2VuZXJhdGVJZGVudGlmaWVyKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmll
ciA9IFdlYktpdDo6cGFnZUNvbnRlbnRXb3JsZElkZW50aWZpZXI7Ci0KLSAgICByZXR1cm4gKytp
ZGVudGlmaWVyOwotfQotCiBSZWY8VXNlckNvbnRlbnRXb3JsZD4gVXNlckNvbnRlbnRXb3JsZDo6
d29ybGRXaXRoTmFtZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBVc2VyQ29udGVudFdvcmxkKG5hbWUpKTsKQEAgLTQ5LDEzICs0MiwxMiBAQCBV
c2VyQ29udGVudFdvcmxkJiBVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3JsZCgpCiB9CiAKIFVz
ZXJDb250ZW50V29ybGQ6OlVzZXJDb250ZW50V29ybGQoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUp
Ci0gICAgOiBtX2lkZW50aWZpZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpCi0gICAgLCBtX25hbWUo
bmFtZSkKKyAgICA6IENvbnRlbnRXb3JsZEJhc2UobmFtZSkKIHsKIH0KIAogVXNlckNvbnRlbnRX
b3JsZDo6VXNlckNvbnRlbnRXb3JsZChGb3JOb3JtYWxXb3JsZE9ubHkpCi0gICAgOiBtX2lkZW50
aWZpZXIoV2ViS2l0OjpwYWdlQ29udGVudFdvcmxkSWRlbnRpZmllcikKKyAgICA6IENvbnRlbnRX
b3JsZEJhc2UoV2ViS2l0OjpwYWdlQ29udGVudFdvcmxkSWRlbnRpZmllcikKIHsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50V29ybGQu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudFdvcmxkLmgKaW5k
ZXggOWVhZDYxODg5Yjg1YzdlZjg4MWVjY2Y5OTFhNjQ5ZmRmYzc2YjJlYy4uMDZhNjg2MzA4YTMx
ZDg4NzM3MDkyMmJiODkzMjI1OTM5Y2UwMDdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50V29ybGQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRXb3JsZC5oCkBAIC0yMyw0MCArMjMsMjkgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEFQSVVzZXJD
b250ZW50V29ybGRfaAotI2RlZmluZSBBUElVc2VyQ29udGVudFdvcmxkX2gKKyNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQVBJQ29udGVudFdvcmxkLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewogCi1j
bGFzcyBDb250ZW50V29ybGQ7Ci0KLWNsYXNzIFVzZXJDb250ZW50V29ybGQgZmluYWwgOiBwdWJs
aWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudFdvcmxkPiB7
CitjbGFzcyBVc2VyQ29udGVudFdvcmxkIGZpbmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRXb3JsZD4sIHB1YmxpYyBDb250ZW50V29ybGRC
YXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFVzZXJDb250ZW50V29ybGQ+IHdvcmxkV2l0
aE5hbWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICBzdGF0aWMgVXNlckNvbnRlbnRXb3JsZCYg
bm9ybWFsV29ybGQoKTsKIAogICAgIHZpcnR1YWwgflVzZXJDb250ZW50V29ybGQoKTsKIAotICAg
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAg
dWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAg
IHZvaWQgcmVmKCkgY29uc3QgZmluYWwgeyBPYmplY3RJbXBsOjpyZWYoKTsgfQorICAgIHZvaWQg
ZGVyZWYoKSBjb25zdCBmaW5hbCB7IE9iamVjdEltcGw6OmRlcmVmKCk7IH0KIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgQ29udGVudFdvcmxkOwotCi0gICAgVXNlckNvbnRlbnRXb3JsZChj
b25zdCBXVEY6OlN0cmluZyYpOworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50V29ybGQoY29uc3Qg
V1RGOjpTdHJpbmcmKTsKIAogICAgIGVudW0gY2xhc3MgRm9yTm9ybWFsV29ybGRPbmx5IHsgTm9y
bWFsV29ybGQgfTsKLSAgICBVc2VyQ29udGVudFdvcmxkKEZvck5vcm1hbFdvcmxkT25seSk7Cisg
ICAgZXhwbGljaXQgVXNlckNvbnRlbnRXb3JsZChGb3JOb3JtYWxXb3JsZE9ubHkpOwogCi0gICAg
c3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlSWRlbnRpZmllcigpOwotCi0gICAgdWludDY0X3QgbV9p
ZGVudGlmaWVyOwotICAgIFdURjo6U3RyaW5nIG1fbmFtZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEFQSQotCi0jZW5kaWYgLy8gQVBJVXNlckNvbnRlbnRXb3JsZF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViU2NyaXB0TWVzc2FnZUhh
bmRsZXIuaAppbmRleCBjMjFlYjllNzkyMDg1YTI2MGRiOWNiNjIxM2MyOTVhN2Y5ZmI2MTMzLi4w
Y2Y0YWNmZTQ5OWI1ZjZjYjliYWNkNzE3NDc0MmM2NjAwYTFlZmJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlNjcmlwdE1lc3Nh
Z2VIYW5kbGVyLmgKQEAgLTIzLDkgKzIzLDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyX2gKLSNkZWZp
bmUgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJfaAorI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJB
UElVc2VyQ29udGVudFdvcmxkLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lkZW50aWZpZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmLmg+CkBAIC02MCw4ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICBjb25zdCBBUEk6OlVzZXJDb250ZW50V29ybGQm
IHVzZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkOyB9Ci0gICAgQVBJOjpV
c2VyQ29udGVudFdvcmxkJiB1c2VyQ29udGVudFdvcmxkKCkgeyByZXR1cm4gbV93b3JsZDsgfQor
ICAgIEFQSTo6Q29udGVudFdvcmxkQmFzZSYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgp
OyB9CiAKICAgICBDbGllbnQmIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2NsaWVudDsgfQog
CkBAIC03NCw1ICs3MywzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKLSAg
ICAKLSNlbmRpZiAvLyBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggZDAxNDEzZGM1NTI2NDM5N2RjZjZkNGJhY2U3
YzFmYTg1MzI1MTcxMi4uMGM5OTNiYjc4YjFmOGUwYzc5OTEwODI5MGMwNzE0ZTEwYzNmZDcxNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcApAQCAtMTA1LDggKzEw
NSw4IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksCiAgICAgICAgIHdlYlByb2Nlc3NQcm94eS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGlkZW50aWZpZXIoKSwgKnRoaXMpOwogCiAgICAgQVNT
RVJUKHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIHdvcmxkIDogbV91c2VyQ29udGVudFdvcmxkcykKLSAgICAgICAgcGFyYW1ldGVy
cy51c2VyQ29udGVudFdvcmxkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIod29ybGQua2V5LT5pZGVu
dGlmaWVyKCksIHdvcmxkLmtleS0+bmFtZSgpKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiB3b3Js
ZCA6IG1fY29udGVudFdvcmxkcykKKyAgICAgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxk
cy5hcHBlbmQod29ybGQua2V5LT53b3JsZERhdGEoKSk7CiAKICAgICBBU1NFUlQocGFyYW1ldGVy
cy51c2VyU2NyaXB0cy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byB1c2VyU2NyaXB0IDogbV91
c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQpAQCAtMTE4LDcg
KzExOCw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksCiAKICAgICBBU1NFUlQocGFyYW1ldGVy
cy5tZXNzYWdlSGFuZGxlcnMuaXNFbXB0eSgpKTsKICAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBt
X3NjcmlwdE1lc3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5tZXNz
YWdlSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT51c2Vy
Q29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CisgICAgICAg
IHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXItPmlkZW50aWZpZXIo
KSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRsZXItPm5hbWUoKSB9KTsKIAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMuY29u
dGVudFJ1bGVMaXN0cy5pc0VtcHR5KCkpOwpAQCAtMTQ2LDE1ICsxNDYsMTUgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkm
IHdlYlByb2Nlc3NQcm8KICAgICB3ZWJQcm9jZXNzUHJveHkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBpZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5OjphZGRVc2VyQ29udGVudFdvcmxkVXNlKEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29y
bGQpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudFdv
cmxkVXNlKEFQSTo6Q29udGVudFdvcmxkQmFzZSYgd29ybGQpCiB7CiAgICAgaWYgKCZ3b3JsZCA9
PSAmQVBJOjpVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3JsZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdXNlckNvbnRlbnRXb3JsZHMuYWRkKCZ3b3JsZCk7
CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRlbnRXb3JsZHMuYWRkKCZ3b3JsZCk7CiAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6
IG1fcHJvY2Vzc2VzKQotICAgICAgICAgICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50V29ybGRzKHsgc3RkOjptYWtlX3BhaXIo
d29ybGQuaWRlbnRpZmllcigpLCB3b3JsZC5uYW1lKCkpIH0pLCBpZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OkFkZFVzZXJDb250ZW50V29ybGRzKHsgd29ybGQud29ybGREYXRhKCkgfSksIGlkZW50aWZpZXIo
KSk7CiAgICAgfQogfQogCkBAIC0xNjMsOSArMTYzLDkgQEAgYm9vbCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTo6c2hvdWxkU2VuZFJlbW92ZVVzZXJDb250ZW50V29ybGRzTWVzc2FnZShB
UEkKICAgICBpZiAoJndvcmxkID09ICZBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gaXQgPSBtX3VzZXJDb250ZW50
V29ybGRzLmZpbmQoJndvcmxkKTsKKyAgICBhdXRvIGl0ID0gbV9jb250ZW50V29ybGRzLmZpbmQo
JndvcmxkKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZVc2VzVG9SZW1v
dmU7ICsraSkgewotICAgICAgICBpZiAobV91c2VyQ29udGVudFdvcmxkcy5yZW1vdmUoaXQpKSB7
CisgICAgICAgIGlmIChtX2NvbnRlbnRXb3JsZHMucmVtb3ZlKGl0KSkgewogICAgICAgICAgICAg
QVNTRVJUKGkgPT0gKG51bWJlck9mVXNlc1RvUmVtb3ZlIC0gMSkpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMwNiwxOSArMzA2LDE5IEBAIHZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cygpCiAKIGJvb2wg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxl
cihXZWJTY3JpcHRNZXNzYWdlSGFuZGxlciYgaGFuZGxlcikKIHsKLSAgICBSZWY8QVBJOjpVc2Vy
Q29udGVudFdvcmxkPiB3b3JsZCA9IGhhbmRsZXIudXNlckNvbnRlbnRXb3JsZCgpOworICAgIGF1
dG8mIHdvcmxkID0gaGFuZGxlci53b3JsZCgpOwogCiAgICAgZm9yIChhdXRvJiBleGlzdGluZ0hh
bmRsZXIgOiBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
ZXhpc3RpbmdIYW5kbGVyLT5uYW1lKCkgPT0gaGFuZGxlci5uYW1lKCkgJiYgJmV4aXN0aW5nSGFu
ZGxlci0+dXNlckNvbnRlbnRXb3JsZCgpID09IHdvcmxkLnB0cigpKQorICAgICAgICBpZiAoZXhp
c3RpbmdIYW5kbGVyLT5uYW1lKCkgPT0gaGFuZGxlci5uYW1lKCkgJiYgZXhpc3RpbmdIYW5kbGVy
LT53b3JsZCgpLmlkZW50aWZpZXIoKSA9PSB3b3JsZC5pZGVudGlmaWVyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYWRkVXNlckNvbnRlbnRXb3JsZFVzZSh3b3Js
ZC5nZXQoKSk7CisgICAgYWRkVXNlckNvbnRlbnRXb3JsZFVzZSh3b3JsZCk7CiAKICAgICBtX3Nj
cmlwdE1lc3NhZ2VIYW5kbGVycy5hZGQoaGFuZGxlci5pZGVudGlmaWVyKCksICZoYW5kbGVyKTsK
IAogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNz
LnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdE1l
c3NhZ2VIYW5kbGVycyh7IHsgaGFuZGxlci5pZGVudGlmaWVyKCksIHdvcmxkLT5pZGVudGlmaWVy
KCksIGhhbmRsZXIubmFtZSgpIH0gfSksIGlkZW50aWZpZXIoKSk7CisgICAgICAgIHByb2Nlc3Mu
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0TWVz
c2FnZUhhbmRsZXJzKHsgeyBoYW5kbGVyLmlkZW50aWZpZXIoKSwgd29ybGQuaWRlbnRpZmllcigp
LCBoYW5kbGVyLm5hbWUoKSB9IH0pLCBpZGVudGlmaWVyKCkpOwogICAgIAogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMzI2LDcgKzMyNiw3IEBAIGJvb2wgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihXZWJTY3JpcHRNZXNzYWdlCiB2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJG
b3JOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkK
IHsKICAgICBmb3IgKGF1dG8gaXQgPSBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5iZWdpbigpLCBl
bmQgPSBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9PSBuYW1lICYmICZpdC0+dmFsdWUtPnVzZXJD
b250ZW50V29ybGQoKSA9PSAmd29ybGQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+bmFtZSgp
ID09IG5hbWUgJiYgaXQtPnZhbHVlLT53b3JsZCgpLmlkZW50aWZpZXIoKSA9PSB3b3JsZC5pZGVu
dGlmaWVyKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2Vz
KQogICAgICAgICAgICAgICAgIHByb2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpSZW1vdmVVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIod29ybGQuaWRlbnRpZmll
cigpLCBpdC0+dmFsdWUtPmlkZW50aWZpZXIoKSksIGlkZW50aWZpZXIoKSk7CiAKQEAgLTM0NSw3
ICszNDUsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxV
c2VyTWVzc2FnZUhhbmRsZXJzKEFQSTo6VXNlckNvbnRlbgogCiAgICAgdW5zaWduZWQgbnVtYmVy
UmVtb3ZlZCA9IDA7CiAgICAgbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMucmVtb3ZlSWYoWyZdKGF1
dG8mIGVudHJ5KSB7Ci0gICAgICAgIGlmICgmZW50cnkudmFsdWUtPnVzZXJDb250ZW50V29ybGQo
KSA9PSAmd29ybGQpIHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT53b3JsZCgpLmlkZW50aWZp
ZXIoKSA9PSB3b3JsZC5pZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgICsrbnVtYmVyUmVtb3Zl
ZDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkuaAppbmRleCA2NzZkMjM3YzMzOTZmOTQxNmM2NDlhMmQwYjI1ZGVl
OTI3MjEwMzZjLi40ZmZkODVmZDA0Nzg0ODQyYzUzYzk2N2NiNDlmMWYwYjAyMDRhMmMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKQEAgLTQxLDcgKzQxLDcgQEAKIG5h
bWVzcGFjZSBBUEkgewogY2xhc3MgQXJyYXk7CiBjbGFzcyBDb250ZW50UnVsZUxpc3Q7Ci1jbGFz
cyBDb250ZW50V29ybGQ7CitjbGFzcyBDb250ZW50V29ybGRCYXNlOwogY2xhc3MgVXNlckNvbnRl
bnRXb3JsZDsKIGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBVc2VyU3R5bGVTaGVldDsKQEAgLTEx
Nyw3ICsxMTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRQb3N0TWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBGcmFtZUluZm9EYXRhJiYsIHVpbnQ2
NF90IG1lc3NhZ2VIYW5kbGVySUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogCi0gICAg
dm9pZCBhZGRVc2VyQ29udGVudFdvcmxkVXNlKEFQSTo6VXNlckNvbnRlbnRXb3JsZCYpOworICAg
IHZvaWQgYWRkVXNlckNvbnRlbnRXb3JsZFVzZShBUEk6OkNvbnRlbnRXb3JsZEJhc2UmKTsKICAg
ICB2b2lkIHJlbW92ZVVzZXJDb250ZW50V29ybGRVc2VzKEFQSTo6VXNlckNvbnRlbnRXb3JsZCYs
IHVuc2lnbmVkIG51bWJlck9mVXNlc1RvUmVtb3ZlKTsKICAgICB2b2lkIHJlbW92ZVVzZXJDb250
ZW50V29ybGRVc2VzKEhhc2hDb3VudGVkU2V0PFJlZlB0cjxBUEk6OlVzZXJDb250ZW50V29ybGQ+
PiYpOwogICAgIGJvb2wgc2hvdWxkU2VuZFJlbW92ZVVzZXJDb250ZW50V29ybGRzTWVzc2FnZShB
UEk6OlVzZXJDb250ZW50V29ybGQmLCB1bnNpZ25lZCBudW1iZXJPZlVzZXNUb1JlbW92ZSk7CkBA
IC0xMjcsNyArMTI3LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8QVBJOjpBcnJheT4gbV91c2VyU2Ny
aXB0czsKICAgICBSZWY8QVBJOjpBcnJheT4gbV91c2VyU3R5bGVTaGVldHM7CiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyPj4gbV9zY3JpcHRNZXNz
YWdlSGFuZGxlcnM7Ci0gICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQSTo6VXNlckNvbnRlbnRX
b3JsZD4+IG1fdXNlckNvbnRlbnRXb3JsZHM7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQ
STo6Q29udGVudFdvcmxkQmFzZT4+IG1fY29udGVudFdvcmxkczsKIAogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAgICAgV2Vha0hhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9u
ZXR3b3JrUHJvY2Vzc2VzOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>