<?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>138015</bug_id>
          
          <creation_ts>2014-10-23 12:59:15 -0700</creation_ts>
          <short_desc>[WK2] Use C++11 lambdas instead of helper methods in StorageManager</short_desc>
          <delta_ts>2015-02-22 08:25:11 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>140086</dup_id>
          
          <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="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1043811</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-23 12:59:15 -0700</bug_when>
    <thetext>[WK2] Remove uses of WTF::bind() in StorageManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043812</commentid>
    <comment_count>1</comment_count>
      <attachid>240362</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-23 13:05:05 -0700</bug_when>
    <thetext>Created attachment 240362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044145</commentid>
    <comment_count>2</comment_count>
      <attachid>240362</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-25 17:24:19 -0700</bug_when>
    <thetext>Comment on attachment 240362
Patch

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

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:392
&gt; +    RefPtr&lt;StorageManager&gt; protector(this);
&gt; +    RefPtr&lt;IPC::Connection&gt; allowedConnectionProtector(allowedConnection);

We normally use the word “protector” for something that only protects and is not used directly. For a protected value, I think “protected” would be better:

    protectedThis
    protectedAllowedConnection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044507</commentid>
    <comment_count>3</comment_count>
      <attachid>240362</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-28 09:37:21 -0700</bug_when>
    <thetext>Comment on attachment 240362
Patch

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

&gt; Source/WebKit2/ChangeLog:3
&gt; +        [WK2] Remove uses of WTF::bind() in StorageManager

I don’t like the title here. There’s nothing wrong with WTF::bind, it’s just that we prefer lambdas instead of separate functions for this kind of work.

&gt;&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:392
&gt;&gt; +    RefPtr&lt;IPC::Connection&gt; allowedConnectionProtector(allowedConnection);
&gt; 
&gt; We normally use the word “protector” for something that only protects and is not used directly. For a protected value, I think “protected” would be better:
&gt; 
&gt;     protectedThis
&gt;     protectedAllowedConnection

I’d like you to consider this name change throughout.

Also wondering if we could use Ref instead of RefPtr. Probably not.

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:445
&gt; +        HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt; storageAreasByConnection = protector-&gt;m_storageAreasByConnection;

Can use auto here instead of reciting the HashMap class name.

Might be worth adding a comment about why we need to copy the map here and naming the local variable to indicate that as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044740</commentid>
    <comment_count>4</comment_count>
      <attachid>240362</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-29 04:44:41 -0700</bug_when>
    <thetext>Comment on attachment 240362
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:3
&gt;&gt; +        [WK2] Remove uses of WTF::bind() in StorageManager
&gt; 
&gt; I don’t like the title here. There’s nothing wrong with WTF::bind, it’s just that we prefer lambdas instead of separate functions for this kind of work.

I&apos;ll come up with something more fitting.

&gt;&gt;&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:392
&gt;&gt;&gt; +    RefPtr&lt;IPC::Connection&gt; allowedConnectionProtector(allowedConnection);
&gt;&gt; 
&gt;&gt; We normally use the word “protector” for something that only protects and is not used directly. For a protected value, I think “protected” would be better:
&gt;&gt; 
&gt;&gt;     protectedThis
&gt;&gt;     protectedAllowedConnection
&gt; 
&gt; I’d like you to consider this name change throughout.
&gt; 
&gt; Also wondering if we could use Ref instead of RefPtr. Probably not.

I&apos;ll adopt the naming.

Using Ref isn&apos;t possible because it&apos;s not copyable.

&gt;&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:445
&gt;&gt; +        HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt; storageAreasByConnection = protector-&gt;m_storageAreasByConnection;
&gt; 
&gt; Can use auto here instead of reciting the HashMap class name.
&gt; 
&gt; Might be worth adding a comment about why we need to copy the map here and naming the local variable to indicate that as well.

Copying the HashMap isn&apos;t necessary.

In fact, using HashMap::removeIf() would work best here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044741</commentid>
    <comment_count>5</comment_count>
      <attachid>240597</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-29 04:59:37 -0700</bug_when>
    <thetext>Created attachment 240597
Patch

Asking for another review, especially regarding the use of removeIf() in StorageManager::processWillCloseConnection().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071069</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-02-22 08:24:58 -0800</bug_when>
    <thetext>Fixed in bug #140086.

*** This bug has been marked as a duplicate of bug 140086 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240362</attachid>
            <date>2014-10-23 13:05:05 -0700</date>
            <delta_ts>2014-10-29 04:59:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138015-20141023220510.patch</filename>
            <type>text/plain</type>
            <size>16848</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjA3Y2E5ZTI0NmFiOTE0
