<?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>173266</bug_id>
          
          <creation_ts>2017-06-12 10:16:16 -0700</creation_ts>
          <short_desc>API clients should not be passed by value to the setters</short_desc>
          <delta_ts>2017-06-14 09:13:31 -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>WebKit2</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="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1318271</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-12 10:16:16 -0700</bug_when>
    <thetext>The pattern we follow for all the clients is that when a client is unset (nullptr is passed to the setter) we create a new empty client, so the member is never nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318584</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 00:16:48 -0700</bug_when>
    <thetext>Well, we are actually passing nullptr to unset the client, so we need to assign nullptr to the parameter, which is not possible with UniqueRef. To use UniqueRef we would need to provide another method to unset/reset clients (or use std::optional?). I&apos;m not sure it&apos;s worth it, to be honest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318586</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 00:34:02 -0700</bug_when>
    <thetext>Ok, there&apos;s another possibility, if we add 

UniqueRef(std::unique_ptr&lt;U&gt;&amp;&amp; otherRef);

we can keep using a std::unique_ptr for the parameter, and don&apos;t need to change the code in the callers either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318602</commentid>
    <comment_count>3</comment_count>
      <attachid>312758</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 01:24:33 -0700</bug_when>
    <thetext>Created attachment 312758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318604</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-13 01:25:45 -0700</bug_when>
    <thetext>Attachment 312758 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:341:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318607</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 01:37:55 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #4)
&gt; Attachment 312758 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:341:  Code inside a
&gt; namespace should not be indented.  [whitespace/indent] [4]

I think style checker was confused by the previous line, code is correctly indented there.

&gt; Total errors found: 1 in 15 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318691</commentid>
    <comment_count>6</comment_count>
      <attachid>312758</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-13 10:00:38 -0700</bug_when>
    <thetext>Comment on attachment 312758
Patch

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

&gt; Source/WTF/wtf/UniqueRef.h:52
&gt; +    UniqueRef(std::unique_ptr&lt;U&gt;&amp;&amp; otherRef)

Right now a null UniqueRef is syntactically impossible to make.  This makes that not the case.  This is not what UniqueRef is supposed to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318709</commentid>
    <comment_count>7</comment_count>
      <attachid>312758</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 10:40:13 -0700</bug_when>
    <thetext>Comment on attachment 312758
Patch

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

&gt;&gt; Source/WTF/wtf/UniqueRef.h:52
&gt;&gt; +    UniqueRef(std::unique_ptr&lt;U&gt;&amp;&amp; otherRef)
&gt; 
&gt; Right now a null UniqueRef is syntactically impossible to make.  This makes that not the case.  This is not what UniqueRef is supposed to be.

Well, that&apos;s why there&apos;s ASSERT(m_ref) below. I agree it would be better a compile time check. Do you have any other suggestion? or better not to use UniqueRef for the clients in the end?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318756</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-13 13:12:13 -0700</bug_when>
    <thetext>I think it&apos;s better to use UniqueRef and to use makeUniqueRef to make them.  If you can&apos;t go to the source of these std::unique_ptrs and replace them with makeUniqueRef, let&apos;s leave them as std::unique_ptrs for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318951</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-13 18:21:35 -0700</bug_when>
    <thetext>It would be OK to make it so you can WTFMove a UniqueRef into a unique_ptr, but not the other way around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319001</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 22:24:00 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #8)
&gt; I think it&apos;s better to use UniqueRef and to use makeUniqueRef to make them. 
&gt; If you can&apos;t go to the source of these std::unique_ptrs and replace them
&gt; with makeUniqueRef, let&apos;s leave them as std::unique_ptrs for now.

The problem is not the source of the unique_ptrs, but the setters. This is what we do:

void setClient(std::unique_ptr&lt;Client&gt; client)
{
    if (!client)
        m_client = std::make_unique&lt;Client&gt;();
    else
        m_client = WTFMove(client);
}

