<?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>173955</bug_id>
          
          <creation_ts>2017-06-28 20:02:11 -0700</creation_ts>
          <short_desc>ResourceLoadObserver clean up</short_desc>
          <delta_ts>2017-06-28 20:55:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>japhet</cc>
    
    <cc>sam</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1323813</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-28 20:02:11 -0700</bug_when>
    <thetext>ResourceLoadObserver clean up: Modernize code a bit and get rid of unused variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323814</commentid>
    <comment_count>1</comment_count>
      <attachid>314098</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-28 20:03:21 -0700</bug_when>
    <thetext>Created attachment 314098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323820</commentid>
    <comment_count>2</comment_count>
      <attachid>314098</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:20:10 -0700</bug_when>
    <thetext>Comment on attachment 314098
Patch

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

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:80
&gt; +    m_queue-&gt;dispatch([this] {

Is this safe? What is keeping this alive?  Don&apos;t we usually do [protectedThis = makeRef(*this)] for things like this? (Same question for other queue usage.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:114
&gt; +    return Settings::resourceLoadStatisticsEnabled() &amp;&amp; !page-&gt;usesEphemeralSession() &amp;&amp; m_store;

Not related to the cleanup, but why is this a static setting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323821</commentid>
    <comment_count>3</comment_count>
      <attachid>314098</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-28 20:22:31 -0700</bug_when>
    <thetext>Comment on attachment 314098
Patch

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

&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:80
&gt;&gt; +    m_queue-&gt;dispatch([this] {
&gt; 
&gt; Is this safe? What is keeping this alive?  Don&apos;t we usually do [protectedThis = makeRef(*this)] for things like this? (Same question for other queue usage.

I guess this wasn&apos;t done in this class because ResourceLoadObserver is a singleton.

&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:114
&gt;&gt; +    return Settings::resourceLoadStatisticsEnabled() &amp;&amp; !page-&gt;usesEphemeralSession() &amp;&amp; m_store;
&gt; 
&gt; Not related to the cleanup, but why is this a static setting?

question for Brent or John.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323834</commentid>
    <comment_count>4</comment_count>
      <attachid>314098</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-28 20:33:12 -0700</bug_when>
    <thetext>Comment on attachment 314098
Patch

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

R=me

&gt;&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:80
&gt;&gt;&gt; +    m_queue-&gt;dispatch([this] {
&gt;&gt; 
&gt;&gt; Is this safe? What is keeping this alive?  Don&apos;t we usually do [protectedThis = makeRef(*this)] for things like this? (Same question for other queue usage.
&gt; 
&gt; I guess this wasn&apos;t done in this class because ResourceLoadObserver is a singleton.

Yeah, ResourceLoadObserver is NeverDestroyed.

&gt;&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:114
&gt;&gt;&gt; +    return Settings::resourceLoadStatisticsEnabled() &amp;&amp; !page-&gt;usesEphemeralSession() &amp;&amp; m_store;
&gt;&gt; 
&gt;&gt; Not related to the cleanup, but why is this a static setting?
&gt; 
&gt; question for Brent or John.

It’s certainly a system-wide setting, but it really should be at the same level as cookie accept policy. I’m not tied to it being a static setting if there is a cleaner way to represent it,  It’s certainly not something we control on a page level.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:-616
&gt; -    return primaryDomain;

Should we hold onto the comment here? (Use host if there is no TLD)

That’s not obvious to me, and might be surprising to others, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323835</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:36:09 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 314098 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314098&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:80
&gt; &gt;&gt; +    m_queue-&gt;dispatch([this] {
&gt; &gt; 
&gt; &gt; Is this safe? What is keeping this alive?  Don&apos;t we usually do [protectedThis = makeRef(*this)] for things like this? (Same question for other queue usage.
&gt; 
&gt; I guess this wasn&apos;t done in this class because ResourceLoadObserver is a
&gt; singleton.

Ah. It&apos;s quite sad that we added another singleton. I&apos;ve been working for a couple of years to make things owner (or at least shared ownership) by the page/view so separate users of WebKit in the same address space can not stomp on each other. Non-ephemeral session state is the white whale we haven&apos;t gotten to yet, but here lies another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323838</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-28 20:38:21 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; (In reply to Chris Dumez from comment #3)
&gt; &gt; Comment on attachment 314098 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=314098&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:80
&gt; &gt; &gt;&gt; +    m_queue-&gt;dispatch([this] {
&gt; &gt; &gt; 
&gt; &gt; &gt; Is this safe? What is keeping this alive?  Don&apos;t we usually do [protectedThis = makeRef(*this)] for things like this? (Same question for other queue usage.
&gt; &gt; 
&gt; &gt; I guess this wasn&apos;t done in this class because ResourceLoadObserver is a
&gt; &gt; singleton.
&gt; 
&gt; Ah. It&apos;s quite sad that we added another singleton. I&apos;ve been working for a
&gt; couple of years to make things owner (or at least shared ownership) by the
&gt; page/view so separate users of WebKit in the same address space can not
&gt; stomp on each other. Non-ephemeral session state is the white whale we
&gt; haven&apos;t gotten to yet, but here lies another.

White whale! :)

I.m totally happy to change this to something better. We think this is a global setting, but maybe there are cases where we want to compartmentalize this more,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323840</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:43:36 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #4)
&gt; Comment on attachment 314098 [details]
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:114
&gt; &gt;&gt;&gt; +    return Settings::resourceLoadStatisticsEnabled() &amp;&amp; !page-&gt;usesEphemeralSession() &amp;&amp; m_store;
&gt; &gt;&gt; 
&gt; &gt;&gt; Not related to the cleanup, but why is this a static setting?
&gt; &gt; 
&gt; &gt; question for Brent or John.
&gt; 
&gt; It’s certainly a system-wide setting, but it really should be at the same
&gt; level as cookie accept policy. I’m not tied to it being a static setting if
&gt; there is a cleaner way to represent it,  It’s certainly not something we
&gt; control on a page level.

In WebCore, there really isn&apos;t supposed to be anything wider than the Page level. Network and storage policies might be shared among WKWebViews at the WebKit level (via WKPreferences or maybe one day, the WKWebSiteDataStore will hold them), but when you get down to WebCore, the goal is to allow Pages to be maintain that state for all the objects below it. Some of those come through Setting (or properties directly on Page, like SessionID), some though clients registered with the Page at its creation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323842</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:44:20 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #6)
&gt; (In reply to Sam Weinig from comment #5)
&gt; &gt; (In reply to Chris Dumez from comment #3)
&gt; &gt; &gt; Comment on attachment 314098 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=314098&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:80
&gt; &gt; &gt; &gt;&gt; +    m_queue-&gt;dispatch([this] {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Is this safe? What is keeping this alive?  Don&apos;t we usually do [protectedThis = makeRef(*this)] for things like this? (Same question for other queue usage.
&gt; &gt; &gt; 
&gt; &gt; &gt; I guess this wasn&apos;t done in this class because ResourceLoadObserver is a
&gt; &gt; &gt; singleton.
&gt; &gt; 
&gt; &gt; Ah. It&apos;s quite sad that we added another singleton. I&apos;ve been working for a
&gt; &gt; couple of years to make things owner (or at least shared ownership) by the
&gt; &gt; page/view so separate users of WebKit in the same address space can not
&gt; &gt; stomp on each other. Non-ephemeral session state is the white whale we
&gt; &gt; haven&apos;t gotten to yet, but here lies another.
&gt; 
&gt; White whale! :)
&gt; 
&gt; I.m totally happy to change this to something better. We think this is a
&gt; global setting, but maybe there are cases where we want to compartmentalize
&gt; this more,

What exactly do you mean by &quot;we think this is a global setting&quot;?  What makes a setting a good candidate for being global?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323846</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-28 20:55:33 -0700</bug_when>
    <thetext>Committed r218914: &lt;http://trac.webkit.org/changeset/218914&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314098</attachid>
            <date>2017-06-28 20:03:21 -0700</date>
            <delta_ts>2017-06-28 20:42:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173955-20170628200320.patch</filename>
            <type>text/plain</type>
            <size>15575</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThkY2U3MmFmNTFiMzRk
Njk4ZmQ1MTk4ZTU4YzczNjQzMzc0NWRjYi4uZDljZjg5ZjY3NTEwOGM0MWE0NjkwMDY2NmRiOGQ5
MTU5YTFmNGVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA2LTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIgY2xlYW4gdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3Mzk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyIGNsZWFuIHVwOiBNb2Rlcm5pemUgY29kZSBhIGJpdCBh
bmQgZ2V0IHJpZCBvZiB1bnVzZWQgdmFyaWFibGVzLgorCisgICAgICAgICogbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpjbGVhckluTWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFj
dGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1h
cnlEb21haW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnN0YXRp
c3RpY3NGb3JPcmlnaW4pOgorCiAyMDE3LTA2LTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMTg3OTkpOiBbR1RLXVtX
UEVdIENyaXRpY2FsIHdhcm5pbmcgYXQgZXhpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKaW5kZXggZjhhNjZmOTVhZDYxMWVmZDFmN2ZkMjcxNjkz
NzhjOTRhMGFjNGZiMS4uNTc2YjE5MzkxMTFhNGNjNzFkNDJmNjE1YWM0Mzk2MWM2NDhhZDljNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBA
IC03Nyw3ICs3Nyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFySW5NZW1vcnlT
dG9yZSgpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXNdICgpIHsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
c10gewogICAgICAgICBtX3N0b3JlLT5jbGVhckluTWVtb3J5KCk7CiAgICAgfSk7CiB9CkBAIC04
OCw3ICs4OCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUKG1fcXVl
dWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzXSAoKSB7CisgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXNdIHsKICAgICAgICAgbV9zdG9yZS0+Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnQoKTsKICAgICB9KTsKIH0KQEAgLTExMCw5ICsxMTAsOCBAQCBib29sIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaG91bGRMb2coUGFnZSogcGFnZSkKICAgICAvLyBGSVhNRTogRXJyIG9uIHRoZSBz
YWZlIHNpZGUgdW50aWwgd2UgaGF2ZSBzb3J0ZWQgb3V0IHdoYXQgdG8gZG8gaW4gd29ya2VyIGNv
bnRleHRzCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IFNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpCi0gICAgICAgICYmICFw
YWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpCi0gICAgICAgICYmIG1fc3RvcmU7CisKKyAgICBy
ZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2Ut
PnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgJiYgbV9zdG9yZTsKIH0KIAogdm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3Qg
RnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0xMjYsOSArMTI1LDkgQEAg
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1l
JiBmcmFtZSwgY29uc3QgRnJhbWUmIHQKIAogICAgIGJvb2wgaXNSZWRpcmVjdCA9IGlzM3h4UmVk
aXJlY3QocmVkaXJlY3RSZXNwb25zZSk7CiAgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lLmlz
TWFpbkZyYW1lKCk7Ci0gICAgY29uc3QgVVJMJiBzb3VyY2VVUkwgPSBmcmFtZS5kb2N1bWVudCgp
LT51cmwoKTsKLSAgICBjb25zdCBVUkwmIHRhcmdldFVSTCA9IG5ld1JlcXVlc3QudXJsKCk7Ci0g
ICAgY29uc3QgVVJMJiBtYWluRnJhbWVVUkwgPSB0b3BGcmFtZS5kb2N1bWVudCgpLT51cmwoKTsK
KyAgICBhdXRvJiBzb3VyY2VVUkwgPSBmcmFtZS5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBhdXRv
JiB0YXJnZXRVUkwgPSBuZXdSZXF1ZXN0LnVybCgpOworICAgIGF1dG8mIG1haW5GcmFtZVVSTCA9
IHRvcEZyYW1lLmRvY3VtZW50KCktPnVybCgpOwogICAgIAogICAgIGlmICghdGFyZ2V0VVJMLmlz
VmFsaWQoKSB8fCAhbWFpbkZyYW1lVVJMLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTQ3LDkgKzE0Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdh
dGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiB0CiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMs
IGlzTWFpbkZyYW1lLCBpc1JlZGlyZWN0LCBzb3VyY2VQcmltYXJ5RG9tYWluID0gc291cmNlUHJp
bWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5G
cmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRhcmdldFVSTCA9IENyb3NzVGhyZWFk
Q29waWVyPFVSTD46OmNvcHkodGFyZ2V0VVJMKSwgbWFpbkZyYW1lVVJMID0gQ3Jvc3NUaHJlYWRD
b3BpZXI8VVJMPjo6Y29weShtYWluRnJhbWVVUkwpLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFy
Z2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKV0gKCkgewotICAgICAgICAKLSAgICAgICAg
YXV0byB0YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRhcmdldFVSTCk7Cisg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGlzTWFpbkZyYW1lLCBpc1JlZGlyZWN0LCBzb3Vy
Y2VQcmltYXJ5RG9tYWluID0gc291cmNlUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFp
bkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5
KCksIHRhcmdldFByaW1hcnlEb21haW4gPSB0YXJnZXRQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29w
eSgpXSB7CiAgICAgICAgIGJvb2wgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0g
ZmFsc2U7CiAgICAgICAgIAogICAgICAgICB7CkBAIC0xNjUsNyArMTYyLDYgQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwg
Y29uc3QgRnJhbWUmIHQKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB0YXJnZXRTdGF0aXN0
aWNzLnN1YmZyYW1lSGFzQmVlbkxvYWRlZEJlZm9yZSA9IHRydWU7CiAKLSAgICAgICAgICAgIGF1
dG8gbWFpbkZyYW1lT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYWluRnJhbWVVUkwp
OwogICAgICAgICAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0g
dGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJh
bWVQcmltYXJ5RG9tYWluKTsKICAgICAgICAgICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKQEAgLTIyOSwxMCArMjI1LDcgQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFt
ZSwgY29uc3QgUmVzb3UKICAgICBhdXRvIHRhcmdldEhvc3QgPSB0YXJnZXRVUkwuaG9zdCgpOwog
ICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IG1haW5GcmFtZVVSTC5ob3N0KCk7CiAKLSAgICBpZiAo
dGFyZ2V0SG9zdC5pc0VtcHR5KCkKLSAgICAgICAgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkK
LSAgICAgICAgfHwgdGFyZ2V0SG9zdCA9PSBtYWluRnJhbWVIb3N0Ci0gICAgICAgIHx8IChpc1Jl
ZGlyZWN0ICYmIHRhcmdldEhvc3QgPT0gc291cmNlVVJMLmhvc3QoKSkpCisgICAgaWYgKHRhcmdl
dEhvc3QuaXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3Qg
PT0gbWFpbkZyYW1lSG9zdCB8fCAoaXNSZWRpcmVjdCAmJiB0YXJnZXRIb3N0ID09IHNvdXJjZVVS
TC5ob3N0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHRhcmdldFByaW1hcnlEb21h
aW4gPSBwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7CkBAIC0yNDMsOCArMjM2LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBm
cmFtZSwgY29uc3QgUmVzb3UKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVChtX3F1
ZXVlKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgaXNSZWRpcmVjdCwgc291cmNlUHJp
bWFyeURvbWFpbiA9IHNvdXJjZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIG1haW5GcmFt
ZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0
YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwg
bWFpbkZyYW1lVVJMID0gbWFpbkZyYW1lVVJMLmlzb2xhdGVkQ29weSgpXSAoKSB7Ci0gICAgICAg
IAorICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBpc1JlZGlyZWN0LCBzb3VyY2VQcmltYXJ5
RG9tYWluID0gc291cmNlUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lUHJp
bWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRhcmdl
dFByaW1hcnlEb21haW4gPSB0YXJnZXRQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpXSB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gZmFsc2U7CiAg
ICAgICAgIAogICAgICAgICB7CkBAIC0yNTQsNyArMjQ2LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3Qg
UmVzb3UKICAgICAgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92
ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgogICAgICAgICBzaG91bGRGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+
IDA7CiAKLSAgICAgICAgYXV0byBtYWluRnJhbWVPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKG1haW5GcmFtZVVSTCk7CiAgICAgICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CiAgICAgICAgIGlmIChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICBz
aG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0cnVlOwpAQCAtMzA0LDE0ICsyOTUs
MTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyhjb25z
dCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdGEKICAgICBpZiAoIXNob3VsZExvZyhmcmFtZS0+
cGFnZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgVVJMJiBtYWluRnJhbWVVUkwg
PSBmcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgYXV0byYgbWFpbkZy
YW1lVVJMID0gZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpOwogCiAgICAgYXV0
byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKICAgICBhdXRvIG1haW5GcmFtZUhvc3Qg
PSBtYWluRnJhbWVVUkwuaG9zdCgpOwogICAgIAotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHko
KQotICAgICAgICB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKQotICAgICAgICB8fCB0YXJnZXRI
b3N0ID09IG1haW5GcmFtZUhvc3QpCisgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IG1h
aW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHByaW1h
cnlEb21haW4odGFyZ2V0VVJMKTsKQEAgLTMyMSw4ICszMTAsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3Qg
VVJMJiB0YQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHRhcmdldFByaW1hcnlEb21haW4gPSB0YXJnZXRQcmltYXJ5
RG9tYWluLmlzb2xhdGVkQ29weSgpLCBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gbWFpbkZyYW1l
UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lVVJMID0gbWFpbkZyYW1lVVJM
Lmlzb2xhdGVkQ29weSgpXSAoKSB7Ci0gICAgICAgIAorICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0
aGlzLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENv
cHkoKSwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNv
bGF0ZWRDb3B5KCldIHsKICAgICAgICAgYm9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIHsKQEAgLTMzMiw3ICszMjAsNiBAQCB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1l
KiBmcmFtZSwgY29uc3QgVVJMJiB0YQogICAgICAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZl
IHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCiAgICAgICAg
IHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0YXRpc3RpY3MuZGF0
YVJlY29yZHNSZW1vdmVkID4gMDsKICAgICAgICAgCi0gICAgICAgIGF1dG8gbWFpbkZyYW1lT3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYWluRnJhbWVVUkwpOwogICAgICAgICBhdXRv
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21h
aW4pOwogICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
ID0gdHJ1ZTsKQEAgLTM2NSwxMCArMzUyLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2MKICAg
ICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHByaW1hcnlEb21haW5TdHJpbmcgPSBwcmltYXJ5RG9tYWluKHVybCk7Ci0g
ICAgCiAgICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBw
cmltYXJ5RG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpblN0cmluZy5pc29sYXRlZENvcHkoKV0g
KCkgeworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcmltYXJ5RG9tYWluU3RyaW5nID0g
cHJpbWFyeURvbWFpbih1cmwpLmlzb2xhdGVkQ29weSgpXSB7CiAgICAgICAgIHsKICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKICAgICAg
ICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpblN0cmluZyk7CkBAIC0zODksMTAgKzM3NCw4IEBA
IHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwm
IHVybCkKICAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHByaW1hcnlEb21haW5TdHJpbmcgPSBwcmltYXJ5RG9tYWlu
KHVybCk7Ci0KICAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Ro
aXMsIHByaW1hcnlEb21haW5TdHJpbmcgPSBwcmltYXJ5RG9tYWluU3RyaW5nLmlzb2xhdGVkQ29w
eSgpXSAoKSB7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByaW1hcnlEb21haW5TdHJp
bmcgPSBwcmltYXJ5RG9tYWluKHVybCkuaXNvbGF0ZWRDb3B5KCldIHsKICAgICAgICAgewogICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwog
ICAgICAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3RyaW5nKTsKQEAgLTQ4NywxMSArNDcw
LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luKGNvbnN0IFVSTCYgc3ViZnJhbWUsIGMKICAgICBpZiAoc3ViZnJhbWUuaXNCbGFua1VS
TCgpIHx8IHN1YmZyYW1lLmlzRW1wdHkoKSB8fCB0b3BGcmFtZS5pc0JsYW5rVVJMKCkgfHwgdG9w
RnJhbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBwcmltYXJ5
VG9wRnJhbWVEb21haW5TdHJpbmcgPSBwcmltYXJ5RG9tYWluKHRvcEZyYW1lKTsKLSAgICBhdXRv
IHByaW1hcnlTdWJGcmFtZURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4oc3ViZnJhbWUpOwot
ICAgIAogICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5nID0gcHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5n
Lmlzb2xhdGVkQ29weSgpLCBwcmltYXJ5U3ViRnJhbWVEb21haW5TdHJpbmcgPSBwcmltYXJ5U3Vi
RnJhbWVEb21haW5TdHJpbmcuaXNvbGF0ZWRDb3B5KCldICgpIHsKKyAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpbih0
b3BGcmFtZSkuaXNvbGF0ZWRDb3B5KCksIHByaW1hcnlTdWJGcmFtZURvbWFpblN0cmluZyA9IHBy
aW1hcnlEb21haW4oc3ViZnJhbWUpLmlzb2xhdGVkQ29weSgpXSB7CiAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7CiAgICAgICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlTdWJGcmFtZURvbWFpblN0cmluZyk7CiAgICAgICAgIHN0YXRpc3RpY3Mu
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQocHJpbWFyeVRvcEZyYW1lRG9tYWluU3Ry
aW5nKTsKQEAgLTUwMywxMSArNDgzLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3VicmVzb3UKICAgICBp
ZiAoc3VicmVzb3VyY2UuaXNCbGFua1VSTCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8fCB0
b3BGcmFtZS5pc0JsYW5rVVJMKCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgYXV0byBwcmltYXJ5VG9wRnJhbWVEb21haW5TdHJpbmcgPSBwcmltYXJ5
RG9tYWluKHRvcEZyYW1lKTsKLSAgICBhdXRvIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpblN0cmlu
ZyA9IHByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpOwotICAgIAogICAgIEFTU0VSVChtX3F1ZXVl
KTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9tYWluU3Ry
aW5nID0gcHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5nLmlzb2xhdGVkQ29weSgpLCBwcmltYXJ5
U3VicmVzb3VyY2VEb21haW5TdHJpbmcgPSBwcmltYXJ5U3VicmVzb3VyY2VEb21haW5TdHJpbmcu
aXNvbGF0ZWRDb3B5KCldICgpIHsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJpbWFy
eVRvcEZyYW1lRG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpbih0b3BGcmFtZSkuaXNvbGF0ZWRD
b3B5KCksIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4oc3Vi
cmVzb3VyY2UpLmlzb2xhdGVkQ29weSgpXSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7CiAgICAgICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlTdWJyZXNvdXJjZURvbWFpblN0cmluZyk7CiAgICAgICAgIHN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQocHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5nKTsK
QEAgLTUxOSwxMSArNDk2LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UKICAgICBpZiAoc3Vi
cmVzb3VyY2UuaXNCbGFua1VSTCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8fCBob3N0TmFt
ZVJlZGlyZWN0ZWRUby5pc0JsYW5rVVJMKCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8uaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBwcmltYXJ5U3VicmVzb3VyY2VE
b21haW5TdHJpbmcgPSBwcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKTsKLSAgICBhdXRvIHByaW1h
cnlSZWRpcmVjdERvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVk
VG8pOwotICAgIAogICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
dGhpcywgcHJpbWFyeVJlZGlyZWN0RG9tYWluU3RyaW5nID0gcHJpbWFyeVJlZGlyZWN0RG9tYWlu
U3RyaW5nLmlzb2xhdGVkQ29weSgpLCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW5TdHJpbmcgPSBw
cmltYXJ5U3VicmVzb3VyY2VEb21haW5TdHJpbmcuaXNvbGF0ZWRDb3B5KCldICgpIHsKKyAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJpbWFyeVJlZGlyZWN0RG9tYWluU3RyaW5nID0gcHJp
bWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbykuaXNvbGF0ZWRDb3B5KCksIHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpLmlzb2xh
dGVkQ29weSgpXSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3Rh
dGlzdGljc0xvY2soKSk7CiAgICAgICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJyZXNvdXJjZURv
bWFpblN0cmluZyk7CiAgICAgICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUby5hZGQocHJpbWFyeVJlZGlyZWN0RG9tYWluU3RyaW5nKTsKQEAgLTU2MCw3ICs1MzQsNyBA
QCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KQogewogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91
bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpc10gKCkgeworICAgIG1fcXVl
dWUtPmRpc3BhdGNoKFt0aGlzXSB7CiAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOwogICAgIH0pOwogfQpAQCAtNTY5LDcgKzU0Myw3IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpCiB7CiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5
IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzXSAoKSB7CisgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXNdIHsKICAgICAgICAgbV9zdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC01NzgsNyArNTUyLDcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZl
Y3RvcjxTdHJpbmcKIHsKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5
c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGRvbWFp
bnNUb1JlbW92ZSA9IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShkb21h
aW5zVG9SZW1vdmUpLCBkb21haW5zVG9BZGQgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3Ry
aW5nPj46OmNvcHkoZG9tYWluc1RvQWRkKSwgY2xlYXJGaXJzdF0gKCkgeworICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCBkb21haW5zVG9SZW1vdmUgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0
b3I8U3RyaW5nPj46OmNvcHkoZG9tYWluc1RvUmVtb3ZlKSwgZG9tYWluc1RvQWRkID0gQ3Jvc3NU
aHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KGRvbWFpbnNUb0FkZCksIGNsZWFyRmly
c3RdIHsKICAgICAgICAgbV9zdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVy
KGRvbWFpbnNUb1JlbW92ZSwgZG9tYWluc1RvQWRkLCBjbGVhckZpcnN0KTsKICAgICB9KTsKIH0K
QEAgLTU5NywzMSArNTcxLDIxIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFy
eURvbWFpbihjb25zdCBVUkwmIHVybCkKIAogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpw
cmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBTdHJpbmcgcHJpbWFyeURv
bWFpbjsKICAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkKLSAgICAgICAg
cHJpbWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgibnVsbE9yaWdpbiIpOworCiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKLSAgICBl
bHNlIHsKLSAgICAgICAgcHJpbWFyeURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW4oaG9zdCk7Ci0gICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbiBlbXB0eSBzdHJpbmcgaGVyZSBp
ZiB0aGVyZSBpcyBubyBUTEQuCi0gICAgICAgIC8vIFVzZSB0aGUgaG9zdCBpbiBzdWNoIGNhc2Uu
Ci0gICAgICAgIGlmIChwcmltYXJ5RG9tYWluLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHByaW1h
cnlEb21haW4gPSBob3N0OwotICAgIH0KLSNlbHNlCi0gICAgZWxzZQotICAgICAgICBwcmltYXJ5
RG9tYWluID0gaG9zdDsKKyAgICBTdHJpbmcgcHJpbWFyeURvbWFpbiA9IHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW4oaG9zdCk7CisgICAgaWYgKCFwcmltYXJ5RG9tYWluLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHByaW1hcnlEb21haW47CiAjZW5kaWYKIAotICAgIHJldHVybiBwcmlt
YXJ5RG9tYWluOworICAgIHJldHVybiBob3N0OwogfQogCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCiB7Ci0gICAg
aWYgKCFtX3N0b3JlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBy
ZXR1cm4gbV9zdG9yZS0+c3RhdGlzdGljc0Zvck9yaWdpbihvcmlnaW4pOworICAgIHJldHVybiBt
X3N0b3JlID8gbV9zdG9yZS0+c3RhdGlzdGljc0Zvck9yaWdpbihvcmlnaW4pIDogZW1wdHlTdHJp
bmcoKTsKIH0KIAogfQo=
</data>
<flag name="review"
          id="334986"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>