MzQxNzdmNmE5MzgwZmI5ODM4YmU5NmRkNy4uZjQ4NmNmNGQ0NzMzZGM3ZWYwNGRmM2FhYzRhMmVk
NTVlNTYwM2UwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTEwLTIzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0syXSBSZW1vdmUg
dXNlcyBvZiBXVEY6OmJpbmQoKSBpbiBTdG9yYWdlTWFuYWdlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDE1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIFdURjo6YmluZCgp
IHdpdGggQysrMTEgbGFtYmRhcy4gVGhlIGludGVybmFsIG1ldGhvZHMgYXJlIHJlbW92ZWQKKyAg
ICAgICAgaW4gZmF2b3Igb2YgY29kZSB0aGF0J3MgaW5saW5lZCBpbnNpZGUgdGhlIGxhbWJkYXMu
IEFkZGl0aW9uYWxseSB0aGUgcmFuZ2UtYmFzZWQKKyAgICAgICAgZm9yLWxvb3BzIGFyZSB1c2Vk
IHdoZXJlIGFwcHJvcHJpYXRlLgorCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFn
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6
ZGVzdHJveVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZU1hbmFnZXI6OnNldEFsbG93ZWRTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUNvbm5lY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpwcm9jZXNzV2lsbENsb3Nl
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5z
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldFN0b3JhZ2VEZXRhaWxzQnlP
cmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zv
ck9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVBbGxFbnRy
aWVzKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6ZGVzdHJveVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSW50ZXJuYWwpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6c2V0QWxsb3dlZFNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlQ29ubmVjdGlvbkludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjppbnZhbGlkYXRlQ29u
bmVjdGlvbkludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Y2FsbENhbGxiYWNr
RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0
T3JpZ2luc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW5JbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVFbnRyaWVzRm9yT3JpZ2luSW50ZXJuYWwp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlQWxsRW50
cmllc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9TdG9y
YWdlTWFuYWdlci5oOgorCiAyMDE0LTEwLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gaVBob25lIHVuc2VsZWN0aW5nIGl0ZW1zIGluIDxz
ZWxlY3QgbXVsdGlwbGU+IHNob3dzIGluY29ycmVjdCB2YWx1ZXMgc2VsZWN0ZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRl
eCAyOTk4ODFlYTEyN2JiNTRmODVkNTRlZWVjNzBiOTIxZGUyMTNmODI3Li4zNzdhMTJiNWU4MzYz
YWM2Yjg5ZmRjZTVlYzI0ZjcwMTM5M2IwOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0zODgsMjIgKzM4OCw0NSBA
QCBTdG9yYWdlTWFuYWdlcjo6flN0b3JhZ2VNYW5hZ2VyKCkKIAogdm9pZCBTdG9yYWdlTWFuYWdl
cjo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFj
ZUlELCBJUEM6OkNvbm5lY3Rpb24qIGFsbG93ZWRDb25uZWN0aW9uLCB1bnNpZ25lZCBxdW90YUlu
Qnl0ZXMpCiB7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1hbmFnZXI6OmNy
ZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSW50ZXJuYWwsIHRoaXMsIHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4oYWxsb3dlZENvbm5lY3Rpb24pLCBxdW90YUlu
Qnl0ZXMpKTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+IHByb3RlY3Rvcih0aGlzKTsKKyAg
ICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBhbGxvd2VkQ29ubmVjdGlvblByb3RlY3RvcihhbGxv
d2VkQ29ubmVjdGlvbik7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3Rvciwgc3RvcmFn
ZU5hbWVzcGFjZUlELCBhbGxvd2VkQ29ubmVjdGlvblByb3RlY3RvciwgcXVvdGFJbkJ5dGVzXSB7
CisgICAgICAgIEFTU0VSVCghcHJvdGVjdG9yLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5j
b250YWlucyhzdG9yYWdlTmFtZXNwYWNlSUQpKTsKKyAgICAgICAgcHJvdGVjdG9yLT5tX3Nlc3Np
b25TdG9yYWdlTmFtZXNwYWNlcy5zZXQoc3RvcmFnZU5hbWVzcGFjZUlELCBTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZTo6Y3JlYXRlKGFsbG93ZWRDb25uZWN0aW9uUHJvdGVjdG9yLmdldCgpLCBxdW90
YUluQnl0ZXMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCkKIHsKLSAg
ICBtX3F1ZXVlLT5kaXNwYXRjaChiaW5kKCZTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlSW50ZXJuYWwsIHRoaXMsIHN0b3JhZ2VOYW1lc3BhY2VJRCkpOworICAg
IFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gcHJvdGVjdG9yKHRoaXMpOworICAgIG1fcXVldWUtPmRp
c3BhdGNoKFtwcm90ZWN0b3IsIHN0b3JhZ2VOYW1lc3BhY2VJRF0geworICAgICAgICBBU1NFUlQo
cHJvdGVjdG9yLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5jb250YWlucyhzdG9yYWdlTmFt
ZXNwYWNlSUQpKTsKKyAgICAgICAgcHJvdGVjdG9yLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNl
cy5yZW1vdmUoc3RvcmFnZU5hbWVzcGFjZUlEKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdl
TWFuYWdlcjo6c2V0QWxsb3dlZFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlQ29ubmVjdGlvbih1aW50
NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIElQQzo6Q29ubmVjdGlvbiogYWxsb3dlZENvbm5lY3Rp
b24pCiB7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1hbmFnZXI6OnNldEFs
bG93ZWRTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUNvbm5lY3Rpb25JbnRlcm5hbCwgdGhpcywgc3Rv
cmFnZU5hbWVzcGFjZUlELCBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPihhbGxvd2VkQ29ubmVjdGlv
bikpKTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBS
ZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBhbGxvd2VkQ29ubmVjdGlvblByb3RlY3RvcihhbGxvd2Vk
Q29ubmVjdGlvbik7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3Rvciwgc3RvcmFnZU5h
bWVzcGFjZUlELCBhbGxvd2VkQ29ubmVjdGlvblByb3RlY3Rvcl0geworICAgICAgICBBU1NFUlQo
cHJvdGVjdG9yLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5jb250YWlucyhzdG9yYWdlTmFt
ZXNwYWNlSUQpKTsKKyAgICAgICAgcHJvdGVjdG9yLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNl
cy5nZXQoc3RvcmFnZU5hbWVzcGFjZUlEKS0+c2V0QWxsb3dlZENvbm5lY3Rpb24oYWxsb3dlZENv
bm5lY3Rpb25Qcm90ZWN0b3IuZ2V0KCkpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgdWludDY0X3QgbmV3U3RvcmFnZU5hbWVzcGFjZUlEKQogewotICAgIG1fcXVldWUtPmRp
c3BhdGNoKGJpbmQoJlN0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
SW50ZXJuYWwsIHRoaXMsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgbmV3U3RvcmFnZU5hbWVzcGFjZUlE
KSk7CisgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyPiBwcm90ZWN0b3IodGhpcyk7CisgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3Rvciwgc3RvcmFnZU5hbWVzcGFjZUlELCBuZXdTdG9yYWdl
TmFtZXNwYWNlSURdIHsKKyAgICAgICAgU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UqIHNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlID0gcHJvdGVjdG9yLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5n
ZXQoc3RvcmFnZU5hbWVzcGFjZUlEKTsKKyAgICAgICAgQVNTRVJUKHNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKTsKKworICAgICAgICBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSogbmV3U2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UgPSBwcm90ZWN0b3ItPm1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmdl
dChuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBBU1NFUlQobmV3U2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UpOworCisgICAgICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5jbG9uZVRv
KCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFn
ZU1hbmFnZXI6OnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5KiB3ZWJQ
cm9jZXNzUHJveHkpCkBAIC00MTUsMjcgKzQzOCw3MSBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpw
cm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqIHdlYlByb2Nlc3NQcm94
eQogewogICAgIHdlYlByb2Nlc3NQcm94eS0+Y29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpOwogCi0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1hbmFnZXI6Omlu
dmFsaWRhdGVDb25uZWN0aW9uSW50ZXJuYWwsIHRoaXMsIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+
KHdlYlByb2Nlc3NQcm94eS0+Y29ubmVjdGlvbigpKSkpOworICAgIFJlZlB0cjxTdG9yYWdlTWFu
YWdlcj4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5l
Y3Rpb25Qcm90ZWN0b3Iod2ViUHJvY2Vzc1Byb3h5LT5jb25uZWN0aW9uKCkpOworICAgIG1fcXVl
dWUtPmRpc3BhdGNoKFtwcm90ZWN0b3IsIGNvbm5lY3Rpb25Qcm90ZWN0b3JdIHsKKyAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgdWludDY0X3Q+PiBjb25u
ZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZTsKKyAgICAgICAgSGFzaE1hcDxzdGQ6
OnBhaXI8UmVmUHRyPElQQzo6Q29ubmVjdGlvbj4sIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VB
cmVhPj4gc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uID0gcHJvdGVjdG9yLT5tX3N0b3JhZ2VBcmVh
c0J5Q29ubmVjdGlvbjsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IHN0b3JhZ2VBcmVh
c0J5Q29ubmVjdGlvbikgeworICAgICAgICAgICAgaWYgKGl0LmtleS5maXJzdCAhPSBjb25uZWN0
aW9uUHJvdGVjdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBp
dC52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoaXQua2V5LmZpcnN0LmdldCgpLCBpdC5rZXkuc2Vjb25k
KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlLmFw
cGVuZChpdC5rZXkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogY29u
bmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXJzVG9SZW1vdmUpCisgICAgICAgICAgICBwcm90ZWN0
b3ItPm1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLnJlbW92ZShwYWlyKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0T3JpZ2lucyhGdW5jdGlvbkRpc3BhdGNoZXImIGNh
bGxiYWNrRGlzcGF0Y2hlciwgdm9pZCogY29udGV4dCwgdm9pZCAoKmNhbGxiYWNrKShjb25zdCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4mIHNlY3VyaXR5T3JpZ2lucywg
dm9pZCogY29udGV4dCkpCiB7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1h
bmFnZXI6OmdldE9yaWdpbnNJbnRlcm5hbCwgdGhpcywgUmVmUHRyPEZ1bmN0aW9uRGlzcGF0Y2hl
cj4oJmNhbGxiYWNrRGlzcGF0Y2hlciksIGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgUmVmUHRy
PFN0b3JhZ2VNYW5hZ2VyPiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uRGlz
cGF0Y2hlcj4gY2FsbGJhY2tEaXNwYXRjaGVyUHJvdGVjdG9yKCZjYWxsYmFja0Rpc3BhdGNoZXIp
OworICAgIG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0b3IsIGNhbGxiYWNrRGlzcGF0Y2hlclBy
b3RlY3RvciwgY2FsbGJhY2ssIGNvbnRleHRdIHsKKyAgICAgICAgYXV0byogc2VjdXJpdHlPcmln
aW5zUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPj4+KHByb3RlY3Rvci0+bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPm9yaWdp
bnMoKSkucmVsZWFzZSgpOworICAgICAgICBjYWxsYmFja0Rpc3BhdGNoZXJQcm90ZWN0b3ItPmRp
c3BhdGNoKFtzZWN1cml0eU9yaWdpbnNQdHIsIGNhbGxiYWNrLCBjb250ZXh0XSB7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4+PiBzZWN1cml0eU9yaWdpbnMoc2VjdXJpdHlPcmlnaW5zUHRyKTsKKyAgICAgICAgICAgIGNh
bGxiYWNrKCpzZWN1cml0eU9yaWdpbnMsIGNvbnRleHQpOworICAgICAgICB9KTsKKyAgICB9KTsK
IH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihGdW5j
dGlvbkRpc3BhdGNoZXImIGNhbGxiYWNrRGlzcGF0Y2hlciwgdm9pZCogY29udGV4dCwgdm9pZCAo
KmNhbGxiYWNrKShjb25zdCBWZWN0b3I8TG9jYWxTdG9yYWdlRGV0YWlscz4mIHN0b3JhZ2VEZXRh
aWxzLCB2b2lkKiBjb250ZXh0KSkKIHsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChiaW5kKCZTdG9y
YWdlTWFuYWdlcjo6Z2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbkludGVybmFsLCB0aGlzLCBSZWZQ
dHI8RnVuY3Rpb25EaXNwYXRjaGVyPigmY2FsbGJhY2tEaXNwYXRjaGVyKSwgY29udGV4dCwgY2Fs
bGJhY2spKTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+IHByb3RlY3Rvcih0aGlzKTsKKyAg
ICBSZWZQdHI8RnVuY3Rpb25EaXNwYXRjaGVyPiBjYWxsYmFja0Rpc3BhdGNoZXJQcm90ZWN0b3Io
JmNhbGxiYWNrRGlzcGF0Y2hlcik7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3Rvciwg
Y2FsbGJhY2tEaXNwYXRjaGVyUHJvdGVjdG9yLCBjYWxsYmFjaywgY29udGV4dF0geworICAgICAg
ICAvLyBGSVhNRTogVXNpbmcgdGhlIEMrKzExIGxhbWJkYSBpbnRyb2R1Y2VzIGFuIHVuZm9ydHVu
YXRlIGNvcHkgb2YgdGhlIFZlY3RvciBvYmplY3QuCisgICAgICAgIFZlY3RvcjxMb2NhbFN0b3Jh
Z2VEZXRhaWxzPiBzdG9yYWdlRGV0YWlscyA9IHByb3RlY3Rvci0+bV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXItPmRldGFpbHMoKTsKKyAgICAgICAgY2FsbGJhY2tEaXNwYXRjaGVyUHJvdGVj
dG9yLT5kaXNwYXRjaChbY2FsbGJhY2ssIHN0b3JhZ2VEZXRhaWxzLCBjb250ZXh0XSB7CisgICAg
ICAgICAgICBjYWxsYmFjayhzdG9yYWdlRGV0YWlscywgY29udGV4dCk7CisgICAgICAgIH0pOwor
ICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVFbnRyaWVzRm9yT3JpZ2lu
KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICBtX3F1ZXVlLT5k
aXNwYXRjaChiaW5kKCZTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zvck9yaWdpbkludGVy
bmFsLCB0aGlzLCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KGNvbnN0X2Nhc3Q8U2VjdXJpdHlPcmln
aW4qPigmc2VjdXJpdHlPcmlnaW4pKSkpOworICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gcHJv
dGVjdG9yKHRoaXMpOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW5Q
cm90ZWN0b3IoY29uc3RfY2FzdDxTZWN1cml0eU9yaWdpbio+KCZzZWN1cml0eU9yaWdpbikpOwor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0b3IsIHNlY3VyaXR5T3JpZ2luUHJvdGVjdG9y
XSB7CisgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiBwcm90ZWN0b3ItPm1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlLT5jbGVhclN0b3JhZ2VBcmVh
c01hdGNoaW5nT3JpZ2luKHNlY3VyaXR5T3JpZ2luUHJvdGVjdG9yLmdldCgpKTsKKworICAgICAg
ICBwcm90ZWN0b3ItPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFz
ZVdpdGhPcmlnaW4oc2VjdXJpdHlPcmlnaW5Qcm90ZWN0b3IuZ2V0KCkpOworICAgIH0pOwogfQog
CiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVBbGxFbnRyaWVzKCkKIHsKLSAgICBtX3F1ZXVl
LT5kaXNwYXRjaChiaW5kKCZTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlQWxsRW50cmllc0ludGVybmFs
LCB0aGlzKSk7CisgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyPiBwcm90ZWN0b3IodGhpcyk7Cisg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3Rvcl0geworICAgICAgICBmb3IgKGF1dG8mIHZh
bHVlIDogcHJvdGVjdG9yLT5tX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAg
ICAgICAgICB2YWx1ZS0+Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKKworICAgICAgICBwcm90ZWN0
b3ItPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVBbGxEYXRhYmFzZXMoKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFw
KElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50
NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJp
dHlPcmlnaW5EYXRhKQpAQCAtNTU4LDM3ICs2MjUsNiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpj
bGVhcihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwg
dQogICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVh
cihzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFn
ZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSW50ZXJuYWwodWludDY0X3Qgc3RvcmFn
ZU5hbWVzcGFjZUlELCBJUEM6OkNvbm5lY3Rpb24qIGFsbG93ZWRDb25uZWN0aW9uLCB1bnNpZ25l
ZCBxdW90YUluQnl0ZXMpCi17Ci0gICAgQVNTRVJUKCFtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNl
cy5jb250YWlucyhzdG9yYWdlTmFtZXNwYWNlSUQpKTsKLQotICAgIG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLnNldChzdG9yYWdlTmFtZXNwYWNlSUQsIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
OjpjcmVhdGUoYWxsb3dlZENvbm5lY3Rpb24sIHF1b3RhSW5CeXRlcykpOwotfQotCi12b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCh1aW50
NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQpCi17Ci0gICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmNvbnRhaW5zKHN0b3JhZ2VOYW1lc3BhY2VJRCkpOwotICAgIG1fc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2VzLnJlbW92ZShzdG9yYWdlTmFtZXNwYWNlSUQpOwotfQotCi12b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpzZXRBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VDb25uZWN0aW9u
SW50ZXJuYWwodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBJUEM6OkNvbm5lY3Rpb24qIGFs
bG93ZWRDb25uZWN0aW9uKQotewotICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNl
cy5jb250YWlucyhzdG9yYWdlTmFtZXNwYWNlSUQpKTsKLQotICAgIG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpLT5zZXRBbGxvd2VkQ29ubmVjdGlvbihh
bGxvd2VkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVp
bnQ2NF90IG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCkKLXsKLSAgICBTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZSogc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgPSBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNl
cy5nZXQoc3RvcmFnZU5hbWVzcGFjZUlEKTsKLSAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UpOwotCi0gICAgU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UqIG5ld1Nlc3Npb25TdG9yYWdl
TmFtZXNwYWNlID0gbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMuZ2V0KG5ld1N0b3JhZ2VOYW1l
c3BhY2VJRCk7Ci0gICAgQVNTRVJUKG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKLQotICAg
IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5jbG9uZVRvKCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZSk7Ci19Ci0KIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0
ZSgpCiB7CiAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKQEAgLTYwNywyMiArNjQzLDYg
QEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCkKICAgICBz
ZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKIH0KIAot
dm9pZCBTdG9yYWdlTWFuYWdlcjo6aW52YWxpZGF0ZUNvbm5lY3Rpb25JbnRlcm5hbChJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8SVBD
OjpDb25uZWN0aW9uPiwgdWludDY0X3Q+PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNU
b1JlbW92ZTsKLSAgICBIYXNoTWFwPHN0ZDo6cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwg
dWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24g
PSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbjsKLSAgICBmb3IgKEhhc2hNYXA8c3RkOjpwYWly
PFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCB1aW50NjRfdD4sIFJlZlB0cjxTdG9yYWdlQXJlYT4+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5iZWdpbigpLCBl
bmQgPSBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPmtleS5maXJzdCAhPSBjb25uZWN0aW9uKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaXQtPnZhbHVlLT5yZW1vdmVMaXN0ZW5lcihpdC0+a2V5LmZpcnN0
LmdldCgpLCBpdC0+a2V5LnNlY29uZCk7Ci0gICAgICAgIGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFw
SURQYWlyc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlLnNpemUo
KTsgKytpKQotICAgICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoY29ubmVj
dGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXJzVG9SZW1vdmVbaV0pOwotfQotCiBTdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0CiB7CiAgICAg
c3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbiosIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFn
ZU1hcElEUGFpcihjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwpAQCAtNjQ0LDM5ICs2NjQsNCBA
QCBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBTdG9yYWdlTWFuYWdlcjo6
Z2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYQogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmdldCgpOwogfQogCi1zdGF0aWMgdm9pZCBjYWxsQ2FsbGJhY2tGdW5jdGlvbih2b2lkKiBj
b250ZXh0LCB2b2lkICgqY2FsbGJhY2tGdW5jdGlvbikoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbj4+JiBzZWN1cml0eU9yaWdpbnMsIHZvaWQqIGNvbnRleHQpLCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4qIHNlY3VyaXR5T3JpZ2luc1B0
cikKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbj4+PiBzZWN1cml0eU9yaWdpbnMoc2VjdXJpdHlPcmlnaW5zUHRyKTsKLSAgICBjYWxs
YmFja0Z1bmN0aW9uKCpzZWN1cml0eU9yaWdpbnMsIGNvbnRleHQpOwotfQotCi12b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpnZXRPcmlnaW5zSW50ZXJuYWwoRnVuY3Rpb25EaXNwYXRjaGVyKiBkaXNwYXRj
aGVyLCB2b2lkKiBjb250ZXh0LCB2b2lkICgqY2FsbGJhY2tGdW5jdGlvbikoY29uc3QgVmVjdG9y
PFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+JiBzZWN1cml0eU9yaWdpbnMsIHZvaWQq
IGNvbnRleHQpKQotewotICAgIGF1dG8gc2VjdXJpdHlPcmlnaW5zID0gc3RkOjptYWtlX3VuaXF1
ZTxWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4+KG1fbG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLT5vcmlnaW5zKCkpOwotICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoKGJp
bmQoY2FsbENhbGxiYWNrRnVuY3Rpb24sIGNvbnRleHQsIGNhbGxiYWNrRnVuY3Rpb24sIHNlY3Vy
aXR5T3JpZ2lucy5yZWxlYXNlKCkpKTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0U3Rv
cmFnZURldGFpbHNCeU9yaWdpbkludGVybmFsKEZ1bmN0aW9uRGlzcGF0Y2hlciogZGlzcGF0Y2hl
ciwgdm9pZCogY29udGV4dCwgdm9pZCAoKmNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFZlY3RvcjxM
b2NhbFN0b3JhZ2VEZXRhaWxzPiYgc3RvcmFnZURldGFpbHMsIHZvaWQqIGNvbnRleHQpKQotewot
ICAgIFZlY3RvcjxMb2NhbFN0b3JhZ2VEZXRhaWxzPiBzdG9yYWdlRGV0YWlscyA9IG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZXRhaWxzKCk7Ci0gICAgZGlzcGF0Y2hlci0+ZGlzcGF0
Y2goYmluZChjYWxsYmFja0Z1bmN0aW9uLCBXVEY6Om1vdmUoc3RvcmFnZURldGFpbHMpLCBjb250
ZXh0KSk7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUVudHJpZXNGb3JPcmlnaW5J
bnRlcm5hbChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgZm9yIChhdXRv
IGl0ID0gbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLmJlZ2luKCksIGVuZCA9IG1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUt
PmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwotCi0gICAg
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihz
ZWN1cml0eU9yaWdpbik7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUFsbEVudHJp
ZXNJbnRlcm5hbCgpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9sb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2VzLmJlZ2luKCksIGVuZCA9IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPmNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7Ci0K
LSAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGVsZXRlQWxsRGF0YWJhc2VzKCk7
Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaAppbmRleCA1NjljM2M2NTJiNGYwNWU3MjMx
ZTRjMmNkMWUzZTQ0YjkzNTlkZDE5Li44ODA2YzNmNDY5YTEyMGVhNWM2ZmQzODBmM2FlMDUxZDg5
NjBlNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9y
YWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKQEAgLTgzLDI0ICs4MywxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3Zl
SXRlbShJUEM6OkNvbm5lY3Rpb24qLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNv
dXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgY2xlYXIoSVBDOjpDb25u
ZWN0aW9uKiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJl
YUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwog
Ci0gICAgdm9pZCBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUludGVybmFsKHVpbnQ2NF90
IHN0b3JhZ2VOYW1lc3BhY2VJRCwgSVBDOjpDb25uZWN0aW9uKiBhbGxvd2VkQ29ubmVjdGlvbiwg
dW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKLSAgICB2b2lkIGRlc3Ryb3lTZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZUludGVybmFsKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgdm9pZCBz
ZXRBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VDb25uZWN0aW9uSW50ZXJuYWwodWludDY0
X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBJUEM6OkNvbm5lY3Rpb24qIGFsbG93ZWRDb25uZWN0aW9u
KTsKLSAgICB2b2lkIGNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCh1aW50NjRf
dCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVpbnQ2NF90IG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0K
LSAgICB2b2lkIGludmFsaWRhdGVDb25uZWN0aW9uSW50ZXJuYWwoSVBDOjpDb25uZWN0aW9uKik7
Ci0KICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAgICBTdG9yYWdlQXJlYSogZmluZFN0b3JhZ2VB
cmVhKElQQzo6Q29ubmVjdGlvbiosIHVpbnQ2NF90KSBjb25zdDsKIAogICAgIGNsYXNzIExvY2Fs
U3RvcmFnZU5hbWVzcGFjZTsKICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGdldE9yQ3JlYXRl
TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCk7CiAKLSAg
ICB2b2lkIGdldE9yaWdpbnNJbnRlcm5hbChGdW5jdGlvbkRpc3BhdGNoZXIqIGNhbGxiYWNrRGlz
cGF0Y2hlciwgdm9pZCogY29udGV4dCwgdm9pZCAoKmNhbGxiYWNrKShjb25zdCBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4mLCB2b2lkKiBjb250ZXh0KSk7Ci0gICAgdm9p
ZCBnZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luSW50ZXJuYWwoRnVuY3Rpb25EaXNwYXRjaGVyKiBj
YWxsYmFja0Rpc3BhdGNoZXIsIHZvaWQqIGNvbnRleHQsIHZvaWQgKCpjYWxsYmFjaykoY29uc3Qg
VmVjdG9yPExvY2FsU3RvcmFnZURldGFpbHM+Jiwgdm9pZCogY29udGV4dCkpOwotICAgIHZvaWQg
ZGVsZXRlRW50cmllc0Zvck9yaWdpbkludGVybmFsKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKik7
Ci0gICAgdm9pZCBkZWxldGVBbGxFbnRyaWVzSW50ZXJuYWwoKTsKLQogICAgIFJlZlB0cjxXb3Jr
UXVldWU+IG1fcXVldWU7CiAKICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
PiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240597</attachid>
            <date>2014-10-29 04:59:37 -0700</date>
            <delta_ts>2015-02-22 08:25:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138015-20141029125944.patch</filename>
            <type>text/plain</type>
            <size>16707</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2IwMjY1OWNkMDlmOTE5