There&apos;s no problem in using makeUniqueRef there, the problem is that the setter can&apos;t receive a null client if we use UniqueRef as the parameter. I guess we can still do this, keeping the unique_ptr as the parameter and leaking it to adopt it by the UniqueRef. I added the UniqueRef just for convenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319004</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 22:31:40 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #10)
&gt; (In reply to Alex Christensen from comment #8)
&gt; &gt; I think it&apos;s better to use UniqueRef and to use makeUniqueRef to make them. 
&gt; &gt; If you can&apos;t go to the source of these std::unique_ptrs and replace them
&gt; &gt; with makeUniqueRef, let&apos;s leave them as std::unique_ptrs for now.
&gt; 
&gt; The problem is not the source of the unique_ptrs, but the setters. This is
&gt; what we do:
&gt; 
&gt; void setClient(std::unique_ptr&lt;Client&gt; client)
&gt; {
&gt;     if (!client)
&gt;         m_client = std::make_unique&lt;Client&gt;();
&gt;     else
&gt;         m_client = WTFMove(client);
&gt; }
&gt; 
&gt; There&apos;s no problem in using makeUniqueRef there, the problem is that the
&gt; setter can&apos;t receive a null client if we use UniqueRef as the parameter. I
&gt; guess we can still do this, keeping the unique_ptr as the parameter and
&gt; leaking it to adopt it by the UniqueRef. I added the UniqueRef just for
&gt; convenience.

hmm, I don&apos;t think this is possible either, and using std::optional for the parameter would only make it more complex, IMO, so I&apos;m going to leave the unique_ptrs. I can reuse this bug to not pass the clients by value and use an rvalue ref like you and Darin suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319009</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 22:56:00 -0700</bug_when>
    <thetext>By using a rvalue reference we make it more explicit that the ownership is transferred and we avoid the parameter construction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319010</commentid>
    <comment_count>13</comment_count>
      <attachid>312860</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-13 22:59:03 -0700</bug_when>
    <thetext>Created attachment 312860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319128</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-14 08:31:14 -0700</bug_when>
    <thetext>I haven&apos;t looked at this closely, and maybe my question is obviously wrong, but here goes: why std::unique_ptr&lt;API::InjectedBundle::EditorClient&gt;&amp;&amp; and not just API::InjectedBundle::EditorClient&amp;&amp;? There&apos;s no polymorphism here, so is the pointer type really needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319149</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-14 09:13:31 -0700</bug_when>
    <thetext>Committed r218259: &lt;http://trac.webkit.org/changeset/218259&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312758</attachid>
            <date>2017-06-13 01:24:33 -0700</date>
            <delta_ts>2017-06-13 22:59:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-uniqueref-clients.diff</filename>
            <type>text/plain</type>
            <size>39893</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYTk3Y2Q2OGRiMzYuLmE1MWZjMjRhOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3
LTA2LTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBPYmplY3RzIG93bmluZyBBUEkgY2xpZW50cyBzaG91bGQgdXNlIFVuaXF1ZVJlZgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMjY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBpdCBwb3Nz
aWJsZSB0byBjcmVhdGUgYSBVbmlxdWVSZWYgZnJvbSBhIHN0ZDo6dW5pcXVlX3B0ci4KKworICAg
ICAgICAqIHd0Zi9VbmlxdWVSZWYuaDoKKyAgICAgICAgKFdURjo6VW5pcXVlUmVmOjpVbmlxdWVS
ZWYpOgorCiAyMDE3LTA2LTEyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFNjcmVlbiBzbGVlcHMgd2hpbGUgZG9pbmcgV2ViUlRDIHZpZGVvCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaCBiL1NvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5o
CmluZGV4IDIwMzk5NTBkOWQ4Li40NmUwZGFjOWQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVW5pcXVlUmVmLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTQ4LDYg
KzQ4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBVbmlxdWVSZWYoc3RkOjp1bmlxdWVfcHRyPFU+JiYg
b3RoZXJSZWYpCisgICAgICAgIDogbV9yZWYoV1RGTW92ZShvdGhlclJlZikpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9yZWYpOworICAgIH0KKwogICAgIFQmIGdldCgpIHsgQVNTRVJUKG1fcmVm
KTsgcmV0dXJuICptX3JlZjsgfQogICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1f
cmVmKTsgcmV0dXJuICptX3JlZjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTZiMDUxM2Q1MGUuLmY4MjY2
ZjZlNDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTctMDYtMTMgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIE9iamVjdHMgb3du
aW5nIEFQSSBjbGllbnRzIHNob3VsZCB1c2UgVW5pcXVlUmVmCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzMyNjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcGF0dGVybiB3ZSBmb2xsb3cgZm9yIG1v
c3Qgb2YgdGhlIGNsaWVudHMgaXMgdGhhdCB3aGVuIGEgY2xpZW50IGlzIHVuc2V0IChudWxscHRy
IGlzIHBhc3NlZCB0byB0aGUgc2V0dGVyKSB3ZQorICAgICAgICBjcmVhdGUgYSBuZXcgZW1wdHkg
Y2xpZW50LCBzbyB0aGUgbWVtYmVyIGlzIG5ldmVyIG51bGxwdHIuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6c2V0UHJvdmlkZXIp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJY29uRGF0YWJhc2U6OldlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklj
b25EYXRhYmFzZTo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFi
YXNlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzZXRMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldFBvbGljeUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0
Rm9ybUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0VUlDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5nQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGaW5kQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGaW5kTWF0Y2hlc0NsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRleHRNZW51Q2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2V0RnVsbHNjcmVlbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Z2V0TG9hZERlY2lzaW9uRm9ySWNvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZ1bGxzY3JlZW5DbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNvbnRleHRNZW51Q2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpmaW5kQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpmaW5kTWF0Y2hlc0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnVpQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpp
Y29uTG9hZGluZ0NsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEhpc3RvcnlDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0RG93bmxvYWRDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
V2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlQ29u
dGV4dE1lbnVDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRJbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEluamVjdGVk
QnVuZGxlRm9ybUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEluamVjdGVk
QnVuZGxlUGFnZUxvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldElu
amVjdGVkQnVuZGxlVUlDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjbG9zZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6aW5qZWN0ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjppbmplY3RlZEJ1bmRsZVVJQ2xpZW50KToKKwogMjAxNy0wNi0xMiAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgQWRkIEFQSTo6
R2VvbG9jYXRpb25Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5jcHAKaW5kZXggNTc4ZjE2OGE3ODIuLmNhYjhj
OGJkMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR2VvbG9jYXRp
b25NYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9s
b2NhdGlvbk1hbmFnZXJQcm94eS5jcHAKQEAgLTQ1LDE1ICs0NSwxNSBAQCBSZWY8V2ViR2VvbG9j
YXRpb25NYW5hZ2VyUHJveHk+IFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2Vi
UHJvY2Vzc1BvbwogCiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6V2ViR2VvbG9jYXRpb25N
YW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogICAgIDogV2ViQ29udGV4
dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi0gICAgLCBtX3Byb3ZpZGVyKHN0ZDo6bWFrZV91bmlx
dWU8QVBJOjpHZW9sb2NhdGlvblByb3ZpZGVyPigpKQorICAgICwgbV9wcm92aWRlcihtYWtlVW5p
cXVlUmVmPEFQSTo6R2VvbG9jYXRpb25Qcm92aWRlcj4oKSkKIHsKICAgICBXZWJDb250ZXh0U3Vw
cGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJH
ZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9
CiAKLXZvaWQgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk6OnNldFByb3ZpZGVyKHN0ZDo6dW5p
cXVlX3B0cjxBUEk6Okdlb2xvY2F0aW9uUHJvdmlkZXI+IHByb3ZpZGVyKQordm9pZCBXZWJHZW9s
b2NhdGlvbk1hbmFnZXJQcm94eTo6c2V0UHJvdmlkZXIoc3RkOjp1bmlxdWVfcHRyPEFQSTo6R2Vv
bG9jYXRpb25Qcm92aWRlcj4mJiBwcm92aWRlcikKIHsKICAgICBpZiAoIXByb3ZpZGVyKQotICAg
ICAgICBtX3Byb3ZpZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6Okdlb2xvY2F0aW9uUHJvdmlk
ZXI+KCk7CisgICAgICAgIG1fcHJvdmlkZXIgPSBtYWtlVW5pcXVlUmVmPEFQSTo6R2VvbG9jYXRp
b25Qcm92aWRlcj4oKTsKICAgICBlbHNlCiAgICAgICAgIG1fcHJvdmlkZXIgPSBXVEZNb3ZlKHBy
b3ZpZGVyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9s
b2NhdGlvbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkdlb2xv
Y2F0aW9uTWFuYWdlclByb3h5LmgKaW5kZXggZWU5NTMwYzQ3ZWYuLmEwOWViYzBjMDMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2Vy
UHJveHkuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgog
I2luY2x1ZGUgIldlYkNvbnRleHRTdXBwbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgUmVmPFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vz
c1Bvb2wqKTsKIAotICAgIHZvaWQgc2V0UHJvdmlkZXIoc3RkOjp1bmlxdWVfcHRyPEFQSTo6R2Vv
bG9jYXRpb25Qcm92aWRlcj4pOworICAgIHZvaWQgc2V0UHJvdmlkZXIoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6R2VvbG9jYXRpb25Qcm92aWRlcj4mJik7CiAKICAgICB2b2lkIHByb3ZpZGVyRGlkQ2hh
bmdlUG9zaXRpb24oV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiopOwogICAgIHZvaWQgcHJvdmlkZXJE
aWRGYWlsVG9EZXRlcm1pbmVQb3NpdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSA9IFN0
cmluZygpKTsKQEAgLTgxLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PGNvbnN0IElQ
Qzo6Q29ubmVjdGlvbjo6Q2xpZW50Kj4gbV91cGRhdGVSZXF1ZXN0ZXJzOwogICAgIEhhc2hTZXQ8
Y29uc3QgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQqPiBtX2hpZ2hBY2N1cmFjeVJlcXVlc3RlcnM7
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpHZW9sb2NhdGlvblByb3ZpZGVyPiBtX3Byb3Zp
ZGVyOworICAgIFVuaXF1ZVJlZjxBUEk6Okdlb2xvY2F0aW9uUHJvdmlkZXI+IG1fcHJvdmlkZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkljb25EYXRhYmFzZS5jcHAKaW5kZXggZTliYWJiYWZmZjkuLmRkMmM2MzAyMDJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcApAQCAtNTQsNyAr
NTQsNyBAQCBXZWJJY29uRGF0YWJhc2U6OldlYkljb25EYXRhYmFzZShXZWJQcm9jZXNzUG9vbCYg
cHJvY2Vzc1Bvb2wpCiAgICAgLCBtX3VybEltcG9ydENvbXBsZXRlZChmYWxzZSkKICAgICAsIG1f
ZGF0YWJhc2VDbGVhbnVwRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERlcmVmV2hlbkFw
cHJvcHJpYXRlKGZhbHNlKQotICAgICwgbV9jbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6Oklj
b25EYXRhYmFzZUNsaWVudD4oKSkKKyAgICAsIG1fY2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpJ
Y29uRGF0YWJhc2VDbGllbnQ+KCkpCiB7CiAgICAgbV9wcm9jZXNzUG9vbC0+YWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
KnRoaXMpOwogfQpAQCAtMjM1LDEwICsyMzUsMTAgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6OmNs
b3NlKCkKICAgICAgICAgbV9pY29uRGF0YWJhc2VJbXBsLT5jbG9zZSgpOwogfQogCi12b2lkIFdl
Ykljb25EYXRhYmFzZTo6c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okljb25EYXRhYmFz
ZUNsaWVudD4gY2xpZW50KQordm9pZCBXZWJJY29uRGF0YWJhc2U6OnNldENsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpJY29uRGF0YWJhc2VDbGllbnQ+JiYgY2xpZW50KQogewogICAgIGlmICgh
Y2xpZW50KQotICAgICAgICBtX2NsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpJY29uRGF0
YWJhc2VDbGllbnQ+KCk7CisgICAgICAgIG1fY2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6Oklj
b25EYXRhYmFzZUNsaWVudD4oKTsKICAgICBlbHNlCiAgICAgICAgIG1fY2xpZW50ID0gV1RGTW92
ZShjbGllbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5o
CmluZGV4IDNhNTYyYmQ4OTRkLi5kODVlYzdjZDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJJY29uRGF0YWJhc2UuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvSWNvbkRhdGFiYXNlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9OYXRpdmVJbWFnZS5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBEYXRhOwpAQCAtODEsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKTsKICAgICB2b2lkIGNs
b3NlKCk7CiAKLSAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJY29uRGF0
YWJhc2VDbGllbnQ+KTsKKyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJ
Y29uRGF0YWJhc2VDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkKGJvb2wpOwogCkBAIC0xMTUsNyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hv
dWxkRGVyZWZXaGVuQXBwcm9wcmlhdGU7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3RyaW5nPiBt
X3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXA7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJ
Y29uRGF0YWJhc2VDbGllbnQ+IG1fY2xpZW50OworICAgIFVuaXF1ZVJlZjxBUEk6Okljb25EYXRh
YmFzZUNsaWVudD4gbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjE3MDJjNTBlZjYuLjcx
MmJkYzU0MTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMzI0LDE1ICszMjQsMTYgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUGFnZVByb3h5OjpjcmVh
dGUoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JgogV2ViUGFnZVByb3h5
OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JiBw
cm9jZXNzLCB1aW50NjRfdCBwYWdlSUQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIGNv
bmZpZ3VyYXRpb24pCiAgICAgOiBtX3BhZ2VDbGllbnQocGFnZUNsaWVudCkKICAgICAsIG1fY29u
ZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pKQotICAgICwgbV9sb2FkZXJDbGllbnQo
c3RkOjptYWtlX3VuaXF1ZTxBUEk6OkxvYWRlckNsaWVudD4oKSkKLSAgICAsIG1fcG9saWN5Q2xp
ZW50KHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpQb2xpY3lDbGllbnQ+KCkpCi0gICAgLCBtX2Zvcm1D
bGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkZvcm1DbGllbnQ+KCkpCi0gICAgLCBtX3VpQ2xp
ZW50KHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpVSUNsaWVudD4oKSkKLSAgICAsIG1fZmluZENsaWVu
dChzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RmluZENsaWVudD4oKSkKLSAgICAsIG1fZmluZE1hdGNo
ZXNDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50PigpKQotICAg
ICwgbV9kaWFnbm9zdGljTG9nZ2luZ0NsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQ+KCkpCisgICAgLCBtX2xvYWRlckNsaWVudChtYWtlVW5pcXVlUmVm
PEFQSTo6TG9hZGVyQ2xpZW50PigpKQorICAgICwgbV9wb2xpY3lDbGllbnQobWFrZVVuaXF1ZVJl
ZjxBUEk6OlBvbGljeUNsaWVudD4oKSkKKyAgICAsIG1faWNvbkxvYWRpbmdDbGllbnQobWFrZVVu
aXF1ZVJlZjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PigpKQorICAgICwgbV9mb3JtQ2xpZW50KG1h
a2VVbmlxdWVSZWY8QVBJOjpGb3JtQ2xpZW50PigpKQorICAgICwgbV91aUNsaWVudChtYWtlVW5p
cXVlUmVmPEFQSTo6VUlDbGllbnQ+KCkpCisgICAgLCBtX2ZpbmRDbGllbnQobWFrZVVuaXF1ZVJl
ZjxBUEk6OkZpbmRDbGllbnQ+KCkpCisgICAgLCBtX2ZpbmRNYXRjaGVzQ2xpZW50KG1ha2VVbmlx
dWVSZWY8QVBJOjpGaW5kTWF0Y2hlc0NsaWVudD4oKSkKKyAgICAsIG1fZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50PigpKQog
I2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgICwgbV9jb250ZXh0TWVudUNsaWVudChzdGQ6
Om1ha2VfdW5pcXVlPEFQSTo6Q29udGV4dE1lbnVDbGllbnQ+KCkpCisgICAgLCBtX2NvbnRleHRN
ZW51Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpDb250ZXh0TWVudUNsaWVudD4oKSkKICNlbmRp
ZgogICAgICwgbV9uYXZpZ2F0aW9uU3RhdGUoc3RkOjptYWtlX3VuaXF1ZTxXZWJOYXZpZ2F0aW9u
U3RhdGU+KCkpCiAgICAgLCBtX3Byb2Nlc3MocHJvY2VzcykKQEAgLTM0NSw3ICszNDYsNyBAQCBX
ZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MsIHVpbgogICAgICwgbV9vdmVycmlkZUNvbnRlbnRTZWN1cml0eVBv
bGljeSB7IG1fY29uZmlndXJhdGlvbi0+b3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3koKSB9
CiAgICAgLCBtX3RyZWF0c1NIQTFDZXJ0aWZpY2F0ZXNBc0luc2VjdXJlKG1fY29uZmlndXJhdGlv
bi0+dHJlYXRzU0hBMVNpZ25lZENlcnRpZmljYXRlc0FzSW5zZWN1cmUoKSkKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0gICAgLCBtX2Z1bGxzY3JlZW5DbGllbnQoc3RkOjptYWtlX3VuaXF1
ZTxBUEk6OkZ1bGxzY3JlZW5DbGllbnQ+KCkpCisgICAgLCBtX2Z1bGxzY3JlZW5DbGllbnQobWFr
ZVVuaXF1ZVJlZjxBUEk6OkZ1bGxzY3JlZW5DbGllbnQ+KCkpCiAjZW5kaWYKICAgICAsIG1fZ2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIoKnRoaXMpCiAgICAgLCBtX25vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigqdGhpcykKQEAgLTQ3OSw0MCArNDgwLDQwIEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXROYXZpZ2F0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6Ok5hdmlnYXRpb25DbGllbnQ+IG5hCiAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50ID0gV1RGTW92
ZShuYXZpZ2F0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldExvYWRlckNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMb2FkZXJDbGllbnQ+IGxvYWRlckNsaWVudCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZXRMb2FkZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TG9h
ZGVyQ2xpZW50PiYmIGxvYWRlckNsaWVudCkKIHsKICAgICBpZiAoIWxvYWRlckNsaWVudCkgewot
ICAgICAgICBtX2xvYWRlckNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpMb2FkZXJDbGll
bnQ+KCk7CisgICAgICAgIG1fbG9hZGVyQ2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkxvYWRl
ckNsaWVudD4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fbG9hZGVyQ2xpZW50
ID0gV1RGTW92ZShsb2FkZXJDbGllbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0UG9s
aWN5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlBvbGljeUNsaWVudD4gcG9saWN5Q2xpZW50
KQordm9pZCBXZWJQYWdlUHJveHk6OnNldFBvbGljeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpQb2xpY3lDbGllbnQ+JiYgcG9saWN5Q2xpZW50KQogewogICAgIGlmICghcG9saWN5Q2xpZW50
KSB7Ci0gICAgICAgIG1fcG9saWN5Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OlBvbGlj
eUNsaWVudD4oKTsKKyAgICAgICAgbV9wb2xpY3lDbGllbnQgPSBtYWtlVW5pcXVlUmVmPEFQSTo6
UG9saWN5Q2xpZW50PigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9wb2xpY3lD
bGllbnQgPSBXVEZNb3ZlKHBvbGljeUNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRGb3JtQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZvcm1DbGllbnQ+IGZvcm1DbGllbnQp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpG
b3JtQ2xpZW50PiYmIGZvcm1DbGllbnQpCiB7CiAgICAgaWYgKCFmb3JtQ2xpZW50KSB7Ci0gICAg
ICAgIG1fZm9ybUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpGb3JtQ2xpZW50PigpOwor
ICAgICAgICBtX2Zvcm1DbGllbnQgPSBtYWtlVW5pcXVlUmVmPEFQSTo6Rm9ybUNsaWVudD4oKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fZm9ybUNsaWVudCA9IFdURk1vdmUoZm9y
bUNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpVSUNsaWVudD4gdWlDbGllbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VUlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6VUlDbGllbnQ+JiYgdWlDbGllbnQpCiB7CiAgICAg
aWYgKCF1aUNsaWVudCkgewotICAgICAgICBtX3VpQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxB
UEk6OlVJQ2xpZW50PigpOworICAgICAgICBtX3VpQ2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6
OlVJQ2xpZW50PigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjUsMTEgKzUyNiwx
MSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VUlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
VUlDbGllbnQ+IHVpQ2xpZW50KQogICAgIHNldENhblJ1bk1vZGFsKG1fdWlDbGllbnQtPmNhblJ1
bk1vZGFsKCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0SWNvbkxvYWRpbmdDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6SWNvbkxvYWRpbmdDbGllbnQ+IGljb25Mb2FkaW5nQ2xpZW50
KQordm9pZCBXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5nQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PiYmIGljb25Mb2FkaW5nQ2xpZW50KQogewogICAgIGJv
b2wgaGFzQ2xpZW50ID0gaWNvbkxvYWRpbmdDbGllbnQuZ2V0KCk7CiAgICAgaWYgKCFpY29uTG9h
ZGluZ0NsaWVudCkKLSAgICAgICAgbV9pY29uTG9hZGluZ0NsaWVudCA9IHN0ZDo6bWFrZV91bmlx
dWU8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4oKTsKKyAgICAgICAgbV9pY29uTG9hZGluZ0NsaWVu
dCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4oKTsKICAgICBlbHNlCiAg
ICAgICAgIG1faWNvbkxvYWRpbmdDbGllbnQgPSBXVEZNb3ZlKGljb25Mb2FkaW5nQ2xpZW50KTsK
IApAQCAtNTM5LDMwICs1NDAsMzAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5n
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PgogICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlSWNvbkxvYWRpbmdDbGllbnQoaGFz
Q2xpZW50KSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0RmluZENsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGaW5kQ2xpZW50PiBmaW5kQ2xpZW50KQordm9pZCBXZWJQ
YWdlUHJveHk6OnNldEZpbmRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RmluZENsaWVudD4m
JiBmaW5kQ2xpZW50KQogewogICAgIGlmICghZmluZENsaWVudCkgewotICAgICAgICBtX2ZpbmRD
bGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RmluZENsaWVudD4oKTsKKyAgICAgICAgbV9m
aW5kQ2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkZpbmRDbGllbnQ+KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgbV9maW5kQ2xpZW50ID0gV1RGTW92ZShmaW5kQ2xpZW50
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRNYXRjaGVzQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50PiBmaW5kTWF0Y2hlc0NsaWVudCkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZXRGaW5kTWF0Y2hlc0NsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpG
aW5kTWF0Y2hlc0NsaWVudD4mJiBmaW5kTWF0Y2hlc0NsaWVudCkKIHsKICAgICBpZiAoIWZpbmRN
YXRjaGVzQ2xpZW50KSB7Ci0gICAgICAgIG1fZmluZE1hdGNoZXNDbGllbnQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFQSTo6RmluZE1hdGNoZXNDbGllbnQ+KCk7CisgICAgICAgIG1fZmluZE1hdGNoZXND
bGllbnQgPSBtYWtlVW5pcXVlUmVmPEFQSTo6RmluZE1hdGNoZXNDbGllbnQ+KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBtX2ZpbmRNYXRjaGVzQ2xpZW50ID0gV1RGTW92ZShmaW5k
TWF0Y2hlc0NsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXREaWFnbm9zdGljTG9n
Z2luZ0NsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudD4g
ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQ+JiYgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpCiB7CiAgICAgaWYgKCFkaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCkgewotICAgICAgICBtX2RpYWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gc3RkOjpt
YWtlX3VuaXF1ZTxBUEk6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50PigpOworICAgICAgICBtX2Rp
YWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50PigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NzAsMTAgKzU3MSwx
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6RGlhZ25vc3RpY0xvZwogfQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVO
VVMpCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udGV4dE1lbnVDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6Q29udGV4dE1lbnVDbGllbnQ+IGNvbnRleHRNZW51Q2xpZW50KQordm9pZCBXZWJQ
YWdlUHJveHk6OnNldENvbnRleHRNZW51Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkNvbnRl
eHRNZW51Q2xpZW50PiYmIGNvbnRleHRNZW51Q2xpZW50KQogewogICAgIGlmICghY29udGV4dE1l
bnVDbGllbnQpIHsKLSAgICAgICAgbV9jb250ZXh0TWVudUNsaWVudCA9IHN0ZDo6bWFrZV91bmlx
dWU8QVBJOjpDb250ZXh0TWVudUNsaWVudD4oKTsKKyAgICAgICAgbV9jb250ZXh0TWVudUNsaWVu
dCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpDb250ZXh0TWVudUNsaWVudD4oKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNzU1LDE2ICs3NTYsMjAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNs
b3NlKCkKIAogICAgIHJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbjo6UGFnZUludmFsaWRhdGVk
KTsKIAotICAgIG1fbG9hZGVyQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkxvYWRlckNs
aWVudD4oKTsKKyAgICBtX2xvYWRlckNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpMb2FkZXJD
bGllbnQ+KCk7CiAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50ID0gbnVsbHB0cjsKLSAgICBtX3BvbGlj
eUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpQb2xpY3lDbGllbnQ+KCk7Ci0gICAgbV9m
b3JtQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkZvcm1DbGllbnQ+KCk7Ci0gICAgbV91
aUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpVSUNsaWVudD4oKTsKLSAgICBtX2ZpbmRD
bGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RmluZENsaWVudD4oKTsKLSAgICBtX2ZpbmRN
YXRjaGVzQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50Pigp
OwotICAgIG1fZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+KCk7CisgICAgbV9wb2xpY3lDbGllbnQgPSBtYWtlVW5p
cXVlUmVmPEFQSTo6UG9saWN5Q2xpZW50PigpOworICAgIG1faWNvbkxvYWRpbmdDbGllbnQgPSBt
YWtlVW5pcXVlUmVmPEFQSTo6SWNvbkxvYWRpbmdDbGllbnQ+KCk7CisgICAgbV9mb3JtQ2xpZW50
ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkZvcm1DbGllbnQ+KCk7CisgICAgbV91aUNsaWVudCA9IG1h
a2VVbmlxdWVSZWY8QVBJOjpVSUNsaWVudD4oKTsKKyAgICBtX2ZpbmRDbGllbnQgPSBtYWtlVW5p
cXVlUmVmPEFQSTo6RmluZENsaWVudD4oKTsKKyAgICBtX2ZpbmRNYXRjaGVzQ2xpZW50ID0gbWFr
ZVVuaXF1ZVJlZjxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50PigpOworICAgIG1fZGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQgPSBtYWtlVW5pcXVlUmVmPEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+
KCk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgbV9jb250ZXh0TWVudUNsaWVudCA9
IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpDb250ZXh0TWVudUNsaWVudD4oKTsKKyAgICBtX2NvbnRl
eHRNZW51Q2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkNvbnRleHRNZW51Q2xpZW50PigpOwor
I2VuZGlmCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIG1fZnVsbHNjcmVlbkNsaWVu
dCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpGdWxsc2NyZWVuQ2xpZW50PigpOwogI2VuZGlmCiAKICAg
ICBtX3dlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIucGFnZVdhc0ludmFsaWRhdGVkKCk7CkBAIC00
MjcwLDggKzQyNzUsMTMgQEAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSogV2ViUGFnZVByb3h5
OjpmdWxsU2NyZWVuTWFuYWdlcigpCiAgICAgcmV0dXJuIG1fZnVsbFNjcmVlbk1hbmFnZXIuZ2V0
KCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkZ1bGxzY3JlZW5DbGllbnQ+IGNsaWVudCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3JlZW5DbGll
bnQ+JiYgY2xpZW50KQogeworICAgIGlmICghY2xpZW50KSB7CisgICAgICAgIG1fZnVsbHNjcmVl
bkNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpGdWxsc2NyZWVuQ2xpZW50PigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgbV9mdWxsc2NyZWVuQ2xpZW50ID0gV1RGTW92ZShjbGll
bnQpOwogfQogI2VuZGlmCkBAIC02NzQxLDkgKzY3NTEsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldExvYWRE
ZWNpc2lvbkZvckljb24oY29uc3QgV2ViQ29yZTo6TGlua0ljb24mIGljb24sIHVpbnQ2NF90IGxv
YWRJZGVudGlmaWVyKQogewotICAgIGlmICghbV9pY29uTG9hZGluZ0NsaWVudCkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9pY29uTG9hZGluZ0NsaWVudC0+Z2V0TG9hZERlY2lzaW9uRm9ySWNv
bihpY29uLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZlB0cjxXZWJQYWdlUHJveHk+KHRoaXMp
LCBsb2FkSWRlbnRpZmllcl0oc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikgewogICAgICAgICBpZiAoIWlzVmFsaWQo
KSkgewogICAgICAgICAgICAgaWYgKGNhbGxiYWNrRnVuY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZTUzNWJhYzAxMzMuLjk1YjQwYWU2ZjQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC04NSw2ICs4NSw3IEBACiAj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTMz
Myw4ICszMzQsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqIGZ1bGxTY3JlZW5NYW5hZ2VyKCk7CiAKLSAgICBBUEk6
OkZ1bGxzY3JlZW5DbGllbnQmIGZ1bGxzY3JlZW5DbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9m
dWxsc2NyZWVuQ2xpZW50OyB9Ci0gICAgdm9pZCBzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkZ1bGxzY3JlZW5DbGllbnQ+KTsKKyAgICBBUEk6OkZ1bGxzY3JlZW5DbGll
bnQmIGZ1bGxzY3JlZW5DbGllbnQoKSB7IHJldHVybiBtX2Z1bGxzY3JlZW5DbGllbnQuZ2V0KCk7
IH0KKyAgICB2b2lkIHNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RnVs
bHNjcmVlbkNsaWVudD4mJik7CiAjZW5kaWYKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFW
S0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKICAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIHBsYXliYWNrU2Vzc2lvbk1h
bmFnZXIoKTsKQEAgLTM0NywyOCArMzQ4LDI4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCi0gICAgQVBJOjpDb250ZXh0TWVudUNsaWVudCYgY29udGV4dE1l
bnVDbGllbnQoKSB7IHJldHVybiAqbV9jb250ZXh0TWVudUNsaWVudDsgfQotICAgIHZvaWQgc2V0
Q29udGV4dE1lbnVDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q29udGV4dE1lbnVDbGllbnQ+
KTsKLSNlbmRpZgotICAgIEFQSTo6RmluZENsaWVudCYgZmluZENsaWVudCgpIHsgcmV0dXJuICpt
X2ZpbmRDbGllbnQ7IH0KLSAgICB2b2lkIHNldEZpbmRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6RmluZENsaWVudD4pOwotICAgIEFQSTo6RmluZE1hdGNoZXNDbGllbnQmIGZpbmRNYXRjaGVz
Q2xpZW50KCkgeyByZXR1cm4gKm1fZmluZE1hdGNoZXNDbGllbnQ7IH0KLSAgICB2b2lkIHNldEZp
bmRNYXRjaGVzQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50Pik7
Ci0gICAgQVBJOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQoKSB7IHJldHVybiAqbV9kaWFnbm9zdGljTG9nZ2luZ0NsaWVudDsgfQotICAgIHZvaWQgc2V0
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQ+KTsKLSAgICB2b2lkIHNldEZvcm1DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6Rm9ybUNsaWVudD4pOworICAgIEFQSTo6Q29udGV4dE1lbnVDbGllbnQmIGNvbnRleHRNZW51
Q2xpZW50KCkgeyByZXR1cm4gbV9jb250ZXh0TWVudUNsaWVudC5nZXQoKTsgfQorICAgIHZvaWQg
c2V0Q29udGV4dE1lbnVDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q29udGV4dE1lbnVDbGll
bnQ+JiYpOworI2VuZGlmCisgICAgQVBJOjpGaW5kQ2xpZW50JiBmaW5kQ2xpZW50KCkgeyByZXR1
cm4gbV9maW5kQ2xpZW50LmdldCgpOyB9CisgICAgdm9pZCBzZXRGaW5kQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkZpbmRDbGllbnQ+JiYpOworICAgIEFQSTo6RmluZE1hdGNoZXNDbGllbnQm
IGZpbmRNYXRjaGVzQ2xpZW50KCkgeyByZXR1cm4gbV9maW5kTWF0Y2hlc0NsaWVudC5nZXQoKTsg
fQorICAgIHZvaWQgc2V0RmluZE1hdGNoZXNDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Rmlu
ZE1hdGNoZXNDbGllbnQ+JiYpOworICAgIEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQmIGRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50KCkgeyByZXR1cm4gbV9kaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5nZXQoKTsgfQorICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+JiYpOworICAgIHZvaWQgc2V0Rm9y
bUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGb3JtQ2xpZW50PiYmKTsKICAgICB2b2lkIHNl
dE5hdmlnYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TmF2aWdhdGlvbkNsaWVudD4p
OwogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpIaXN0b3J5
Q2xpZW50Pik7Ci0gICAgdm9pZCBzZXRMb2FkZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
TG9hZGVyQ2xpZW50Pik7Ci0gICAgdm9pZCBzZXRQb2xpY3lDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6UG9saWN5Q2xpZW50Pik7CisgICAgdm9pZCBzZXRMb2FkZXJDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TG9hZGVyQ2xpZW50PiYmKTsKKyAgICB2b2lkIHNldFBvbGljeUNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpQb2xpY3lDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0SW5qZWN0
ZWRCdW5kbGVDbGllbnQoY29uc3QgV0tQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnRCYXNlKik7CiAg
ICAgV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50KiBpbmplY3RlZEJ1bmRsZUNsaWVudCgpIHsg
cmV0dXJuIG1faW5qZWN0ZWRCdW5kbGVDbGllbnQuZ2V0KCk7IH0KIAotICAgIEFQSTo6VUlDbGll
bnQmIHVpQ2xpZW50KCkgeyByZXR1cm4gKm1fdWlDbGllbnQ7IH0KLSAgICB2b2lkIHNldFVJQ2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlVJQ2xpZW50Pik7CisgICAgQVBJOjpVSUNsaWVudCYg
dWlDbGllbnQoKSB7IHJldHVybiBtX3VpQ2xpZW50LmdldCgpOyB9CisgICAgdm9pZCBzZXRVSUNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpVSUNsaWVudD4mJik7CiAKLSAgICBBUEk6Okljb25M
b2FkaW5nQ2xpZW50JiBpY29uTG9hZGluZ0NsaWVudCgpIHsgcmV0dXJuICptX2ljb25Mb2FkaW5n
Q2xpZW50OyB9Ci0gICAgdm9pZCBzZXRJY29uTG9hZGluZ0NsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpJY29uTG9hZGluZ0NsaWVudD4pOworICAgIEFQSTo6SWNvbkxvYWRpbmdDbGllbnQmIGlj
b25Mb2FkaW5nQ2xpZW50KCkgeyByZXR1cm4gbV9pY29uTG9hZGluZ0NsaWVudC5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0SWNvbkxvYWRpbmdDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SWNvbkxv
YWRpbmdDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBpbml0aWFsaXplV2ViUGFnZSgpOwogCkBAIC0x
NjE1LDE4ICsxNjE2LDE4IEBAIHByaXZhdGU6CiAgICAgUGFnZUNsaWVudCYgbV9wYWdlQ2xpZW50
OwogICAgIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMb2FkZXJDbGllbnQ+IG1fbG9hZGVyQ2xpZW50OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlBvbGljeUNsaWVudD4gbV9wb2xpY3lDbGllbnQ7CisgICAg
VW5pcXVlUmVmPEFQSTo6TG9hZGVyQ2xpZW50PiBtX2xvYWRlckNsaWVudDsKKyAgICBVbmlxdWVS
ZWY8QVBJOjpQb2xpY3lDbGllbnQ+IG1fcG9saWN5Q2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6Ok5hdmlnYXRpb25DbGllbnQ+IG1fbmF2aWdhdGlvbkNsaWVudDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFQSTo6SWNvbkxvYWRpbmdDbGllbnQ+IG1faWNvbkxvYWRpbmdDbGllbnQ7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Rm9ybUNsaWVudD4gbV9mb3JtQ2xpZW50OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OlVJQ2xpZW50PiBtX3VpQ2xpZW50OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkZpbmRDbGllbnQ+IG1fZmluZENsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpGaW5kTWF0Y2hlc0NsaWVudD4gbV9maW5kTWF0Y2hlc0NsaWVudDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudD4gbV9kaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudDsKKyAgICBVbmlxdWVSZWY8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4gbV9pY29uTG9h
ZGluZ0NsaWVudDsKKyAgICBVbmlxdWVSZWY8QVBJOjpGb3JtQ2xpZW50PiBtX2Zvcm1DbGllbnQ7
CisgICAgVW5pcXVlUmVmPEFQSTo6VUlDbGllbnQ+IG1fdWlDbGllbnQ7CisgICAgVW5pcXVlUmVm
PEFQSTo6RmluZENsaWVudD4gbV9maW5kQ2xpZW50OworICAgIFVuaXF1ZVJlZjxBUEk6OkZpbmRN
YXRjaGVzQ2xpZW50PiBtX2ZpbmRNYXRjaGVzQ2xpZW50OworICAgIFVuaXF1ZVJlZjxBUEk6OkRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50PiBtX2RpYWdub3N0aWNMb2dnaW5nQ2xpZW50OwogI2lmIEVO
QUJMRShDT05URVhUX01FTlVTKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkNvbnRleHRNZW51
Q2xpZW50PiBtX2NvbnRleHRNZW51Q2xpZW50OworICAgIFVuaXF1ZVJlZjxBUEk6OkNvbnRleHRN
ZW51Q2xpZW50PiBtX2NvbnRleHRNZW51Q2xpZW50OwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudD4gbV9pbmplY3RlZEJ1bmRsZUNsaWVudDsK
IApAQCAtMTY2NSw3ICsxNjY2LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKICAgICBSZWZQdHI8V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eT4gbV9mdWxsU2NyZWVu
TWFuYWdlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGdWxsc2NyZWVuQ2xpZW50PiBtX2Z1
bGxzY3JlZW5DbGllbnQ7CisgICAgVW5pcXVlUmVmPEFQSTo6RnVsbHNjcmVlbkNsaWVudD4gbV9m
dWxsc2NyZWVuQ2xpZW50OwogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBIQVZFKEFW
S0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGFm
YzQ3NjgzMTU5Li5lNmY2MWI3NTRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwCkBAIC0yMTcsMTAgKzIxNywxMCBAQCBXZWJQcm9jZXNzUG9vbDo6V2Vi
UHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24p
CiAgICAgLCBtX2hhdmVJbml0aWFsRW1wdHlQcm9jZXNzKGZhbHNlKQogICAgICwgbV9wcm9jZXNz
V2l0aFBhZ2VDYWNoZSgwKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6
Y3JlYXRlTm9uTnVsbCgpKQotICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KHN0ZDo6bWFrZV91bmlx
dWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQotICAgICwgbV9kb3dubG9hZENsaWVudChzdGQ6
Om1ha2VfdW5pcXVlPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCi0gICAgLCBtX2hpc3RvcnlDbGll
bnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQot
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKKyAgICAsIG1fYXV0b21hdGlvbkNsaWVu
dChtYWtlVW5pcXVlUmVmPEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKKyAgICAsIG1fZG93bmxv
YWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQorICAgICwgbV9o
aXN0b3J5Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dD4oKSkKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8
QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5r
U3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rc1Bv
cHVsYXRlZChmYWxzZSkKICAgICAsIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIodGhpcykKQEAg
LTM0MCwyNiArMzQwLDI2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVDb25uZWN0
aW9uQ2xpZW50KGNvbnN0IFdLQ29udGV4dENvbm5lY3Rpb25DbGllbnRCCiAgICAgbV9jb25uZWN0
aW9uQ2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9y
eUNsaWVudD4gaGlzdG9yeUNsaWVudCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEhpc3RvcnlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYg
aGlzdG9yeUNsaWVudCkKIHsKICAgICBpZiAoIWhpc3RvcnlDbGllbnQpCi0gICAgICAgIG1faGlz
dG9yeUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNs
aWVudD4oKTsKKyAgICAgICAgbV9oaXN0b3J5Q2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6Okxl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpOwogICAgIGVsc2UKICAgICAgICAgbV9oaXN0b3J5
Q2xpZW50ID0gV1RGTW92ZShoaXN0b3J5Q2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0RG93bmxvYWRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGllbnQ+
IGRvd25sb2FkQ2xpZW50KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG93bmxvYWRDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYgZG93bmxvYWRDbGllbnQpCiB7
CiAgICAgaWYgKCFkb3dubG9hZENsaWVudCkKLSAgICAgICAgbV9kb3dubG9hZENsaWVudCA9IHN0
ZDo6bWFrZV91bmlxdWU8QVBJOjpEb3dubG9hZENsaWVudD4oKTsKKyAgICAgICAgbV9kb3dubG9h
ZENsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKTsKICAgICBlbHNl
CiAgICAgICAgIG1fZG93bmxvYWRDbGllbnQgPSBXVEZNb3ZlKGRvd25sb2FkQ2xpZW50KTsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBhdXRvbWF0aW9uQ2xpZW50KQordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0
aW9uQ2xpZW50PiYmIGF1dG9tYXRpb25DbGllbnQpCiB7CiAgICAgaWYgKCFhdXRvbWF0aW9uQ2xp
ZW50KQotICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4oKTsKKyAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gbWFrZVVu
aXF1ZVJlZjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCk7CiAgICAgZWxzZQogICAgICAgICBtX2F1
dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQpAQCAtMzY3LDcg
KzM2Nyw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KQogewogICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7CisgICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4o
KTsKICAgICBlbHNlCiAgICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RG
TW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCA3MzliMzk3MDE1MC4uMzIwMWU2YmQ0MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC01MSw2ICs1MSw3
IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCkBAIC0xNDIsOSArMTQzLDkgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6
ZUNsaWVudChjb25zdCBXS0NvbnRleHRDbGllbnRCYXNlKik7CiAgICAgdm9pZCBpbml0aWFsaXpl
SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29uc3QgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnRC
YXNlKik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbkNsaWVudChjb25zdCBXS0NvbnRl
eHRDb25uZWN0aW9uQ2xpZW50QmFzZSopOwotICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4pOwotICAgIHZvaWQg
c2V0RG93bmxvYWRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGllbnQ+KTsK
LSAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21h
dGlvbkNsaWVudD4pOworICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CisgICAgdm9pZCBzZXREb3dubG9h
ZENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CisgICAgdm9p
ZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGll
bnQ+JiYpOwogICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAg
ICB2b2lkIHNldE1heGltdW1OdW1iZXJPZlByb2Nlc3Nlcyh1bnNpZ25lZCk7IC8vIENhbiBvbmx5
IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwcm9jZXNzZXMgcnVubmluZy4KQEAgLTIzNSwx
MiArMjM2LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBEb3dubG9hZHMuCiAgICAgRG93bmxv
YWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKLSAgICBBUEk6OkRvd25sb2FkQ2xpZW50JiBkb3dubG9hZENsaWVudCgpIHsgcmV0dXJu
ICptX2Rvd25sb2FkQ2xpZW50OyB9CisgICAgQVBJOjpEb3dubG9hZENsaWVudCYgZG93bmxvYWRD
bGllbnQoKSB7IHJldHVybiBtX2Rvd25sb2FkQ2xpZW50LmdldCgpOyB9CiAKLSAgICBBUEk6Okxl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlz
dG9yeUNsaWVudDsgfQorICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3Rv
cnlDbGllbnQoKSB7IHJldHVybiBtX2hpc3RvcnlDbGllbnQuZ2V0KCk7IH0KICAgICBXZWJDb250
ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQorICAgIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
KSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5nZXQoKTsgfQogCiAgICAg
V2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2ljb25EYXRh
YmFzZS5nZXQoKTsgfQogCkBAIC00ODksMTAgKzQ5MCwxMCBAQCBwcml2YXRlOgogCiAgICAgV2Vi
Q29udGV4dENsaWVudCBtX2NsaWVudDsKICAgICBXZWJDb250ZXh0Q29ubmVjdGlvbkNsaWVudCBt
X2Nvbm5lY3Rpb25DbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNs
aWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkRvd25s
b2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okxl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDsKKyAgICBVbmlxdWVSZWY8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1
dG9tYXRpb25DbGllbnQ7CisgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93
bmxvYWRDbGllbnQ7CisgICAgVW5pcXVlUmVmPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGll
bnQ+IG1faGlzdG9yeUNsaWVudDsKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRy
PFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNGRhMzE5NTE3YmYu
LmVhODRlZjRhY2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC0zMzUsMTIgKzMzNSwxMiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90
IHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAjZW5kaWYK
ICAgICAsIG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldl
YlBhZ2U6OnNldENhblN0YXJ0TWVkaWFUaW1lckZpcmVkKQogI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQotICAgICwgbV9jb250ZXh0TWVudUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5q
ZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudD4oKSkKKyAgICAsIG1fY29udGV4dE1l
bnVDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1l
bnVDbGllbnQ+KCkpCiAjZW5kaWYKLSAgICAsIG1fZWRpdG9yQ2xpZW50IHsgc3RkOjptYWtlX3Vu
aXF1ZTxBUEk6OkluamVjdGVkQnVuZGxlOjpFZGl0b3JDbGllbnQ+KCkgfQotICAgICwgbV9mb3Jt
Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRsZTo6Rm9ybUNsaWVudD4o
KSkKLSAgICAsIG1fbG9hZGVyQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1
bmRsZTo6UGFnZUxvYWRlckNsaWVudD4oKSkKLSAgICAsIG1fdWlDbGllbnQoc3RkOjptYWtlX3Vu
aXF1ZTxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQ+KCkpCisgICAgLCBtX2VkaXRv
ckNsaWVudCB7IG1ha2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9yQ2xpZW50
PigpIH0KKyAgICAsIG1fZm9ybUNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6SW5qZWN0ZWRCdW5k
bGU6OkZvcm1DbGllbnQ+KCkpCisgICAgLCBtX2xvYWRlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQ
STo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VMb2FkZXJDbGllbnQ+KCkpCisgICAgLCBtX3VpQ2xpZW50
KG1ha2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PigpKQogICAg
ICwgbV9maW5kQ29udHJvbGxlcihtYWtlVW5pcXVlUmVmPEZpbmRDb250cm9sbGVyPih0aGlzKSkK
ICAgICAsIG1fdXNlckNvbnRlbnRDb250cm9sbGVyKFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
Z2V0T3JDcmVhdGUocGFyYW1ldGVycy51c2VyQ29udGVudENvbnRyb2xsZXJJRCkpCiAjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQpAQCAtNjk1LDEwICs2OTUsMTAgQEAgdWludDY0X3QgV2ViUGFnZTo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKQogfQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVO
VVMpCi12b2lkIFdlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudD4g
Y29udGV4dE1lbnVDbGllbnQpCit2b2lkIFdlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlQ29udGV4
dE1lbnVDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250
ZXh0TWVudUNsaWVudD4mJiBjb250ZXh0TWVudUNsaWVudCkKIHsKICAgICBpZiAoIWNvbnRleHRN
ZW51Q2xpZW50KSB7Ci0gICAgICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudD4oKTsKKyAgICAg
ICAgbV9jb250ZXh0TWVudUNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRs
ZTo6UGFnZUNvbnRleHRNZW51Q2xpZW50PigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC03MDYsMzAgKzcwNiwzMCBAQCB2b2lkIFdlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlQ29udGV4
dE1lbnVDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdQogfQogI2VuZGlmCiAK
LXZvaWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkVkaXRvckNsaWVudD4gZWRpdG9yQ2xpZW50KQordm9p
ZCBXZWJQYWdlOjpzZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9yQ2xpZW50PiYmIGVkaXRvckNsaWVudCkKIHsKICAg
ICBpZiAoIWVkaXRvckNsaWVudCkgewotICAgICAgICBtX2VkaXRvckNsaWVudCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9yQ2xpZW50PigpOworICAgICAgICBt
X2VkaXRvckNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9y
Q2xpZW50PigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9lZGl0b3JDbGllbnQg
PSBXVEZNb3ZlKGVkaXRvckNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRC
dW5kbGVGb3JtQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpGb3Jt
Q2xpZW50PiBmb3JtQ2xpZW50KQordm9pZCBXZWJQYWdlOjpzZXRJbmplY3RlZEJ1bmRsZUZvcm1D
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkZvcm1DbGllbnQ+JiYg
Zm9ybUNsaWVudCkKIHsKICAgICBpZiAoIWZvcm1DbGllbnQpIHsKLSAgICAgICAgbV9mb3JtQ2xp
ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkluamVjdGVkQnVuZGxlOjpGb3JtQ2xpZW50Pigp
OworICAgICAgICBtX2Zvcm1DbGllbnQgPSBtYWtlVW5pcXVlUmVmPEFQSTo6SW5qZWN0ZWRCdW5k
bGU6OkZvcm1DbGllbnQ+KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2Zvcm1D
bGllbnQgPSBXVEZNb3ZlKGZvcm1DbGllbnQpOwogfQogCi12b2lkIFdlYlBhZ2U6OnNldEluamVj
dGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1
bmRsZTo6UGFnZUxvYWRlckNsaWVudD4gbG9hZGVyQ2xpZW50KQordm9pZCBXZWJQYWdlOjpzZXRJ
bmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0
ZWRCdW5kbGU6OlBhZ2VMb2FkZXJDbGllbnQ+JiYgbG9hZGVyQ2xpZW50KQogewogICAgIGlmICgh
bG9hZGVyQ2xpZW50KSB7Ci0gICAgICAgIG1fbG9hZGVyQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlTG9hZGVyQ2xpZW50PigpOworICAgICAgICBtX2xv
YWRlckNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUxvYWRl
ckNsaWVudD4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzUyLDEwICs3NTIsMTAg
QEAgdm9pZCBXZWJQYWdlOjppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVSZXNvdXJjZUxvYWRDbGll
bnQoV0tCdW5kbGVQYWdlUmVzb3VyY2VMb2EKICAgICBtX3Jlc291cmNlTG9hZENsaWVudC5pbml0
aWFsaXplKGNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRCdW5kbGVVSUNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PiB1
aUNsaWVudCkKK3ZvaWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRCdW5kbGVVSUNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PiYmIHVpQ2xpZW50KQog
ewogICAgIGlmICghdWlDbGllbnQpIHsKLSAgICAgICAgbV91aUNsaWVudCA9IHN0ZDo6bWFrZV91
bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PigpOworICAgICAgICBtX3Vp
Q2xpZW50ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQ+
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExNDQsMTQgKzExNDQsMTQgQEAgdm9p
ZCBXZWJQYWdlOjpjbG9zZSgpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQot
ICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRC
dW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudD4oKTsKKyAgICBtX2NvbnRleHRNZW51Q2xpZW50
ID0gbWFrZVVuaXF1ZVJlZjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGll
bnQ+KCk7CiAjZW5kaWYKLSAgICBtX2VkaXRvckNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJ
OjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9yQ2xpZW50PigpOwotICAgIG1fZm9ybUNsaWVudCA9IHN0
ZDo6bWFrZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRsZTo6Rm9ybUNsaWVudD4oKTsKLSAgICBt
X2xvYWRlckNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFn
ZUxvYWRlckNsaWVudD4oKTsKKyAgICBtX2VkaXRvckNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJ
OjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9yQ2xpZW50PigpOworICAgIG1fZm9ybUNsaWVudCA9IG1h
a2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6Rm9ybUNsaWVudD4oKTsKKyAgICBtX2xv
YWRlckNsaWVudCA9IG1ha2VVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUxvYWRl
ckNsaWVudD4oKTsKICAgICBtX3BvbGljeUNsaWVudC5pbml0aWFsaXplKDApOwogICAgIG1fcmVz
b3VyY2VMb2FkQ2xpZW50LmluaXRpYWxpemUoMCk7Ci0gICAgbV91aUNsaWVudCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PigpOworICAgIG1fdWlD
bGllbnQgPSBtYWtlVW5pcXVlUmVmPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudD4o
KTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgbV9mdWxsU2NyZWVuQ2xpZW50Lmlu
aXRpYWxpemUoMCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCmluZGV4IDViZmRjZjY3ZjY3Li5lNzE5ZTM3ZTM2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0zMjYsMjcgKzMyNiwyNyBAQCBw
dWJsaWM6CiAKICAgICAvLyAtLSBJbmplY3RlZEJ1bmRsZSBtZXRob2RzCiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCi0gICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZUNvbnRleHRNZW51Q2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGll
bnQ+KTsKKyAgICB2b2lkIHNldEluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudD4mJik7
CiAjZW5kaWYKLSAgICB2b2lkIHNldEluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpFZGl0b3JDbGllbnQ+KTsKLSAgICB2b2lkIHNl
dEluamVjdGVkQnVuZGxlRm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1
bmRsZTo6Rm9ybUNsaWVudD4pOwotICAgIHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVy
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlTG9hZGVyQ2xp
ZW50Pik7CisgICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6RWRpdG9yQ2xpZW50PiYmKTsKKyAgICB2b2lkIHNl
dEluamVjdGVkQnVuZGxlRm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1
bmRsZTo6Rm9ybUNsaWVudD4mJik7CisgICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZVBhZ2VMb2Fk
ZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VMb2FkZXJD
bGllbnQ+JiYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUG9saWN5Q2xpZW50
KFdLQnVuZGxlUGFnZVBvbGljeUNsaWVudEJhc2UqKTsKICAgICB2b2lkIGluaXRpYWxpemVJbmpl
Y3RlZEJ1bmRsZVJlc291cmNlTG9hZENsaWVudChXS0J1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnRCYXNlKik7Ci0gICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZVVJQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQ+KTsKKyAgICB2b2lkIHNldElu
amVjdGVkQnVuZGxlVUlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6
OlBhZ2VVSUNsaWVudD4mJik7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZvaWQg
aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudChXS0J1bmRsZVBhZ2VGdWxs
U2NyZWVuQ2xpZW50QmFzZSopOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykK
LSAgICBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQmIGluamVjdGVk
QnVuZGxlQ29udGV4dE1lbnVDbGllbnQoKSB7IHJldHVybiAqbV9jb250ZXh0TWVudUNsaWVudC5n
ZXQoKTsgfQorICAgIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudCYg
aW5qZWN0ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudCgpIHsgcmV0dXJuIG1fY29udGV4dE1lbnVD
bGllbnQuZ2V0KCk7IH0KICNlbmRpZgotICAgIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkVkaXRvckNs
aWVudCYgaW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKSB7IHJldHVybiAqbV9lZGl0b3JDbGll
bnQuZ2V0KCk7IH0KLSAgICBBUEk6OkluamVjdGVkQnVuZGxlOjpGb3JtQ2xpZW50JiBpbmplY3Rl
ZEJ1bmRsZUZvcm1DbGllbnQoKSB7IHJldHVybiAqbV9mb3JtQ2xpZW50LmdldCgpOyB9Ci0gICAg
QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUxvYWRlckNsaWVudCYgaW5qZWN0ZWRCdW5kbGVMb2Fk
ZXJDbGllbnQoKSB7IHJldHVybiAqbV9sb2FkZXJDbGllbnQ7IH0KKyAgICBBUEk6OkluamVjdGVk
QnVuZGxlOjpFZGl0b3JDbGllbnQmIGluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkgeyByZXR1
cm4gbV9lZGl0b3JDbGllbnQuZ2V0KCk7IH0KKyAgICBBUEk6OkluamVjdGVkQnVuZGxlOjpGb3Jt
Q2xpZW50JiBpbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKSB7IHJldHVybiBtX2Zvcm1DbGllbnQu
Z2V0KCk7IH0KKyAgICBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlTG9hZGVyQ2xpZW50JiBpbmpl
Y3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpIHsgcmV0dXJuIG1fbG9hZGVyQ2xpZW50LmdldCgpOyB9
CiAgICAgSW5qZWN0ZWRCdW5kbGVQYWdlUG9saWN5Q2xpZW50JiBpbmplY3RlZEJ1bmRsZVBvbGlj
eUNsaWVudCgpIHsgcmV0dXJuIG1fcG9saWN5Q2xpZW50OyB9CiAgICAgSW5qZWN0ZWRCdW5kbGVQ
YWdlUmVzb3VyY2VMb2FkQ2xpZW50JiBpbmplY3RlZEJ1bmRsZVJlc291cmNlTG9hZENsaWVudCgp
IHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkQ2xpZW50OyB9Ci0gICAgQVBJOjpJbmplY3RlZEJ1bmRs
ZTo6UGFnZVVJQ2xpZW50JiBpbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkgeyByZXR1cm4gKm1fdWlD
bGllbnQuZ2V0KCk7IH0KKyAgICBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQmIGlu
amVjdGVkQnVuZGxlVUlDbGllbnQoKSB7IHJldHVybiBtX3VpQ2xpZW50LmdldCgpOyB9CiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5D
bGllbnQmIGluamVjdGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudCgpIHsgcmV0dXJuIG1fZnVsbFNj
cmVlbkNsaWVudDsgfQogI2VuZGlmCkBAIC0xMzc4LDE0ICsxMzc4LDE0IEBAIHByaXZhdGU6CiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlVuZG9TdGVwPj4gbV91bmRvU3RlcE1hcDsK
IAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Oklu
amVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQ+IG1fY29udGV4dE1lbnVDbGllbnQ7
CisgICAgVW5pcXVlUmVmPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVu
dD4gbV9jb250ZXh0TWVudUNsaWVudDsKICNlbmRpZgotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkluamVjdGVkQnVuZGxlOjpFZGl0b3JDbGllbnQ+IG1fZWRpdG9yQ2xpZW50OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpGb3JtQ2xpZW50PiBtX2Zvcm1DbGllbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VMb2FkZXJDbGll
bnQ+IG1fbG9hZGVyQ2xpZW50OworICAgIFVuaXF1ZVJlZjxBUEk6OkluamVjdGVkQnVuZGxlOjpF
ZGl0b3JDbGllbnQ+IG1fZWRpdG9yQ2xpZW50OworICAgIFVuaXF1ZVJlZjxBUEk6OkluamVjdGVk
QnVuZGxlOjpGb3JtQ2xpZW50PiBtX2Zvcm1DbGllbnQ7CisgICAgVW5pcXVlUmVmPEFQSTo6SW5q
ZWN0ZWRCdW5kbGU6OlBhZ2VMb2FkZXJDbGllbnQ+IG1fbG9hZGVyQ2xpZW50OwogICAgIEluamVj
dGVkQnVuZGxlUGFnZVBvbGljeUNsaWVudCBtX3BvbGljeUNsaWVudDsKICAgICBJbmplY3RlZEJ1
bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQgbV9yZXNvdXJjZUxvYWRDbGllbnQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudD4gbV91aUNsaWVu
dDsKKyAgICBVbmlxdWVSZWY8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PiBtX3Vp
Q2xpZW50OwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBJbmplY3RlZEJ1bmRsZVBh
Z2VGdWxsU2NyZWVuQ2xpZW50IG1fZnVsbFNjcmVlbkNsaWVudDsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDViOGY3MjQxY2Y4Li4w
ZDIxMTk1ZDRkZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBPYmplY3RzIG93bmluZyBBUEkgY2xpZW50
cyBzaG91bGQgdXNlIFVuaXF1ZVJlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczMjY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBkYXRlIHVuaXQgdGVzdCB0byBjaGVjayB0aGF0IGl0J3MgcG9zc2li
bGUgdG8gY3JlYXRlIGEgVW5pcXVlUmVmIGJ5IG1vdmluZyBhIHN0ZDo6dW5pcXVlX3B0ci4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1VuaXF1ZVJlZi5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wNi0xMiAgRGFuaWVsIEJhdGVzICA8ZGFi
YXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIFNlY3VyaXR5T3Jp
Z2luOjpJc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVW5pcXVlUmVmLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1VuaXF1ZVJlZi5jcHAKaW5kZXggNGQyYjIyYWE1NGYuLmVhOGUwZGRjY2RmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9VbmlxdWVSZWYuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1VuaXF1ZVJlZi5jcHAKQEAgLTc4LDcgKzc4
LDEwIEBAIFRFU1QoV1RGLCBVbmlxdWVSZWYpCiAgICAgCiAgICAgQyBoKG1ha2VVbmlxdWVSZWY8
QT4oKSk7CiAgICAgQyBpKG1ha2VVbmlxdWVSZWY8RD4oKSk7Ci0gICAgCisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Qj4gayA9IHN0ZDo6bWFrZV91bmlxdWU8Qj4oMTAsIDExLCAxMik7CisgICAgVW5p
cXVlUmVmPEI+IGwgPSBXVEZNb3ZlKGspOworCiAgICAgVU5VU0VEX1BBUkFNKGIpOwogICAgIFVO
VVNFRF9QQVJBTShjKTsKICAgICBVTlVTRURfUEFSQU0oZCk7CkBAIC04OCw2ICs5MSw4IEBAIFRF
U1QoV1RGLCBVbmlxdWVSZWYpCiAgICAgVU5VU0VEX1BBUkFNKGgpOwogICAgIFVOVVNFRF9QQVJB
TShpKTsKICAgICBVTlVTRURfUEFSQU0oaik7CisgICAgVU5VU0VEX1BBUkFNKGspOworICAgIFVO
VVNFRF9QQVJBTShsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="333668"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312860</attachid>
            <date>2017-06-13 22:59:03 -0700</date>
            <delta_ts>2017-06-14 08:37:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-clients-by-value.diff</filename>
            <type>text/plain</type>
            <size>23283</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0YWIwOTE5MjU4ZC4uZTMxMGQ4NGIyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNy0wNi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgQVBJIGNsaWVudHMgc2hvdWxkIG5vdCBiZSBwYXNzZWQgYnkg
dmFsdWUgdG8gdGhlIHNldHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MzI2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ5IHVzaW5nIGEgcnZhbHVlIHJlZmVyZW5jZSB3ZSBtYWtlIGl0IG1vcmUg
ZXhwbGljaXQgdGhhdCB0aGUgb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkIGFuZCB3ZSBhdm9pZCB0
aGUKKyAgICAgICAgcGFyYW1ldGVyIGNvbnN0cnVjdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0b21hdGlvblNlc3Npb246OnNldENsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
R2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2Nh
dGlvbk1hbmFnZXJQcm94eTo6c2V0UHJvdmlkZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJH
ZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OnNldENsaWVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Oldl
YlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SGlzdG9yeUNs
aWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0TmF2aWdhdGlvbkNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0TG9hZGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQb2xpY3lDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEZvcm1DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnNldFVJQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRJY29uTG9hZGluZ0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0RmluZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RmluZE1h
dGNoZXNDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEZ1bGxzY3JlZW5DbGllbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldExvYWREZWNpc2lvbkZvckljb24pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SGlz
dG9yeUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXREb3dubG9h
ZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9u
Q2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnNldEluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpzZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlRm9ybUNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlVUlDbGllbnQpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisKIDIwMTctMDYtMTMgIE1hdHQgUmFqY2Eg
IDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYnNpdGVQb2xpY2llczogbGV0IGNsaWVu
dHMgc2VsZWN0IHNwZWNpZmljIGF1dG9wbGF5IHF1aXJrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CmluZGV4IGNiMzY2NTM0OTFiLi5mZmUwMGY1MjFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cApAQCAtNjMsNyArNjMsNyBAQCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6fldlYkF1dG9tYXRpb25T
ZXNzaW9uKCkKICAgICAgICAgbV9wcm9jZXNzUG9vbC0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkF1dG9tYXRpb25TZXNzaW9uQ2xpZW50PiBjbGllbnQpCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvblNlc3Npb25D
bGllbnQ+JiYgY2xpZW50KQogewogICAgIG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmgKaW5kZXggNjFmOTE4MGYyYWEuLmU1ZmI1ZjA5ZTUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIFdlYkF1dG9tYXRp
b25TZXNzaW9uKCk7CiAgICAgfldlYkF1dG9tYXRpb25TZXNzaW9uKCk7CiAKLSAgICB2b2lkIHNl
dENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudD4pOwor
ICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25TZXNzaW9u
Q2xpZW50PiYmKTsKIAogICAgIHZvaWQgc2V0U2Vzc2lvbklkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiBzZXNzaW9uSWRlbnRpZmllcikgeyBtX3Nlc3Npb25JZGVudGlmaWVyID0gc2Vzc2lvbklkZW50
aWZpZXI7IH0KICAgICBTdHJpbmcgc2Vzc2lvbklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X3Nlc3Npb25JZGVudGlmaWVyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcAppbmRleCA1NzhmMTY4YTc4Mi4uODdi
Mjk2ODZiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9sb2Nh
dGlvbk1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkdl
b2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcApAQCAtNTAsNyArNTAsNyBAQCBXZWJHZW9sb2NhdGlv
bk1hbmFnZXJQcm94eTo6V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQbwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAotdm9pZCBXZWJHZW9sb2NhdGlvbk1hbmFn
ZXJQcm94eTo6c2V0UHJvdmlkZXIoc3RkOjp1bmlxdWVfcHRyPEFQSTo6R2VvbG9jYXRpb25Qcm92
aWRlcj4gcHJvdmlkZXIpCit2b2lkIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5OjpzZXRQcm92
aWRlcihzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpHZW9sb2NhdGlvblByb3ZpZGVyPiYmIHByb3ZpZGVy
KQogewogICAgIGlmICghcHJvdmlkZXIpCiAgICAgICAgIG1fcHJvdmlkZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFQSTo6R2VvbG9jYXRpb25Qcm92aWRlcj4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmgKaW5kZXggZWU5NTMw
YzQ3ZWYuLjE1MTUzOTIwNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgUmVmPFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PiBjcmVhdGUoV2Vi
UHJvY2Vzc1Bvb2wqKTsKIAotICAgIHZvaWQgc2V0UHJvdmlkZXIoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6R2VvbG9jYXRpb25Qcm92aWRlcj4pOworICAgIHZvaWQgc2V0UHJvdmlkZXIoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6R2VvbG9jYXRpb25Qcm92aWRlcj4mJik7CiAKICAgICB2b2lkIHByb3ZpZGVy
RGlkQ2hhbmdlUG9zaXRpb24oV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiopOwogICAgIHZvaWQgcHJv
dmlkZXJEaWRGYWlsVG9EZXRlcm1pbmVQb3NpdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSA9IFN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJ
Y29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFz
ZS5jcHAKaW5kZXggZTliYWJiYWZmZjkuLmI1ZmQyZTM3NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcApAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQg
V2ViSWNvbkRhdGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIG1faWNvbkRhdGFiYXNlSW1wbC0+Y2xv
c2UoKTsKIH0KIAotdm9pZCBXZWJJY29uRGF0YWJhc2U6OnNldENsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpJY29uRGF0YWJhc2VDbGllbnQ+IGNsaWVudCkKK3ZvaWQgV2ViSWNvbkRhdGFiYXNl
OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SWNvbkRhdGFiYXNlQ2xpZW50PiYmIGNs
aWVudCkKIHsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgbV9jbGllbnQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFQSTo6SWNvbkRhdGFiYXNlQ2xpZW50PigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkljb25EYXRhYmFzZS5oCmluZGV4IDNhNTYyYmQ4OTRkLi44NzEzYThiZmQ1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaApAQCAtODEsNyArODEs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKTsKICAg
ICB2b2lkIGNsb3NlKCk7CiAKLSAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpJY29uRGF0YWJhc2VDbGllbnQ+KTsKKyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpJY29uRGF0YWJhc2VDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKGJvb2wpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IGIxNzAyYzUwZWY2Li5lNDQ2YWVhNjhlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTMyNiw2ICszMjYsNyBAQCBXZWJQYWdlUHJv
eHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MsIHVpbgogICAgICwgbV9jb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlv
bikpCiAgICAgLCBtX2xvYWRlckNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6TG9hZGVyQ2xp
ZW50PigpKQogICAgICwgbV9wb2xpY3lDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OlBvbGlj
eUNsaWVudD4oKSkKKyAgICAsIG1faWNvbkxvYWRpbmdDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxB
UEk6Okljb25Mb2FkaW5nQ2xpZW50PigpKQogICAgICwgbV9mb3JtQ2xpZW50KHN0ZDo6bWFrZV91
bmlxdWU8QVBJOjpGb3JtQ2xpZW50PigpKQogICAgICwgbV91aUNsaWVudChzdGQ6Om1ha2VfdW5p
cXVlPEFQSTo6VUlDbGllbnQ+KCkpCiAgICAgLCBtX2ZpbmRDbGllbnQoc3RkOjptYWtlX3VuaXF1
ZTxBUEk6OkZpbmRDbGllbnQ+KCkpCkBAIC00NjksMTcgKzQ3MCwxNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0UHJlZmVyZW5jZXMoV2ViUHJlZmVyZW5jZXMmIHByZWZlcmVuY2VzKQogICAgIHBy
ZWZlcmVuY2VzRGlkQ2hhbmdlKCk7CiB9CiAgICAgCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0SGlz
dG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpIaXN0b3J5Q2xpZW50PiBoaXN0b3J5Q2xp
ZW50KQordm9pZCBXZWJQYWdlUHJveHk6OnNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6SGlzdG9yeUNsaWVudD4mJiBoaXN0b3J5Q2xpZW50KQogewogICAgIG1faGlzdG9yeUNs
aWVudCA9IFdURk1vdmUoaGlzdG9yeUNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXROYXZpZ2F0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Ok5hdmlnYXRpb25DbGllbnQ+
IG5hdmlnYXRpb25DbGllbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TmF2aWdhdGlvbkNsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpOYXZpZ2F0aW9uQ2xpZW50PiYmIG5hdmlnYXRpb25DbGll
bnQpCiB7CiAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50ID0gV1RGTW92ZShuYXZpZ2F0aW9uQ2xpZW50
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldExvYWRlckNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpMb2FkZXJDbGllbnQ+IGxvYWRlckNsaWVudCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRMb2FkZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TG9hZGVyQ2xpZW50PiYmIGxvYWRl
ckNsaWVudCkKIHsKICAgICBpZiAoIWxvYWRlckNsaWVudCkgewogICAgICAgICBtX2xvYWRlckNs
aWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpMb2FkZXJDbGllbnQ+KCk7CkBAIC00ODksNyAr
NDkwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldExvYWRlckNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpMb2FkZXJDbGllbnQ+IGxvYWRlckNsaWUKICAgICBtX2xvYWRlckNsaWVudCA9IFdU
Rk1vdmUobG9hZGVyQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFBvbGljeUNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpQb2xpY3lDbGllbnQ+IHBvbGljeUNsaWVudCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZXRQb2xpY3lDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6UG9s
aWN5Q2xpZW50PiYmIHBvbGljeUNsaWVudCkKIHsKICAgICBpZiAoIXBvbGljeUNsaWVudCkgewog
ICAgICAgICBtX3BvbGljeUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpQb2xpY3lDbGll
bnQ+KCk7CkBAIC00OTksNyArNTAwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBvbGljeUNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpQb2xpY3lDbGllbnQ+IHBvbGljeUNsaWUKICAgICBt
X3BvbGljeUNsaWVudCA9IFdURk1vdmUocG9saWN5Q2xpZW50KTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJveHk6OnNldEZvcm1DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Rm9ybUNsaWVudD4gZm9y
bUNsaWVudCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRGb3JtQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkZvcm1DbGllbnQ+JiYgZm9ybUNsaWVudCkKIHsKICAgICBpZiAoIWZvcm1DbGllbnQp
IHsKICAgICAgICAgbV9mb3JtQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkZvcm1DbGll
bnQ+KCk7CkBAIC01MDksNyArNTEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZvcm1DbGll
bnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Rm9ybUNsaWVudD4gZm9ybUNsaWVudCkKICAgICBtX2Zv
cm1DbGllbnQgPSBXVEZNb3ZlKGZvcm1DbGllbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
c2V0VUlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6VUlDbGllbnQ+IHVpQ2xpZW50KQordm9p
ZCBXZWJQYWdlUHJveHk6OnNldFVJQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlVJQ2xpZW50
PiYmIHVpQ2xpZW50KQogewogICAgIGlmICghdWlDbGllbnQpIHsKICAgICAgICAgbV91aUNsaWVu
dCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpVSUNsaWVudD4oKTsKQEAgLTUyNSw3ICs1MjYsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VUlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6VUlD
bGllbnQ+IHVpQ2xpZW50KQogICAgIHNldENhblJ1bk1vZGFsKG1fdWlDbGllbnQtPmNhblJ1bk1v
ZGFsKCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0SWNvbkxvYWRpbmdDbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6SWNvbkxvYWRpbmdDbGllbnQ+IGljb25Mb2FkaW5nQ2xpZW50KQor
dm9pZCBXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5nQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6Okljb25Mb2FkaW5nQ2xpZW50PiYmIGljb25Mb2FkaW5nQ2xpZW50KQogewogICAgIGJvb2wg
aGFzQ2xpZW50ID0gaWNvbkxvYWRpbmdDbGllbnQuZ2V0KCk7CiAgICAgaWYgKCFpY29uTG9hZGlu
Z0NsaWVudCkKQEAgLTUzOSw3ICs1NDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SWNvbkxv
YWRpbmdDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SWNvbkxvYWRpbmdDbGllbnQ+CiAgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VJY29uTG9hZGluZ0NsaWVu
dChoYXNDbGllbnQpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRGaW5k
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZpbmRDbGllbnQ+IGZpbmRDbGllbnQpCit2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0RmluZENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGaW5kQ2xp
ZW50PiYmIGZpbmRDbGllbnQpCiB7CiAgICAgaWYgKCFmaW5kQ2xpZW50KSB7CiAgICAgICAgIG1f
ZmluZENsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpGaW5kQ2xpZW50PigpOwpAQCAtNTQ5
LDcgKzU1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRGaW5kQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkZpbmRDbGllbnQ+IGZpbmRDbGllbnQpCiAgICAgbV9maW5kQ2xpZW50ID0gV1RG
TW92ZShmaW5kQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRNYXRjaGVz
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50PiBmaW5kTWF0Y2hl
c0NsaWVudCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRGaW5kTWF0Y2hlc0NsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpGaW5kTWF0Y2hlc0NsaWVudD4mJiBmaW5kTWF0Y2hlc0NsaWVudCkKIHsK
ICAgICBpZiAoIWZpbmRNYXRjaGVzQ2xpZW50KSB7CiAgICAgICAgIG1fZmluZE1hdGNoZXNDbGll
bnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RmluZE1hdGNoZXNDbGllbnQ+KCk7CkBAIC01NTks
NyArNTYwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRNYXRjaGVzQ2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50PgogICAgIG1fZmluZE1hdGNoZXNDbGll
bnQgPSBXVEZNb3ZlKGZpbmRNYXRjaGVzQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OnNldERpYWdub3N0aWNMb2dnaW5nQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50PiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0NsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudD4mJiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKIHsKICAgICBp
ZiAoIWRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KSB7CiAgICAgICAgIG1fZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+
KCk7CkBAIC01NzAsNyArNTcxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERpYWdub3N0aWNM
b2dnaW5nQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkRpYWdub3N0aWNMb2cKIH0KIAogI2lm
IEVOQUJMRShDT05URVhUX01FTlVTKQotdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRleHRNZW51
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkNvbnRleHRNZW51Q2xpZW50PiBjb250ZXh0TWVu
dUNsaWVudCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb250ZXh0TWVudUNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpDb250ZXh0TWVudUNsaWVudD4mJiBjb250ZXh0TWVudUNsaWVudCkKIHsK
ICAgICBpZiAoIWNvbnRleHRNZW51Q2xpZW50KSB7CiAgICAgICAgIG1fY29udGV4dE1lbnVDbGll
bnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6Q29udGV4dE1lbnVDbGllbnQ+KCk7CkBAIC03NTgs
NiArNzU5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsb3NlKCkKICAgICBtX2xvYWRlckNsaWVu
dCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpMb2FkZXJDbGllbnQ+KCk7CiAgICAgbV9uYXZpZ2F0
aW9uQ2xpZW50ID0gbnVsbHB0cjsKICAgICBtX3BvbGljeUNsaWVudCA9IHN0ZDo6bWFrZV91bmlx
dWU8QVBJOjpQb2xpY3lDbGllbnQ+KCk7CisgICAgbV9pY29uTG9hZGluZ0NsaWVudCA9IHN0ZDo6
bWFrZV91bmlxdWU8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4oKTsKICAgICBtX2Zvcm1DbGllbnQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6Rm9ybUNsaWVudD4oKTsKICAgICBtX3VpQ2xpZW50ID0g
c3RkOjptYWtlX3VuaXF1ZTxBUEk6OlVJQ2xpZW50PigpOwogICAgIG1fZmluZENsaWVudCA9IHN0
ZDo6bWFrZV91bmlxdWU8QVBJOjpGaW5kQ2xpZW50PigpOwpAQCAtNzY2LDYgKzc2OCw5IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpjbG9zZSgpCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAgICAg
bV9jb250ZXh0TWVudUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpDb250ZXh0TWVudUNs
aWVudD4oKTsKICNlbmRpZgorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX2Z1bGxz
Y3JlZW5DbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RnVsbHNjcmVlbkNsaWVudD4oKTsK
KyNlbmRpZgogCiAgICAgbV93ZWJQcm9jZXNzTGlmZXRpbWVUcmFja2VyLnBhZ2VXYXNJbnZhbGlk
YXRlZCgpOwogCkBAIC00MjcwLDggKzQyNzUsMTMgQEAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eSogV2ViUGFnZVByb3h5OjpmdWxsU2NyZWVuTWFuYWdlcigpCiAgICAgcmV0dXJuIG1fZnVsbFNj
cmVlbk1hbmFnZXIuZ2V0KCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRGdWxsc2NyZWVu
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3JlZW5DbGllbnQ+IGNsaWVudCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkZ1bGxzY3JlZW5DbGllbnQ+JiYgY2xpZW50KQogeworICAgIGlmICghY2xpZW50KSB7CisgICAg
ICAgIG1fZnVsbHNjcmVlbkNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpGdWxsc2NyZWVu
Q2xpZW50PigpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbV9mdWxsc2NyZWVuQ2xp
ZW50ID0gV1RGTW92ZShjbGllbnQpOwogfQogI2VuZGlmCkBAIC02NzQxLDkgKzY3NTEsNiBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkKIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmdldExvYWREZWNpc2lvbkZvckljb24oY29uc3QgV2ViQ29yZTo6TGlua0ljb24m
IGljb24sIHVpbnQ2NF90IGxvYWRJZGVudGlmaWVyKQogewotICAgIGlmICghbV9pY29uTG9hZGlu
Z0NsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV9pY29uTG9hZGluZ0NsaWVudC0+Z2V0
TG9hZERlY2lzaW9uRm9ySWNvbihpY29uLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZlB0cjxX
ZWJQYWdlUHJveHk+KHRoaXMpLCBsb2FkSWRlbnRpZmllcl0oc3RkOjpmdW5jdGlvbjx2b2lkIChB
UEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikgewogICAg
ICAgICBpZiAoIWlzVmFsaWQoKSkgewogICAgICAgICAgICAgaWYgKGNhbGxiYWNrRnVuY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZTUzNWJhYzAxMzMu
LjZhNDU3NzRiYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC0zMzQsNyArMzM0LDcgQEAgcHVibGljOgogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkq
IGZ1bGxTY3JlZW5NYW5hZ2VyKCk7CiAKICAgICBBUEk6OkZ1bGxzY3JlZW5DbGllbnQmIGZ1bGxz
Y3JlZW5DbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9mdWxsc2NyZWVuQ2xpZW50OyB9Ci0gICAg
dm9pZCBzZXRGdWxsc2NyZWVuQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZ1bGxzY3JlZW5D
bGllbnQ+KTsKKyAgICB2b2lkIHNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6RnVsbHNjcmVlbkNsaWVudD4mJik7CiAjZW5kaWYKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBI
QVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSkKICAgICBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkqIHBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKTsKQEAgLTM0OCwyNyArMzQ4LDI3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShDT05URVhUX01FTlVTKQogICAgIEFQSTo6Q29udGV4dE1lbnVDbGllbnQmIGNvbnRleHRNZW51
Q2xpZW50KCkgeyByZXR1cm4gKm1fY29udGV4dE1lbnVDbGllbnQ7IH0KLSAgICB2b2lkIHNldENv
bnRleHRNZW51Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkNvbnRleHRNZW51Q2xpZW50Pik7
CisgICAgdm9pZCBzZXRDb250ZXh0TWVudUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDb250
ZXh0TWVudUNsaWVudD4mJik7CiAjZW5kaWYKICAgICBBUEk6OkZpbmRDbGllbnQmIGZpbmRDbGll
bnQoKSB7IHJldHVybiAqbV9maW5kQ2xpZW50OyB9Ci0gICAgdm9pZCBzZXRGaW5kQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkZpbmRDbGllbnQ+KTsKKyAgICB2b2lkIHNldEZpbmRDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6RmluZENsaWVudD4mJik7CiAgICAgQVBJOjpGaW5kTWF0Y2hl
c0NsaWVudCYgZmluZE1hdGNoZXNDbGllbnQoKSB7IHJldHVybiAqbV9maW5kTWF0Y2hlc0NsaWVu
dDsgfQotICAgIHZvaWQgc2V0RmluZE1hdGNoZXNDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
RmluZE1hdGNoZXNDbGllbnQ+KTsKKyAgICB2b2lkIHNldEZpbmRNYXRjaGVzQ2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkZpbmRNYXRjaGVzQ2xpZW50PiYmKTsKICAgICBBUEk6OkRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpIHsgcmV0dXJuICptX2Rp
YWdub3N0aWNMb2dnaW5nQ2xpZW50OyB9Ci0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudD4pOwotICAg
IHZvaWQgc2V0Rm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGb3JtQ2xpZW50Pik7Ci0g
ICAgdm9pZCBzZXROYXZpZ2F0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Ok5hdmlnYXRp
b25DbGllbnQ+KTsKLSAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6SGlzdG9yeUNsaWVudD4pOwotICAgIHZvaWQgc2V0TG9hZGVyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkxvYWRlckNsaWVudD4pOwotICAgIHZvaWQgc2V0UG9saWN5Q2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OlBvbGljeUNsaWVudD4pOworICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+
JiYpOworICAgIHZvaWQgc2V0Rm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGb3JtQ2xp
ZW50PiYmKTsKKyAgICB2b2lkIHNldE5hdmlnYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6TmF2aWdhdGlvbkNsaWVudD4mJik7CisgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6Okhpc3RvcnlDbGllbnQ+JiYpOworICAgIHZvaWQgc2V0TG9hZGVyQ2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxvYWRlckNsaWVudD4mJik7CisgICAgdm9pZCBzZXRQ
b2xpY3lDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6UG9saWN5Q2xpZW50PiYmKTsKICAgICB2
b2lkIHNldEluamVjdGVkQnVuZGxlQ2xpZW50KGNvbnN0IFdLUGFnZUluamVjdGVkQnVuZGxlQ2xp
ZW50QmFzZSopOwogICAgIFdlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudCogaW5qZWN0ZWRCdW5k
bGVDbGllbnQoKSB7IHJldHVybiBtX2luamVjdGVkQnVuZGxlQ2xpZW50LmdldCgpOyB9CiAKICAg
ICBBUEk6OlVJQ2xpZW50JiB1aUNsaWVudCgpIHsgcmV0dXJuICptX3VpQ2xpZW50OyB9Ci0gICAg
dm9pZCBzZXRVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpVSUNsaWVudD4pOworICAgIHZv
aWQgc2V0VUlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6VUlDbGllbnQ+JiYpOwogCiAgICAg
QVBJOjpJY29uTG9hZGluZ0NsaWVudCYgaWNvbkxvYWRpbmdDbGllbnQoKSB7IHJldHVybiAqbV9p
Y29uTG9hZGluZ0NsaWVudDsgfQotICAgIHZvaWQgc2V0SWNvbkxvYWRpbmdDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6SWNvbkxvYWRpbmdDbGllbnQ+KTsKKyAgICB2b2lkIHNldEljb25Mb2Fk
aW5nQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PiYmKTsKIAog
ICAgIHZvaWQgaW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggYWZjNDc2ODMxNTkuLjgzY2Q1NTkyMmFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTM0MCw3ICsz
NDAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplQ29ubmVjdGlvbkNsaWVudChj
b25zdCBXS0NvbnRleHRDb25uZWN0aW9uQ2xpZW50QgogICAgIG1fY29ubmVjdGlvbkNsaWVudC5p
bml0aWFsaXplKGNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEhpc3RvcnlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IGhp
c3RvcnlDbGllbnQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmIGhpc3RvcnlDbGll
bnQpCiB7CiAgICAgaWYgKCFoaXN0b3J5Q2xpZW50KQogICAgICAgICBtX2hpc3RvcnlDbGllbnQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCk7CkBA
IC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SGlzdG9yeUNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUMKICAgICAgICAgbV9oaXN0
b3J5Q2xpZW50ID0gV1RGTW92ZShoaXN0b3J5Q2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0RG93bmxvYWRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGll
bnQ+IGRvd25sb2FkQ2xpZW50KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG93bmxvYWRDbGll
bnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYgZG93bmxvYWRDbGllbnQp
CiB7CiAgICAgaWYgKCFkb3dubG9hZENsaWVudCkKICAgICAgICAgbV9kb3dubG9hZENsaWVudCA9
IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpEb3dubG9hZENsaWVudD4oKTsKQEAgLTM1Niw3ICszNTYs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb3dubG9hZENsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpEb3dubG9hZENsaWVudD4gZG93bgogICAgICAgICBtX2Rvd25sb2FkQ2xpZW50ID0g
V1RGTW92ZShkb3dubG9hZENsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1
dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gYXV0
b21hdGlvbkNsaWVudCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJiBhdXRvbWF0aW9uQ2xpZW50
KQogewogICAgIGlmICghYXV0b21hdGlvbkNsaWVudCkKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xp
ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDczOWIzOTcwMTUwLi5jZmI2
N2FhMmY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAg
LTE0Miw5ICsxNDIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0
IFdLQ29udGV4dENsaWVudEJhc2UqKTsKICAgICB2b2lkIGluaXRpYWxpemVJbmplY3RlZEJ1bmRs
ZUNsaWVudChjb25zdCBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudEJhc2UqKTsKICAgICB2
b2lkIGluaXRpYWxpemVDb25uZWN0aW9uQ2xpZW50KGNvbnN0IFdLQ29udGV4dENvbm5lY3Rpb25D
bGllbnRCYXNlKik7Ci0gICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50Pik7Ci0gICAgdm9pZCBzZXREb3dubG9hZENs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEb3dubG9hZENsaWVudD4pOwotICAgIHZvaWQgc2V0
QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50Pik7
CisgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKKyAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKKyAgICB2b2lkIHNldEF1dG9tYXRp
b25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJik7CiAgICAg
dm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZvaWQgc2V0TWF4
aW11bU51bWJlck9mUHJvY2Vzc2VzKHVuc2lnbmVkKTsgLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIHdo
ZW4gdGhlcmUgYXJlIG5vIHByb2Nlc3NlcyBydW5uaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDU2YjlmZDllYTIxLi43YjNiMmQxNjIz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApA
QCAtNjk1LDcgKzY5NSw3IEBAIHVpbnQ2NF90IFdlYlBhZ2U6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkKIH0KIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotdm9pZCBXZWJQYWdlOjpz
ZXRJbmplY3RlZEJ1bmRsZUNvbnRleHRNZW51Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Oklu
amVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQ+IGNvbnRleHRNZW51Q2xpZW50KQor
dm9pZCBXZWJQYWdlOjpzZXRJbmplY3RlZEJ1bmRsZUNvbnRleHRNZW51Q2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQ+JiYgY29u
dGV4dE1lbnVDbGllbnQpCiB7CiAgICAgaWYgKCFjb250ZXh0TWVudUNsaWVudCkgewogICAgICAg
ICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkluamVjdGVkQnVu
ZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQ+KCk7CkBAIC03MDYsNyArNzA2LDcgQEAgdm9pZCBX
ZWJQYWdlOjpzZXRJbmplY3RlZEJ1bmRsZUNvbnRleHRNZW51Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkluamVjdGVkQnUKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2U6OnNldEluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpF
ZGl0b3JDbGllbnQ+IGVkaXRvckNsaWVudCkKK3ZvaWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkVkaXRv
ckNsaWVudD4mJiBlZGl0b3JDbGllbnQpCiB7CiAgICAgaWYgKCFlZGl0b3JDbGllbnQpIHsKICAg
ICAgICAgbV9lZGl0b3JDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRCdW5k
bGU6OkVkaXRvckNsaWVudD4oKTsKQEAgLTcxNiw3ICs3MTYsNyBAQCB2b2lkIFdlYlBhZ2U6OnNl
dEluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVk
QnVuZGxlOgogICAgIG1fZWRpdG9yQ2xpZW50ID0gV1RGTW92ZShlZGl0b3JDbGllbnQpOwogfQog
Ci12b2lkIFdlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlRm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6Rm9ybUNsaWVudD4gZm9ybUNsaWVudCkKK3ZvaWQgV2Vi
UGFnZTo6c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Oklu
amVjdGVkQnVuZGxlOjpGb3JtQ2xpZW50PiYmIGZvcm1DbGllbnQpCiB7CiAgICAgaWYgKCFmb3Jt
Q2xpZW50KSB7CiAgICAgICAgIG1fZm9ybUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpJ
bmplY3RlZEJ1bmRsZTo6Rm9ybUNsaWVudD4oKTsKQEAgLTcyNiw3ICs3MjYsNyBAQCB2b2lkIFdl
YlBhZ2U6OnNldEluamVjdGVkQnVuZGxlRm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJ
bmplY3RlZEJ1bmRsZTo6RgogICAgIG1fZm9ybUNsaWVudCA9IFdURk1vdmUoZm9ybUNsaWVudCk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlTG9hZGVyQ2xpZW50PiBsb2Fk
ZXJDbGllbnQpCit2b2lkIFdlYlBhZ2U6OnNldEluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUxvYWRlckNsaWVudD4m
JiBsb2FkZXJDbGllbnQpCiB7CiAgICAgaWYgKCFsb2FkZXJDbGllbnQpIHsKICAgICAgICAgbV9s
b2FkZXJDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VM
b2FkZXJDbGllbnQ+KCk7CkBAIC03NTIsNyArNzUyLDcgQEAgdm9pZCBXZWJQYWdlOjppbml0aWFs
aXplSW5qZWN0ZWRCdW5kbGVSZXNvdXJjZUxvYWRDbGllbnQoV0tCdW5kbGVQYWdlUmVzb3VyY2VM
b2EKICAgICBtX3Jlc291cmNlTG9hZENsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6c2V0SW5qZWN0ZWRCdW5kbGVVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50PiB1aUNsaWVudCkKK3ZvaWQgV2ViUGFnZTo6
c2V0SW5qZWN0ZWRCdW5kbGVVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1
bmRsZTo6UGFnZVVJQ2xpZW50PiYmIHVpQ2xpZW50KQogewogICAgIGlmICghdWlDbGllbnQpIHsK
ICAgICAgICAgbV91aUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpJbmplY3RlZEJ1bmRs
ZTo6UGFnZVVJQ2xpZW50PigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKaW5kZXggNWJmZGNmNjdmNjcuLmMxMDRmZjIzZTMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTMyNiwxNCArMzI2LDE0IEBAIHB1
YmxpYzoKIAogICAgIC8vIC0tIEluamVjdGVkQnVuZGxlIG1ldGhvZHMKICNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKLSAgICB2b2lkIHNldEluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVu
dD4pOworICAgIHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUNvbnRleHRNZW51Q2xpZW50PiYmKTsK
ICNlbmRpZgotICAgIHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkVkaXRvckNsaWVudD4pOwotICAgIHZvaWQgc2V0
SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVu
ZGxlOjpGb3JtQ2xpZW50Pik7Ci0gICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VMb2FkZXJDbGll
bnQ+KTsKKyAgICB2b2lkIHNldEluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkluamVjdGVkQnVuZGxlOjpFZGl0b3JDbGllbnQ+JiYpOworICAgIHZvaWQgc2V0
SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkluamVjdGVkQnVu
ZGxlOjpGb3JtQ2xpZW50PiYmKTsKKyAgICB2b2lkIHNldEluamVjdGVkQnVuZGxlUGFnZUxvYWRl
ckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUxvYWRlckNs
aWVudD4mJik7CiAgICAgdm9pZCBpbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQb2xpY3lDbGllbnQo
V0tCdW5kbGVQYWdlUG9saWN5Q2xpZW50QmFzZSopOwogICAgIHZvaWQgaW5pdGlhbGl6ZUluamVj
dGVkQnVuZGxlUmVzb3VyY2VMb2FkQ2xpZW50KFdLQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVu
dEJhc2UqKTsKLSAgICB2b2lkIHNldEluamVjdGVkQnVuZGxlVUlDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudD4pOworICAgIHZvaWQgc2V0SW5q
ZWN0ZWRCdW5kbGVVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbmplY3RlZEJ1bmRsZTo6
UGFnZVVJQ2xpZW50PiYmKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgdm9pZCBp
bml0aWFsaXplSW5qZWN0ZWRCdW5kbGVGdWxsU2NyZWVuQ2xpZW50KFdLQnVuZGxlUGFnZUZ1bGxT
Y3JlZW5DbGllbnRCYXNlKik7CiAjZW5kaWYK
</data>
<flag name="review"
          id="333758"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>