N2Q1OTc2YWVlOTdiZTE1YzA2OTZlNTM5Zi4uNTE1YmIyNzZkZTc1Mjk2ODhiNWQwMjQyNDQxYWUw
ZmFlNGU2MDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTEwLTI5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0syXSBVc2UgQysr
MTEgbGFtYmRhcyBpbnN0ZWFkIG9mIGhlbHBlciBtZXRob2RzIGluIFN0b3JhZ2VNYW5hZ2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwMTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHVz
ZXMgb2YgV1RGOjpiaW5kKCkgd2l0aCBDKysxMSBsYW1iZGFzLiBUaGUgaW50ZXJuYWwgaGVscGVy
IG1ldGhvZHMgYXJlCisgICAgICAgIHJlbW92ZWQgaW4gZmF2b3Igb2YgY29kZSB0aGF0J3MgaW5s
aW5lZCBpbnNpZGUgdGhlIGxhbWJkYXMuIEFkZGl0aW9uYWxseSB0aGUKKyAgICAgICAgcmFuZ2Ut
YmFzZWQgZm9yLWxvb3BzIGFyZSB1c2VkIHdoZXJlIGFwcHJvcHJpYXRlLgorCisgICAgICAgICog
VUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEFsbG93ZWRTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6
Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjpwcm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zvck9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpkZWxldGVBbGxFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1h
bmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSW50ZXJuYWwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdl
cjo6c2V0QWxsb3dlZFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlQ29ubmVjdGlvbkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjppbnZhbGlkYXRlQ29ubmVjdGlvbkludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Y2FsbENhbGxiYWNrRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0T3JpZ2luc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW5JbnRl
cm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVF
bnRyaWVzRm9yT3JpZ2luSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlQWxsRW50cmllc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oOgorCiAyMDE0LTEwLTI4ICBUaW5n
LVdlaSBMYW4gIDxsYW50dzQ0QGdtYWlsLmNvbT4KIAogICAgICAgICBDYXN0IHN0ZDo6Y2hyb25v
OjpkdXJhdGlvbi5jb3VudCgpIHRvIGludDY0X3QgaW4gQXJndW1lbnRDb2RlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4
IDI5OTg4MWVhMTI3YmI1NGY4NWQ1NGVlZWM3MGI5MjFkZTIxM2Y4MjcuLjk1ZGFlNWJmMDgwNWM2
Y2NhNzI0YzUyYmI3M2E3MDljMzhjYzYyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTM4OCwyMiArMzg4LDQ1IEBA
IFN0b3JhZ2VNYW5hZ2VyOjp+U3RvcmFnZU1hbmFnZXIoKQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2Vy
OjpjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNl
SUQsIElQQzo6Q29ubmVjdGlvbiogYWxsb3dlZENvbm5lY3Rpb24sIHVuc2lnbmVkIHF1b3RhSW5C
eXRlcykKIHsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChiaW5kKCZTdG9yYWdlTWFuYWdlcjo6Y3Jl
YXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCwgdGhpcywgc3RvcmFnZU5hbWVzcGFj
ZUlELCBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPihhbGxvd2VkQ29ubmVjdGlvbiksIHF1b3RhSW5C
eXRlcykpOworICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBwcm90ZWN0ZWRBbGxvd2VkQ29ubmVjdGlvbihh
bGxvd2VkQ29ubmVjdGlvbik7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMs
IHN0b3JhZ2VOYW1lc3BhY2VJRCwgcHJvdGVjdGVkQWxsb3dlZENvbm5lY3Rpb24sIHF1b3RhSW5C
eXRlc10geworICAgICAgICBBU1NFUlQoIXByb3RlY3RlZFRoaXMtPm1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmNvbnRhaW5zKHN0b3JhZ2VOYW1lc3BhY2VJRCkpOworICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5tX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5zZXQoc3RvcmFnZU5hbWVzcGFjZUlE
LCBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Y3JlYXRlKHByb3RlY3RlZEFsbG93ZWRDb25uZWN0
aW9uLmdldCgpLCBxdW90YUluQnl0ZXMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFu
YWdlcjo6ZGVzdHJveVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1l
c3BhY2VJRCkKIHsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChiaW5kKCZTdG9yYWdlTWFuYWdlcjo6
ZGVzdHJveVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSW50ZXJuYWwsIHRoaXMsIHN0b3JhZ2VOYW1l
c3BhY2VJRCkpOworICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcywgc3RvcmFnZU5hbWVzcGFj
ZUlEXSB7CisgICAgICAgIEFTU0VSVChwcm90ZWN0ZWRUaGlzLT5tX3Nlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlcy5jb250YWlucyhzdG9yYWdlTmFtZXNwYWNlSUQpKTsKKyAgICAgICAgcHJvdGVjdGVk
VGhpcy0+bV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMucmVtb3ZlKHN0b3JhZ2VOYW1lc3BhY2VJ
RCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnNldEFsbG93ZWRTZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZUNvbm5lY3Rpb24odWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBJ
UEM6OkNvbm5lY3Rpb24qIGFsbG93ZWRDb25uZWN0aW9uKQogewotICAgIG1fcXVldWUtPmRpc3Bh
dGNoKGJpbmQoJlN0b3JhZ2VNYW5hZ2VyOjpzZXRBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VDb25uZWN0aW9uSW50ZXJuYWwsIHRoaXMsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgUmVmUHRyPElQ
Qzo6Q29ubmVjdGlvbj4oYWxsb3dlZENvbm5lY3Rpb24pKSk7CisgICAgUmVmUHRyPFN0b3JhZ2VN
YW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+
IHByb3RlY3RlZEFsbG93ZWRDb25uZWN0aW9uKGFsbG93ZWRDb25uZWN0aW9uKTsKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcywgc3RvcmFnZU5hbWVzcGFjZUlELCBwcm90ZWN0
ZWRBbGxvd2VkQ29ubmVjdGlvbl0geworICAgICAgICBBU1NFUlQocHJvdGVjdGVkVGhpcy0+bV9z
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMuY29udGFpbnMoc3RvcmFnZU5hbWVzcGFjZUlEKSk7Cisg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmdldChzdG9y
YWdlTmFtZXNwYWNlSUQpLT5zZXRBbGxvd2VkQ29ubmVjdGlvbihwcm90ZWN0ZWRBbGxvd2VkQ29u
bmVjdGlvbi5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb25l
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1aW50
NjRfdCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpCiB7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmlu
ZCgmU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCwg
dGhpcywgc3RvcmFnZU5hbWVzcGFjZUlELCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpKTsKKyAgICBS
ZWZQdHI8U3RvcmFnZU1hbmFnZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgbmV3U3RvcmFnZU5h
bWVzcGFjZUlEXSB7CisgICAgICAgIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKiBzZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSA9IHByb3RlY3RlZFRoaXMtPm1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Vz
LmdldChzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UpOworCisgICAgICAgIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKiBuZXdTZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZSA9IHByb3RlY3RlZFRoaXMtPm1fc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VzLmdldChuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBBU1NFUlQobmV3U2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UpOworCisgICAgICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5j
bG9uZVRvKCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CisgICAgfSk7CiB9CiAKIHZvaWQg
U3RvcmFnZU1hbmFnZXI6OnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5
KiB3ZWJQcm9jZXNzUHJveHkpCkBAIC00MTUsMjcgKzQzOCw2NyBAQCB2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpwcm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqIHdlYlByb2Nl
c3NQcm94eQogewogICAgIHdlYlByb2Nlc3NQcm94eS0+Y29ubmVjdGlvbigpLT5yZW1vdmVXb3Jr
UXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpOwogCi0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1hbmFn
ZXI6OmludmFsaWRhdGVDb25uZWN0aW9uSW50ZXJuYWwsIHRoaXMsIFJlZlB0cjxJUEM6OkNvbm5l
Y3Rpb24+KHdlYlByb2Nlc3NQcm94eS0+Y29ubmVjdGlvbigpKSkpOworICAgIFJlZlB0cjxTdG9y
YWdlTWFuYWdlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8SVBDOjpDb25uZWN0
aW9uPiBwcm90ZWN0ZWRDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eS0+Y29ubmVjdGlvbigpKTsK
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcywgcHJvdGVjdGVkQ29ubmVjdGlv
bl0geworICAgICAgICB1c2luZyBLZXlWYWx1ZVBhaXJUeXBlID0gZGVjbHR5cGUobV9zdG9yYWdl
QXJlYXNCeUNvbm5lY3Rpb24pOjpLZXlWYWx1ZVBhaXJUeXBlOworICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5tX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmVJZihbcHJvdGVjdGVkQ29ubmVj
dGlvbl0gKGNvbnN0IEtleVZhbHVlUGFpclR5cGUmIHBhaXIpIHsKKyAgICAgICAgICAgIGlmIChw
YWlyLmtleS5maXJzdCAhPSBwcm90ZWN0ZWRDb25uZWN0aW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgcGFpci52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIocGFp
ci5rZXkuZmlyc3QuZ2V0KCksIHBhaXIua2V5LnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6Omdl
dE9yaWdpbnMoRnVuY3Rpb25EaXNwYXRjaGVyJiBjYWxsYmFja0Rpc3BhdGNoZXIsIHZvaWQqIGNv
bnRleHQsIHZvaWQgKCpjYWxsYmFjaykoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbj4+JiBzZWN1cml0eU9yaWdpbnMsIHZvaWQqIGNvbnRleHQpKQogewotICAgIG1f
cXVldWUtPmRpc3BhdGNoKGJpbmQoJlN0b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5zSW50ZXJuYWws
IHRoaXMsIFJlZlB0cjxGdW5jdGlvbkRpc3BhdGNoZXI+KCZjYWxsYmFja0Rpc3BhdGNoZXIpLCBj
b250ZXh0LCBjYWxsYmFjaykpOworICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25EaXNwYXRjaGVyPiBwcm90ZWN0ZWRDYWxs
YmFja0Rpc3BhdGNoZXIoJmNhbGxiYWNrRGlzcGF0Y2hlcik7CisgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMsIHByb3RlY3RlZENhbGxiYWNrRGlzcGF0Y2hlciwgY2FsbGJhY2ss
IGNvbnRleHRdIHsKKyAgICAgICAgYXV0byogc2VjdXJpdHlPcmlnaW5zUHRyID0gc3RkOjptYWtl
X3VuaXF1ZTxWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4+KHByb3RlY3Rl
ZFRoaXMtPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmlnaW5zKCkpLnJlbGVhc2Uo
KTsKKyAgICAgICAgcHJvdGVjdGVkQ2FsbGJhY2tEaXNwYXRjaGVyLT5kaXNwYXRjaChbc2VjdXJp
dHlPcmlnaW5zUHRyLCBjYWxsYmFjaywgY29udGV4dF0geworICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+Pj4gc2VjdXJpdHlP
cmlnaW5zKHNlY3VyaXR5T3JpZ2luc1B0cik7CisgICAgICAgICAgICBjYWxsYmFjaygqc2VjdXJp
dHlPcmlnaW5zLCBjb250ZXh0KTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3Rv
cmFnZU1hbmFnZXI6OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oRnVuY3Rpb25EaXNwYXRjaGVy
JiBjYWxsYmFja0Rpc3BhdGNoZXIsIHZvaWQqIGNvbnRleHQsIHZvaWQgKCpjYWxsYmFjaykoY29u
c3QgVmVjdG9yPExvY2FsU3RvcmFnZURldGFpbHM+JiBzdG9yYWdlRGV0YWlscywgdm9pZCogY29u
dGV4dCkpCiB7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1hbmFnZXI6Omdl
dFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW5JbnRlcm5hbCwgdGhpcywgUmVmUHRyPEZ1bmN0aW9uRGlz
cGF0Y2hlcj4oJmNhbGxiYWNrRGlzcGF0Y2hlciksIGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAg
UmVmUHRyPFN0b3JhZ2VNYW5hZ2VyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxG
dW5jdGlvbkRpc3BhdGNoZXI+IHByb3RlY3RlZENhbGxiYWNrRGlzcGF0Y2hlcigmY2FsbGJhY2tE
aXNwYXRjaGVyKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcywgcHJvdGVj
dGVkQ2FsbGJhY2tEaXNwYXRjaGVyLCBjYWxsYmFjaywgY29udGV4dF0geworICAgICAgICAvLyBG
SVhNRTogVXNpbmcgdGhlIEMrKzExIGxhbWJkYSBpbnRyb2R1Y2VzIGFuIHVuZm9ydHVuYXRlIGNv
cHkgb2YgdGhlIFZlY3RvciBvYmplY3QuCisgICAgICAgIFZlY3RvcjxMb2NhbFN0b3JhZ2VEZXRh
aWxzPiBzdG9yYWdlRGV0YWlscyA9IHByb3RlY3RlZFRoaXMtPm1fbG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLT5kZXRhaWxzKCk7CisgICAgICAgIHByb3RlY3RlZENhbGxiYWNrRGlzcGF0Y2hl
ci0+ZGlzcGF0Y2goW2NhbGxiYWNrLCBzdG9yYWdlRGV0YWlscywgY29udGV4dF0geworICAgICAg
ICAgICAgY2FsbGJhY2soc3RvcmFnZURldGFpbHMsIGNvbnRleHQpOworICAgICAgICB9KTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zvck9yaWdpbihj
b25zdCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goYmluZCgmU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUVudHJpZXNGb3JPcmlnaW5JbnRlcm5h
bCwgdGhpcywgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPihjb25zdF9jYXN0PFNlY3VyaXR5T3JpZ2lu
Kj4oJnNlY3VyaXR5T3JpZ2luKSkpKTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcm90ZWN0ZWRTZWN1
cml0eU9yaWdpbihjb25zdF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oJnNlY3VyaXR5T3JpZ2luKSk7
CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMsIHByb3RlY3RlZFNlY3VyaXR5
T3JpZ2luXSB7CisgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiBwcm90ZWN0ZWRUaGlzLT5tX2xv
Y2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgICAgICB2YWx1ZS0+Y2xlYXJT
dG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihwcm90ZWN0ZWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7
CisKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIt
PmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihwcm90ZWN0ZWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7
CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUFsbEVudHJpZXMoKQog
ewotICAgIG1fcXVldWUtPmRpc3BhdGNoKGJpbmQoJlN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVBbGxF
bnRyaWVzSW50ZXJuYWwsIHRoaXMpKTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXNdIHsK
KyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHByb3RlY3RlZFRoaXMtPm1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlLT5jbGVhckFsbFN0b3JhZ2VB
cmVhcygpOworCisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyLT5kZWxldGVBbGxEYXRhYmFzZXMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdl
TWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW5EYXRhKQpAQCAtNTU4LDM3ICs2
MjEsNiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdQogICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VN
YXBJRCk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlSW50ZXJuYWwodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBJUEM6OkNvbm5lY3Rp
b24qIGFsbG93ZWRDb25uZWN0aW9uLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCi17Ci0gICAgQVNT
RVJUKCFtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5jb250YWlucyhzdG9yYWdlTmFtZXNwYWNl
SUQpKTsKLQotICAgIG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnNldChzdG9yYWdlTmFtZXNw
YWNlSUQsIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjpjcmVhdGUoYWxsb3dlZENvbm5lY3Rpb24s
IHF1b3RhSW5CeXRlcykpOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQpCi17
Ci0gICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmNvbnRhaW5zKHN0b3JhZ2VO
YW1lc3BhY2VJRCkpOwotICAgIG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnJlbW92ZShzdG9y
YWdlTmFtZXNwYWNlSUQpOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpzZXRBbGxvd2VkU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VDb25uZWN0aW9uSW50ZXJuYWwodWludDY0X3Qgc3RvcmFnZU5h
bWVzcGFjZUlELCBJUEM6OkNvbm5lY3Rpb24qIGFsbG93ZWRDb25uZWN0aW9uKQotewotICAgIEFT
U0VSVChtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5jb250YWlucyhzdG9yYWdlTmFtZXNwYWNl
SUQpKTsKLQotICAgIG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNw
YWNlSUQpLT5zZXRBbGxvd2VkQ29ubmVjdGlvbihhbGxvd2VkQ29ubmVjdGlvbik7Ci19Ci0KLXZv
aWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCh1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVpbnQ2NF90IG5ld1N0b3JhZ2VOYW1lc3BhY2VJ
RCkKLXsKLSAgICBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSogc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UgPSBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5nZXQoc3RvcmFnZU5hbWVzcGFjZUlEKTsK
LSAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOwotCi0gICAgU2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UqIG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlID0gbV9zZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZXMuZ2V0KG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgQVNTRVJUKG5ld1Nl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKLQotICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5j
bG9uZVRvKCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7Ci19Ci0KIHZvaWQgU3RvcmFnZU1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpCiB7CiAgICAgQmluYXJ5U2VtYXBob3Jl
IHNlbWFwaG9yZTsKQEAgLTYwNywyMiArNjM5LDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6YXBw
bGljYXRpb25XaWxsVGVybWluYXRlKCkKICAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46Om1heCgpKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6aW52YWxp
ZGF0ZUNvbm5lY3Rpb25JbnRlcm5hbChJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgdWludDY0X3Q+PiBj
b25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZTsKLSAgICBIYXNoTWFwPHN0ZDo6
cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFy
ZWE+PiBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24gPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlv
bjsKLSAgICBmb3IgKEhhc2hNYXA8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCB1
aW50NjRfdD4sIFJlZlB0cjxTdG9yYWdlQXJlYT4+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0b3Jh
Z2VBcmVhc0J5Q29ubmVjdGlvbi5iZWdpbigpLCBlbmQgPSBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rp
b24uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPmtleS5maXJzdCAh
PSBjb25uZWN0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaXQtPnZhbHVl
LT5yZW1vdmVMaXN0ZW5lcihpdC0+a2V5LmZpcnN0LmdldCgpLCBpdC0+a2V5LnNlY29uZCk7Ci0g
ICAgICAgIGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlLmFwcGVuZChpdC0+
a2V5KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbm5lY3Rpb25BbmRT
dG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBtX3N0b3JhZ2VB
cmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXJzVG9S
ZW1vdmVbaV0pOwotfQotCiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5h
Z2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQpIGNvbnN0CiB7CiAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbios
IHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uLCBzdG9y
YWdlTWFwSUQpOwpAQCAtNjQ0LDM5ICs2NjAsNCBAQCBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9y
YWdlTmFtZXNwYWNlKiBTdG9yYWdlTWFuYWdlcjo6Z2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYQog
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi1zdGF0aWMgdm9p
ZCBjYWxsQ2FsbGJhY2tGdW5jdGlvbih2b2lkKiBjb250ZXh0LCB2b2lkICgqY2FsbGJhY2tGdW5j
dGlvbikoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+JiBzZWN1
cml0eU9yaWdpbnMsIHZvaWQqIGNvbnRleHQpLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPj4qIHNlY3VyaXR5T3JpZ2luc1B0cikKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+PiBzZWN1cml0eU9yaWdpbnMo
c2VjdXJpdHlPcmlnaW5zUHRyKTsKLSAgICBjYWxsYmFja0Z1bmN0aW9uKCpzZWN1cml0eU9yaWdp
bnMsIGNvbnRleHQpOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5zSW50ZXJu
YWwoRnVuY3Rpb25EaXNwYXRjaGVyKiBkaXNwYXRjaGVyLCB2b2lkKiBjb250ZXh0LCB2b2lkICgq
Y2FsbGJhY2tGdW5jdGlvbikoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbj4+JiBzZWN1cml0eU9yaWdpbnMsIHZvaWQqIGNvbnRleHQpKQotewotICAgIGF1dG8gc2Vj
dXJpdHlPcmlnaW5zID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPj4+KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmlnaW5zKCkp
OwotICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoKGJpbmQoY2FsbENhbGxiYWNrRnVuY3Rpb24sIGNv
bnRleHQsIGNhbGxiYWNrRnVuY3Rpb24sIHNlY3VyaXR5T3JpZ2lucy5yZWxlYXNlKCkpKTsKLX0K
LQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbkludGVybmFs
KEZ1bmN0aW9uRGlzcGF0Y2hlciogZGlzcGF0Y2hlciwgdm9pZCogY29udGV4dCwgdm9pZCAoKmNh
bGxiYWNrRnVuY3Rpb24pKGNvbnN0IFZlY3RvcjxMb2NhbFN0b3JhZ2VEZXRhaWxzPiYgc3RvcmFn
ZURldGFpbHMsIHZvaWQqIGNvbnRleHQpKQotewotICAgIFZlY3RvcjxMb2NhbFN0b3JhZ2VEZXRh
aWxzPiBzdG9yYWdlRGV0YWlscyA9IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZXRh
aWxzKCk7Ci0gICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2goYmluZChjYWxsYmFja0Z1bmN0aW9uLCBX
VEY6Om1vdmUoc3RvcmFnZURldGFpbHMpLCBjb250ZXh0KSk7Ci19Ci0KLXZvaWQgU3RvcmFnZU1h
bmFnZXI6OmRlbGV0ZUVudHJpZXNGb3JPcmlnaW5JbnRlcm5hbChTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4pCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9sb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2VzLmJlZ2luKCksIGVuZCA9IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdP
cmlnaW4oc2VjdXJpdHlPcmlnaW4pOwotCi0gICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihzZWN1cml0eU9yaWdpbik7Ci19Ci0KLXZvaWQg
U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUFsbEVudHJpZXNJbnRlcm5hbCgpCi17Ci0gICAgZm9yIChh
dXRvIGl0ID0gbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLmJlZ2luKCksIGVuZCA9IG1fbG9jYWxT
dG9yYWdlTmFtZXNwYWNlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFs
dWUtPmNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7Ci0KLSAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlci0+ZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFn
ZXIuaAppbmRleCA1NjljM2M2NTJiNGYwNWU3MjMxZTRjMmNkMWUzZTQ0YjkzNTlkZDE5Li44ODA2
YzNmNDY5YTEyMGVhNWM2ZmQzODBmM2FlMDUxZDg5NjBlNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTgzLDI0ICs4Mywx
MiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24qLCB1aW50
NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpOwogICAgIHZvaWQgY2xlYXIoSVBDOjpDb25uZWN0aW9uKiwgdWludDY0X3Qgc3RvcmFnZU1h
cElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogCi0gICAgdm9pZCBjcmVhdGVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZUludGVybmFsKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgSVBDOjpD
b25uZWN0aW9uKiBhbGxvd2VkQ29ubmVjdGlvbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKLSAg
ICB2b2lkIGRlc3Ryb3lTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUludGVybmFsKHVpbnQ2NF90IHN0
b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgdm9pZCBzZXRBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2VDb25uZWN0aW9uSW50ZXJuYWwodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBJUEM6
OkNvbm5lY3Rpb24qIGFsbG93ZWRDb25uZWN0aW9uKTsKLSAgICB2b2lkIGNsb25lU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2VJbnRlcm5hbCh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVpbnQ2
NF90IG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGVDb25uZWN0
aW9uSW50ZXJuYWwoSVBDOjpDb25uZWN0aW9uKik7Ci0KICAgICBjbGFzcyBTdG9yYWdlQXJlYTsK
ICAgICBTdG9yYWdlQXJlYSogZmluZFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiosIHVpbnQ2
NF90KSBjb25zdDsKIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZU5hbWVzcGFjZTsKICAgICBMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UqIGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2
NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCk7CiAKLSAgICB2b2lkIGdldE9yaWdpbnNJbnRlcm5hbChG
dW5jdGlvbkRpc3BhdGNoZXIqIGNhbGxiYWNrRGlzcGF0Y2hlciwgdm9pZCogY29udGV4dCwgdm9p
ZCAoKmNhbGxiYWNrKShjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
Pj4mLCB2b2lkKiBjb250ZXh0KSk7Ci0gICAgdm9pZCBnZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2lu
SW50ZXJuYWwoRnVuY3Rpb25EaXNwYXRjaGVyKiBjYWxsYmFja0Rpc3BhdGNoZXIsIHZvaWQqIGNv
bnRleHQsIHZvaWQgKCpjYWxsYmFjaykoY29uc3QgVmVjdG9yPExvY2FsU3RvcmFnZURldGFpbHM+
Jiwgdm9pZCogY29udGV4dCkpOwotICAgIHZvaWQgZGVsZXRlRW50cmllc0Zvck9yaWdpbkludGVy
bmFsKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKik7Ci0gICAgdm9pZCBkZWxldGVBbGxFbnRyaWVz
SW50ZXJuYWwoKTsKLQogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fcXVldWU7CiAKICAgICBSZWZQ
dHI8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>