<?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>45197</bug_id>
          
          <creation_ts>2010-09-03 13:44:23 -0700</creation_ts>
          <short_desc>[GTK] Need a WebSocket implementation</short_desc>
          <delta_ts>2010-09-08 09:31:04 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>danw</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274156</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-03 13:44:23 -0700</bug_when>
    <thetext>This should be fairly easy to implement using GIO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274219</commentid>
    <comment_count>1</comment_count>
      <attachid>66558</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-03 15:35:00 -0700</bug_when>
    <thetext>Created attachment 66558
Add WebSocket support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274443</commentid>
    <comment_count>2</comment_count>
      <attachid>66558</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-05 10:28:28 -0700</bug_when>
    <thetext>Comment on attachment 66558
Add WebSocket support

The only comment I have is why the socket source is created and stored at connection time if it&apos;s not going to be necessarily used (?). Or is writing less data than what we have in platformSend so common that it&apos;s worth to do things that way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274652</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-06 08:41:51 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 66558 [details])
&gt; The only comment I have is why the socket source is created and stored at connection time if it&apos;s not going to be necessarily used (?).

Hmm. The GIO documentation seemed unclear about whether or not the reference to the GSocketClient needed to stick around until the connection was finished, so I figured it was safer to keep the reference until it was definitely unused.

&gt; Or is writing less data than what we have in platformSend so common that it&apos;s worth to do things that way?

Yeah, we have to handle this. It also presents a good opportunity to start waiting for socket writability. It turns out that if you don&apos;t only do this when you need to, the GSource fires continuously and eats up all of your cycles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275164</commentid>
    <comment_count>4</comment_count>
      <attachid>66558</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-07 11:09:01 -0700</bug_when>
    <thetext>Comment on attachment 66558
Add WebSocket support

&gt; +        PlatformRefPtr&lt;GSocketClient&gt; m_socketClient;

you don&apos;t actually need to keep it around; all gio async ops hold a ref on the &quot;source&quot; object for the duration of the async op

&gt; +    PlatformRefPtr&lt;GSocketConnectable&gt; address = g_network_address_new(url.host().utf8().data(), port);
&gt; +    g_socket_client_connect_async(m_socketClient.get(), address.get(), 0,
&gt; +        reinterpret_cast&lt;GAsyncReadyCallback&gt;(connectedCallback), this);

Use g_socket_client_connect_to_host_async() here, then you don&apos;t need to create the temporary GNetworkAddress

&gt; +void SocketStreamHandle::stopWaitingForSocketWritability()
&gt; +{
&gt; +    if (!m_writeReadySource || !m_waitingForSocketWritability)
&gt; +        return;
&gt; +    g_source_remove(g_source_get_id(m_writeReadySource.get()));

That&apos;s equivalent to &quot;g_source_destroy(m_writeReadySource.get());&quot;. In both cases, you can&apos;t use the source again after doing that...

&gt; +static gboolean writeReadyCallback(GSocket*, GIOCondition condition, SocketStreamHandle* handle)
&gt; +{
&gt; +    if (!isActiveHandle(handle))
&gt; +        return FALSE;
&gt; +    if (condition &amp; G_IO_OUT)
&gt; +        handle-&gt;writeReady();
&gt; +    return TRUE;
&gt; +}

You should check if &quot;condition &amp; (G_IO_ERR | G_IO_HUP)&quot; is set, and fail the connection (and return FALSE) in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275169</commentid>
    <comment_count>5</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-07 11:11:33 -0700</bug_when>
    <thetext>higher-level comment; the ickiness on the write end could be removed if the base API were changed to have a &quot;didSend()&quot; call instead of (or even in addition to) sendPending().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275214</commentid>
    <comment_count>6</comment_count>
      <attachid>66751</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-07 12:33:32 -0700</bug_when>
    <thetext>Created attachment 66751
Patch with Dan&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275219</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-07 12:35:46 -0700</bug_when>
    <thetext>(In reply to comment #5)

Thanks Dan! I&apos;ve attached a patch with your suggestions. One variation I made was that when the writability callback gets G_IO_HUP, it just calls ::close() on the SocketStreamHandle.

&gt; higher-level comment; the ickiness on the write end could be removed if the base API were changed to have a &quot;didSend()&quot; call instead of (or even in addition to) sendPending().

I agree strongly with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275699</commentid>
    <comment_count>8</comment_count>
      <attachid>66751</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-08 02:27:03 -0700</bug_when>
    <thetext>Comment on attachment 66751
Patch with Dan&apos;s suggestions

Let&apos;s do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275853</commentid>
    <comment_count>9</comment_count>
      <attachid>66751</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-08 08:27:26 -0700</bug_when>
    <thetext>Comment on attachment 66751
Patch with Dan&apos;s suggestions

Clearing flags on attachment: 66751

Committed r66986: &lt;http://trac.webkit.org/changeset/66986&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275854</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-08 08:27:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275879</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 09:31:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66986 might have broken GTK Linux 64-bit Debug
The following changes are on the blame list:
http://trac.webkit.org/changeset/66985
http://trac.webkit.org/changeset/66986</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66558</attachid>
            <date>2010-09-03 15:35:00 -0700</date>
            <delta_ts>2010-09-07 12:33:27 -0700</delta_ts>
            <desc>Add WebSocket support</desc>
            <filename>bug-45197-20100903153501.patch</filename>
            <type>text/plain</type>
            <size>17979</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMTQwYWQxZjZmN2M1NzRk
Nzc5MzY2NmIxMzU0YmRiN2EyMDA1OGY3Li4zNGZiMzE2MWNjNzE0OGIzZDU5OTAxOTM5M2FhMDk0
NjliZTZhZDQ5IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTAtMDktMDMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIE5lZWQgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTk3CisKKyAgICAgICAgKiBjb25maWd1cmUu
YWM6IEVuYWJsZSBXZWJTb2NrZXQgYnkgZGVmYXVsdC4KKwogMjAxMC0wOS0wMiAgTHVjYXMgRGUg
TWFyY2hpICA8bHVjYXMuZGVtYXJjaGlAcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBkZjBlMmNlNGFjMmM2OGQwZTUwNjJi
OTY3ODU3YjU3ZTM5NTg3MmIwLi4yMGExYTkzYTNiNjJlMDZhZTNlOGIyYzc5YWMwNTc0OTY3ODNm
MjVlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDktMDMgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIE5lZWQgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTk3
CisKKyAgICAgICAgQWRkIGEgR0lPLWJhc2VkIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi4KKwor
ICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOiBBZGRlZCBQbGF0Zm9ybVJlZlB0ciBz
dXBwb3J0IGZvciBHU291cmNlLgorICAgICAgICAoV1RGOjpyZWZQbGF0Zm9ybVB0cik6CisgICAg
ICAgIChXVEY6OmRlcmVmUGxhdGZvcm1QdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaDogQWRkZWQgbmV3IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgKiB3dGYvZ29iamVjdC9HVHlwZWRlZnMuaDogQWRkIHNvbWUgbW9yZSBHTGliL0dJTyBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKwogMjAxMC0wOS0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvSmF2YVNjcmlw
dENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKaW5kZXggYzE2MDI0YzRiMmE3MDUyMjRiZjZh
ZDFhY2U1OThiZjMwNDRhNGExOC4uMTRmN2NmNGIyNzk5NjE4NTg5YTgxYTY4Mjk1Y2M1ZmM1OTJk
YWFmYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAK
KysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKQEAgLTY2LDQgKzY2
LDE3IEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihHVmFyaWFudCogcHRyKQog
CiAjZW5kaWYKIAordGVtcGxhdGUgPD4gR1NvdXJjZSogcmVmUGxhdGZvcm1QdHIoR1NvdXJjZSog
cHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfc291cmNlX3JlZihwdHIpOworICAgIHJl
dHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihHU291cmNl
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19zb3VyY2VfdW5yZWYocHRyKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ29i
amVjdC9HUmVmUHRyLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmgKaW5k
ZXggMWNhNTVjZTg3ODIyZTc4MmZkNzAwNjc1YWVjZGNlNDQ5MzY4ZWUxZC4uZWRlMGE3YTEwNThm
NTQ0MDJhOWExNWEzMDFmODMwOTdmZTZhNDRiMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
d3RmL2dvYmplY3QvR1JlZlB0ci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dS
ZWZQdHIuaApAQCAtMzYsNiArMzYsOCBAQCB0ZW1wbGF0ZSA8PiBHSGFzaFRhYmxlKiByZWZQbGF0
Zm9ybVB0cihHSGFzaFRhYmxlKiBwdHIpOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3Jt
UHRyKEdIYXNoVGFibGUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBHVmFyaWFudCogcmVmUGxhdGZvcm1Q
dHIoR1ZhcmlhbnQqIHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoR1Zh
cmlhbnQqIHB0cik7Cit0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZQbGF0Zm9ybVB0cihHU291cmNl
KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKEdTb3VyY2UqIHB0cik7
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmUGxhdGZvcm1QdHIoVCogcHRy
KQogewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCBmZjkyODNlZjEz
NzhlN2I1ZjE2Mzg0ODY4YzhjYzc2Y2JkMjBjMzRjLi5lNzliYTMzNGUxYjNjNGVlOTA1MDAxYjhl
YzViZDdmMjI0OWJiZTVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9H
VHlwZWRlZnMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaApA
QCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZ3Vsb25nOwogdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBndXNob3J0OwogdHlwZWRlZiB2b2lkKiBncG9pbnRlcjsKIAordHlwZWRl
ZiBzdHJ1Y3QgX0dBc3luY1Jlc3VsdCBHQXN5bmNSZXN1bHQ7Cit0eXBlZGVmIHN0cnVjdCBfR0Nh
bmNlbGxhYmxlIEdDYW5jZWxsYWJsZTsKIHR5cGVkZWYgc3RydWN0IF9HQ29uZCBHQ29uZDsKIHR5
cGVkZWYgc3RydWN0IF9HRGlyIEdEaXI7CiB0eXBlZGVmIHN0cnVjdCBfR2RrQXRvbSogR2RrQXRv
bTsKQEAgLTQ3LDkgKzQ5LDE0IEBAIHR5cGVkZWYgc3RydWN0IF9HZGtQaXhidWYgR2RrUGl4YnVm
OwogdHlwZWRlZiBzdHJ1Y3QgX0dFcnJvciBHRXJyb3I7CiB0eXBlZGVmIHN0cnVjdCBfR0ZpbGUg
R0ZpbGU7CiB0eXBlZGVmIHN0cnVjdCBfR0hhc2hUYWJsZSBHSGFzaFRhYmxlOwordHlwZWRlZiBz
dHJ1Y3QgX0dJbnB1dFN0cmVhbSBHSW5wdXRTdHJlYW07CiB0eXBlZGVmIHN0cnVjdCBfR0xpc3Qg
R0xpc3Q7CiB0eXBlZGVmIHN0cnVjdCBfR011dGV4IEdNdXRleDsKK3R5cGVkZWYgc3RydWN0IF9H
T3V0cHV0U3RyZWFtIEdPdXRwdXRTdHJlYW07CiB0eXBlZGVmIHN0cnVjdCBfR1BhdHRlcm5TcGVj
IEdQYXR0ZXJuU3BlYzsKK3R5cGVkZWYgc3RydWN0IF9HU29ja2V0Q2xpZW50IEdTb2NrZXRDbGll
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfR1NvY2tldENvbm5lY3Rpb24gR1NvY2tldENvbm5lY3Rpb247
Cit0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291cmNlOwogdHlwZWRlZiBzdHJ1Y3QgX0dWYXJp
YW50IEdWYXJpYW50OwogdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBjZDhhMWIzOWI2YjE4MzYyYmQ5ZTQ0MGVjZDE2NjNhNGExZTc5NWFkLi5hYmQwZGFmZDcyYTk5
ZGRiNzRmOTY1MGIzOTZkNmUxMGI3MmIxNmUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAt
MDktMDMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIE5lZWQgYSBXZWJT
b2NrZXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ1MTk3CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogVW5z
a2lwIGFsbCBXZWJTb2NrZXQgdGVzdHMsIGFzIHRoZXkgYXJlIHBhc3NpbmcuCisKIDIwMTAtMDkt
MDMgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA4N2Vm
ZTJmZWZhODkxZmUwZjgwZGM4NzIwNzYyNDQ3NGZjNmZlNDdmLi5hOTZkOTczMGUxYWMwYTAwY2Nl
NzQ4YzdkMDRjZDBlMTlmYjg1ODZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTIz
MSw5ICs1MjMxLDYgQEAgZmFzdC9ydWJ5L3J1YnlET00tcmVtb3ZlLXJ0Mi5odG1sCiBmYXN0L3J1
YnkvcnVieURPTS1yZW1vdmUtdGV4dDEuaHRtbAogZmFzdC9ydWJ5L3J1YnlET00tcmVtb3ZlLXRl
eHQyLmh0bWwKIAotIyBNaXNzaW5nIFNvY2tldFN0cmVhbUhhbmRsZSBpbXBsZW1lbnRhdGlvbgot
d2Vic29ja2V0L3Rlc3RzCi0KICMgTmV3IGNvbG9yIGNvcnJlY3Rpb24gdGVzdHMKIGZhc3QvY3Nz
L2NvbG9yLWNvcnJlY3Rpb24tYmFja2dyb3VuZHMtYW5kLXRleHQuaHRtbAogZmFzdC9jc3MvY29s
b3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy5odG1sCmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUyMDQ4YzE1MmU5ZTYwN2Y0MmY1ZjRm
YTE2MTk1MDBiYzc2MTExODAuLmY2Yjk3MDViMmQwOTI2Yzk3MDBkM2ZiYjZiNDNiNDE5OGY3NDJl
YTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDktMDMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNv
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIE5lZWQgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTk3CisKKyAgICAgICAgQWRk
IGEgR0lPLWJhc2VkIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBkb2VzIG5vdCB5ZXQg
c3VwcG9ydAorICAgICAgICBTU0wgc29ja2V0cyBvciBwcm94aWVzLCBidXQgdGhlc2Ugc2hvdWxk
IGJlIHBvc3NpYmxlIHRvIGFkZCBhcyBzdXBwb3J0CisgICAgICAgIGFycml2ZXMgaW4gR0xpYi9H
SU8gZm9yIHRoZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3Ry
ZWFtSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVh
bUhhbmRsZVNvdXAuY3BwOiBBZGQgYSBHSU8tYmFzZWQgV2ViU29ja2V0IGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6aXNBY3RpdmVIYW5kbGUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmRlYWN0aXZhdGVIYW5kbGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTogRmlsbGVkIG91dCBzdHViLgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5lY3RlZCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkQnl0ZXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFk
eSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9y
bVNlbmQpOiBGaWxsZWQgb3V0IHN0dWIuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1I
YW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBGaWxsZWQgb3V0IHN0dWIuCisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRTdHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5n
Rm9yU29ja2V0V3JpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGVkQ2FsbGJh
Y2spOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRSZWFkeUNhbGxiYWNrKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlYWR5Q2FsbGJhY2spOiBBZGRlZC4KKwogMjAxMC0w
OS0wMyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oCmluZGV4IDY0MTM5ZTVjZDMzOTg5ZmE5ZTQ3YjAy
ZWZjZGRjYzZiY2MyNmFmMzMuLmE1YWU3YjFiYTI3MzNhZDFhZmVmMDc0ZjI0OTg1MDZhZjc0Nzhl
YTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVh
bUhhbmRsZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVh
bUhhbmRsZS5oCkBAIC0zMiw4ICszMiw4IEBACiAjaWZuZGVmIFNvY2tldFN0cmVhbUhhbmRsZV9o
CiAjZGVmaW5lIFNvY2tldFN0cmVhbUhhbmRsZV9oCiAKKyNpbmNsdWRlICJHUmVmUHRyLmgiCiAj
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00OCwxMiArNDgsMjMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRT
dHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVy
bCwgY2xpZW50KSk7IH0KIAogICAgICAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsK
KyAgICAgICAgdm9pZCBjb25uZWN0ZWQoR1NvY2tldENvbm5lY3Rpb24qLCBHRXJyb3IqKTsKKyAg
ICAgICAgdm9pZCByZWFkQnl0ZXMoc2lnbmVkIGxvbmcsIEdFcnJvciopOworICAgICAgICB2b2lk
IHdyaXRlUmVhZHkoKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1DbG9zZSgpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUGxhdGZvcm1S
ZWZQdHI8R1NvY2tldENsaWVudD4gbV9zb2NrZXRDbGllbnQ7CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPEdTb2NrZXRDb25uZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247CisgICAgICAgIFBsYXRm
b3JtUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICAgICAgUGxhdGZvcm1S
ZWZQdHI8R091dHB1dFN0cmVhbT4gbV9vdXRwdXRTdHJlYW07CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPEdTb3VyY2U+IG1fd3JpdGVSZWFkeVNvdXJjZTsKKyAgICAgICAgY2hhciogbV9yZWFkQnVm
ZmVyOworICAgICAgICBib29sIG1fd2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5OworCiAgICAg
ICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBLVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50Kik7CiAKICAgICAgICAgLy8gTm8gYXV0aGVudGljYXRpb24gZm9yIHN0cmVhbXMgcGVyIHNl
LCBidXQgcHJveHkgbWF5IGFzayBmb3IgY3JlZGVudGlhbHMuCkBAIC02MSw2ICs3Miw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJik7CiAgICAgICAgIHZv
aWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24o
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICAgICAgdm9pZCBiZWdpbldhaXRp
bmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOworICAgICAgICB2b2lkIHN0b3BXYWl0aW5nRm9yU29j
a2V0V3JpdGFiaWxpdHkoKTsKICAgICB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxl
U291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5k
bGVTb3VwLmNwcAppbmRleCA2YWEzM2ZjZTJjZjZjN2VjN2MyZGNjZmVjNmRkZjFkYjk1NTM0ZmE1
Li42MjViYmYzM2FjNTU3MTc1OTZlYWZlYWZlMzU0OGI2MTJhMTk3NmI3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3Vw
LmNwcApAQCAtMzEsMzggKzMxLDE2OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNvY2tldFN0cmVhbUhhbmRsZS5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkdPd25QdHIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk5vdEZvdW5kLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJTb2NrZXRTdHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRl
IDxnbGliLmg+CisKKyNkZWZpbmUgUkVBRF9CVUZGRVJfU0laRSAxMDI0CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorLy8gVGhlc2UgZnVuY3Rpb25zIGltbWVkaWF0ZWx5IGNhbGwgdGhlIHNpbWls
YXJseSBuYW1lZCBTb2NrZXRTdHJlYW1IYW5kbGUgbWV0aG9kcy4KK3N0YXRpYyB2b2lkIGNvbm5l
Y3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1I
YW5kbGUqKTsKK3N0YXRpYyB2b2lkIHJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSosIEdB
c3luY1Jlc3VsdCosIFNvY2tldFN0cmVhbUhhbmRsZSopOworc3RhdGljIGdib29sZWFuIHdyaXRl
UmVhZHlDYWxsYmFjayhHU29ja2V0KiwgR0lPQ29uZGl0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGUq
KTsKKworLy8gSGF2aW5nIGEgbGlzdCBvZiBhY3RpdmUgaGFuZGxlcyBtZWFucyB0aGF0IHdlIGRv
IG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IFdlYkNvcmUKKy8vIHJlZmVyZW5jZSBjb3VudGluZyBp
biBHTGliIGNhbGxiYWNrcy4gT25jZSB0aGUgaGFuZGxlIGlzIG9mZiB0aGUgYWN0aXZlIGhhbmRs
ZXMgbGlzdAorLy8gd2UganVzdCBpZ25vcmUgaXQgaW4gdGhlIGNhbGxiYWNrLiBXZSBhdm9pZCBh
IGxvdCBvZiBleHRyYSBjaGVja3MgYW5kIHRyaWNreQorLy8gc2l0dWF0aW9ucyB0aGlzIHdheS4K
K3N0YXRpYyBWZWN0b3I8U29ja2V0U3RyZWFtSGFuZGxlKj4gZ0FjdGl2ZUhhbmRsZXM7Citib29s
IGlzQWN0aXZlSGFuZGxlKFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQoreworICAgIHJldHVy
biBnQWN0aXZlSGFuZGxlcy5maW5kKGhhbmRsZSkgIT0gbm90Rm91bmQ7Cit9CisKK3ZvaWQgZGVh
Y3RpdmF0ZUhhbmRsZShTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBzaXplX3Qg
aGFuZGxlSW5kZXggPSBnQWN0aXZlSGFuZGxlcy5maW5kKGhhbmRsZSk7CisgICAgaWYgKGhhbmRs
ZUluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBnQWN0aXZlSGFuZGxlcy5yZW1vdmUoaGFuZGxl
SW5kZXgpOworfQorCiBTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25z
dCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQogICAgIDogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKKyAgICAsIG1fcmVhZEJ1ZmZlcigwKQor
ICAgICwgbV93YWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoZmFsc2UpCiB7Ci0gICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsIG1fY2xp
ZW50KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIE5vIHN1cHBvcnQgZm9yIFNTTCBz
b2NrZXRzIHlldC4KKyAgICBpZiAodXJsLnByb3RvY29sSXMoIndzcyIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NvY2tldENsaWVudCA9IGFkb3B0UGxhdGZvcm1SZWYoZ19zb2NrZXRfY2xp
ZW50X25ldygpKTsKKworICAgIHVuc2lnbmVkIGludCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVy
bC5wb3J0KCkgOiA4MDsKKyAgICBQbGF0Zm9ybVJlZlB0cjxHU29ja2V0Q29ubmVjdGFibGU+IGFk
ZHJlc3MgPSBnX25ldHdvcmtfYWRkcmVzc19uZXcodXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpLCBw
b3J0KTsKKyAgICBnQWN0aXZlSGFuZGxlcy5hcHBlbmQodGhpcyk7CisgICAgZ19zb2NrZXRfY2xp
ZW50X2Nvbm5lY3RfYXN5bmMobV9zb2NrZXRDbGllbnQuZ2V0KCksIGFkZHJlc3MuZ2V0KCksIDAs
CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY29ubmVjdGVk
Q2FsbGJhY2spLCB0aGlzKTsKIH0KIAogU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFt
SGFuZGxlKCkKIHsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxl
dGUiLCB0aGlzKTsKKyAgICAvLyBJZiBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBkZXN0cm95ZWQg
d2l0aG91dCBjbG9zaW5nLCBlbnN1cmUgdGhhdCB3ZSBhcmUgZGVhY3RpdmF0ZWQuCisgICAgZGVh
Y3RpdmF0ZUhhbmRsZSh0aGlzKTsKICAgICBzZXRDbGllbnQoMCk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNo
YXIqLCBpbnQpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkKEdTb2NrZXRDb25u
ZWN0aW9uKiBzb2NrZXRDb25uZWN0aW9uLCBHRXJyb3IqIGVycm9yKQogewotICAgIExPRyhOZXR3
b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAg
IG1fY2xpZW50LT5kaWRGYWlsKHRoaXMsIFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBhZG9w
dFBsYXRmb3JtUmVmKHNvY2tldENvbm5lY3Rpb24pOworICAgIG1fb3V0cHV0U3RyZWFtID0gZ19p
b19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9u
LmdldCgpKSk7CisgICAgbV9pbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJl
YW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSk7CisKKyAgICBtX3JlYWRC
dWZmZXIgPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKKyAgICBnX2lucHV0X3N0cmVhbV9y
ZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlciwgUkVBRF9CVUZGRVJf
U0laRSwgR19QUklPUklUWV9ERUZBVUxULCAwLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdB
c3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgbV93cml0
ZVJlYWR5U291cmNlID0gYWRvcHRQbGF0Zm9ybVJlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKAor
ICAgICAgICBnX3NvY2tldF9jb25uZWN0aW9uX2dldF9zb2NrZXQobV9zb2NrZXRDb25uZWN0aW9u
LmdldCgpKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihHX0lPX09VVCksIDApKTsKKyAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLCAwKTsKKworICAg
IC8vIFRoZSBjbGllbnQgY2FuIGNsb3NlIHRoZSBoYW5kbGUsIHBvdGVudGlhbGx5IHJlbW92aW5n
IHRoZSBsYXN0IHJlZmVyZW5jZS4KKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90
ZWN0KHRoaXMpOyAKKyAgICBtX3N0YXRlID0gT3BlbjsKKyAgICBtX2NsaWVudC0+ZGlkT3Blbih0
aGlzKTsKKyAgICBpZiAoIW1fc29ja2V0Q29ubmVjdGlvbikgLy8gQ2xpZW50IGNsb3NlZCB0aGUg
Y29ubmVjdGlvbi4KKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6cmVhZEJ5dGVzKHNpZ25lZCBsb25nIGJ5dGVzUmVhZCwgR0Vycm9yKiBlcnJvcikKK3sKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgU29ja2V0U3Ry
ZWFtRXJyb3IoZXJyb3ItPmNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghYnl0ZXNSZWFkKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRpYWxseSBy
ZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRs
ZT4gcHJvdGVjdCh0aGlzKTsgCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIG1f
cmVhZEJ1ZmZlciwgYnl0ZXNSZWFkKTsKKyAgICBpZiAobV9pbnB1dFN0cmVhbSkgLy8gVGhlIGNs
aWVudCBtYXkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGdfaW5wdXRfc3Ry
ZWFtX3JlYWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLCBSRUFEX0JV
RkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Cit9
CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkKK3sKKyAgICAvLyBXZSBu
byBsb25nZXIgaGF2ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdhaXRpbmcgZm9yIHRoZSBzb2Nr
ZXQgdG8gYmUgd3JpdGFibGUuCisgICAgaWYgKCFidWZmZXJlZEFtb3VudCgpKSB7CisgICAgICAg
IHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNlbmRQZW5kaW5nRGF0YSgpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxl
OjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAo
IWdfc29ja2V0X2NvbmRpdGlvbl9jaGVjayhnX3NvY2tldF9jb25uZWN0aW9uX2dldF9zb2NrZXQo
bV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSwgR19JT19PVVQpKSB7CisgICAgICAgIGJlZ2luV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgd3JpdHRlbiA9IGdfb3V0cHV0
X3N0cmVhbV93cml0ZShtX291dHB1dFN0cmVhbS5nZXQoKSwgZGF0YSwgbGVuZ3RoLCAwLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bCh0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcihlcnJvci0+Y29kZSkpOyAvLyBGSVhNRTogUHJvdmlk
ZSBhIHNlbnNpYmxlIGVycm9yLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBJ
ZiB3ZSBkaWQgbm90IHNlbmQgYWxsIHRoZSBieXRlcyB3ZSB3ZXJlIGdpdmVuLCB3ZSBrbm93IHRo
YXQKKyAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHdpbGwgbmVlZCB0byBzZW5kIG1vcmUg
aW4gdGhlIGZ1dHVyZS4KKyAgICBpZiAod3JpdHRlbiA8IGxlbmd0aCkKKyAgICAgICAgYmVnaW5X
YWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKworICAgIHJldHVybiB3cml0dGVuOwogfQog
CiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiB7Ci0gICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOwotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gV2UgcmVtb3ZlIHRoaXMgaGFuZGxlIGZyb20gdGhl
IGFjdGl2ZSBoYW5kbGVzIGxpc3QgZmlyc3QsIHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4KKyAg
ICBkZWFjdGl2YXRlSGFuZGxlKHRoaXMpOworICAgIHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFi
aWxpdHkoKTsKKworICAgIGlmIChtX3NvY2tldENvbm5lY3Rpb24pIHsKKyAgICAgICAgR093blB0
cjxHRXJyb3I+IGVycm9yOworICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTSht
X3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBp
ZiAoZXJyb3IpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbCh0aGlzLCBTb2NrZXRTdHJl
YW1FcnJvcihlcnJvci0+Y29kZSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHNlbnNpYmxlIGVycm9y
LgorICAgICAgICBtX3NvY2tldENvbm5lY3Rpb24gPSAwOworICAgIH0KKworICAgIG1fb3V0cHV0
U3RyZWFtID0gMDsKKyAgICBtX2lucHV0U3RyZWFtID0gMDsKKyAgICBtX3NvY2tldENsaWVudCA9
IDA7CisgICAgZGVsZXRlIG1fcmVhZEJ1ZmZlcjsKKworICAgIG1fY2xpZW50LT5kaWRDbG9zZSh0
aGlzKTsKIH0KIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCkBAIC04NSw0ICsy
MTUsNTMgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6YmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxp
dHkoKQoreworICAgIGlmICghbV93cml0ZVJlYWR5U291cmNlIHx8IG1fd2FpdGluZ0ZvclNvY2tl
dFdyaXRhYmlsaXR5KQorICAgICAgICByZXR1cm47CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fd3Jp
dGVSZWFkeVNvdXJjZS5nZXQoKSwgMCk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpz
dG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBpZiAoIW1fd3JpdGVSZWFk
eVNvdXJjZSB8fCAhbV93YWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpCisgICAgICAgIHJldHVy
bjsKKyAgICBnX3NvdXJjZV9yZW1vdmUoZ19zb3VyY2VfZ2V0X2lkKG1fd3JpdGVSZWFkeVNvdXJj
ZS5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xp
ZW50KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhh
bmRsZSkKK3sKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRo
aXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBkZWFjdGl2YXRlZCBlYXJsaWVyLgorICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlv
biA9IGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKGNsaWVudCwgcmVzdWx0
LCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgLy8gVGhlIFNvY2tldFN0cmVhbUhhbmRsZSBoYXMg
YmVlbiBkZWFjdGl2YXRlZCwgc28ganVzdCBjbG9zZSB0aGUgY29ubmVjdGlvbiwgaWdub3Jpbmcg
ZXJyb3JzLgorICAgIGlmICghaXNBY3RpdmVIYW5kbGUoaGFuZGxlKSkgeworICAgICAgICBnX2lv
X3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShzb2NrZXRDb25uZWN0aW9uKSwgMCwgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGhhbmRsZS0+Y29ubmVjdGVk
KHNvY2tldENvbm5lY3Rpb24sIGVycm9yLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgcmVhZFJl
YWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3sKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBy
ZWFkLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBkZWFjdGl2YXRlZCBlYXJs
aWVyLgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0g
Z19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIo
KSk7CisKKyAgICBpZiAoIWlzQWN0aXZlSGFuZGxlKGhhbmRsZSkpCisgICAgICAgIHJldHVybjsK
KyAgICBoYW5kbGUtPnJlYWRCeXRlcyhieXRlc1JlYWQsIGVycm9yLmdldCgpKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHU29ja2V0KiwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAgaWYgKCFpc0FjdGl2
ZUhhbmRsZShoYW5kbGUpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKGNvbmRpdGlv
biAmIEdfSU9fT1VUKQorICAgICAgICBoYW5kbGUtPndyaXRlUmVhZHkoKTsKKyAgICByZXR1cm4g
VFJVRTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy
ZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA2NDkwOGEyYTk4ZjBmYWY4MmQyNDI5NzZkZGE1ZGVh
YWI0NGE4YTE3Li4yZTkzY2QzOWE5NDhiMTExZmVlNDBiODcyNTgyNzFhYmZkNGJjZWNlIDEwMDY0
NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC02MjgsOCArNjI4LDgg
QEAgZmkKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgV2ViIFNvY2tldHMgc3Vw
cG9ydF0pCiBBQ19BUkdfRU5BQkxFKHdlYl9zb2NrZXRzLAogICAgICAgICAgICAgICBBQ19IRUxQ
X1NUUklORyhbLS1lbmFibGUtd2ViLXNvY2tldHNdLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIFdlYiBTb2NrZXRzIFtkZWZhdWx0PW5vXV0pLAotICAg
ICAgICAgICAgICBbXSxbZW5hYmxlX3dlYl9zb2NrZXRzPSJubyJdKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIFdlYiBTb2NrZXRzIFtkZWZhdWx0PXll
c11dKSwKKyAgICAgICAgICAgICAgW10sW2VuYWJsZV93ZWJfc29ja2V0cz0ieWVzIl0pCiBBQ19N
U0dfUkVTVUxUKFskZW5hYmxlX3dlYl9zb2NrZXRzXSkKIAogIyBjaGVjayB3aGV0aGVyIHRvIGVu
YWJsZSBXZWIgVGltaW5nIHN1cHBvcnQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66751</attachid>
            <date>2010-09-07 12:33:32 -0700</date>
            <delta_ts>2010-09-08 08:27:25 -0700</delta_ts>
            <desc>Patch with Dan&apos;s suggestions</desc>
            <filename>bug-45197-20100907123329.patch</filename>
            <type>text/plain</type>
            <size>18178</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5NDBmZDQ0MTJhZjYxMjFm
MjcxNDUwMzQ3NmY0MTE1YmNlZTZlNDYxLi5iOTIwMTQ5MmVhOTk1ZDBjMmNiY2MzYjcyZTQ0NTYw
ZjE2MzExYjM1IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTAtMDktMDMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIE5lZWQgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTk3CisKKyAgICAgICAgKiBjb25maWd1cmUu
YWM6IEVuYWJsZSBXZWJTb2NrZXQgYnkgZGVmYXVsdC4KKwogMjAxMC0wOS0wNyAgQXJubyBSZW5l
dmllciAgPGFybm9AcmVuZXZpZXIubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBG
cmV5dGhlci4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwppbmRleCBhN2E1MjQxZDkzODVhYjQ0NDY0ZmUzYWJhZWQ1NTNmMTNk
MzUzNTkxLi4xNmI5OWI3NTkwNTE2YzMwZWZlMzRkMWQzMjBjODQ1YjE2MTc1NmEwIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDktMDMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIE5lZWQgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTk3CisKKyAgICAgICAg
QWRkIGEgR0lPLWJhc2VkIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHd0
Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOiBBZGRlZCBQbGF0Zm9ybVJlZlB0ciBzdXBwb3J0IGZvciBH
U291cmNlLgorICAgICAgICAoV1RGOjpyZWZQbGF0Zm9ybVB0cik6CisgICAgICAgIChXVEY6OmRl
cmVmUGxhdGZvcm1QdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDogQWRkZWQg
bmV3IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiB3dGYv
Z29iamVjdC9HVHlwZWRlZnMuaDogQWRkIHNvbWUgbW9yZSBHTGliL0dJTyBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKwogMjAxMC0wOS0wNyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL2dv
YmplY3QvR1JlZlB0ci5jcHAKaW5kZXggYzE2MDI0YzRiMmE3MDUyMjRiZjZhZDFhY2U1OThiZjMw
NDRhNGExOC4uMTRmN2NmNGIyNzk5NjE4NTg5YTgxYTY4Mjk1Y2M1ZmM1OTJkYWFmYSAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKQEAgLTY2LDQgKzY2LDE3IEBAIHRlbXBs
YXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihHVmFyaWFudCogcHRyKQogCiAjZW5kaWYKIAor
dGVtcGxhdGUgPD4gR1NvdXJjZSogcmVmUGxhdGZvcm1QdHIoR1NvdXJjZSogcHRyKQoreworICAg
IGlmIChwdHIpCisgICAgICAgIGdfc291cmNlX3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9
CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihHU291cmNlKiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ19zb3VyY2VfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRy
LmggYi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmgKaW5kZXggMWNhNTVjZTg3
ODIyZTc4MmZkNzAwNjc1YWVjZGNlNDQ5MzY4ZWUxZC4uZWRlMGE3YTEwNThmNTQ0MDJhOWExNWEz
MDFmODMwOTdmZTZhNDRiMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3Qv
R1JlZlB0ci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAt
MzYsNiArMzYsOCBAQCB0ZW1wbGF0ZSA8PiBHSGFzaFRhYmxlKiByZWZQbGF0Zm9ybVB0cihHSGFz
aFRhYmxlKiBwdHIpOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKEdIYXNoVGFi
bGUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBHVmFyaWFudCogcmVmUGxhdGZvcm1QdHIoR1ZhcmlhbnQq
IHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoR1ZhcmlhbnQqIHB0cik7
Cit0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZQbGF0Zm9ybVB0cihHU291cmNlKiBwdHIpOwordGVt
cGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKEdTb3VyY2UqIHB0cik7CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmUGxhdGZvcm1QdHIoVCogcHRyKQogewpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmggYi9KYXZhU2NyaXB0
Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCBmZjkyODNlZjEzNzhlN2I1ZjE2Mzg0
ODY4YzhjYzc2Y2JkMjBjMzRjLi5lNzliYTMzNGUxYjNjNGVlOTA1MDAxYjhlYzViZDdmMjI0OWJi
ZTVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaApAQCAtMzYsNiArMzYs
OCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZ3Vsb25nOwogdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBndXNob3J0OwogdHlwZWRlZiB2b2lkKiBncG9pbnRlcjsKIAordHlwZWRlZiBzdHJ1Y3QgX0dB
c3luY1Jlc3VsdCBHQXN5bmNSZXN1bHQ7Cit0eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxhYmxlIEdD
YW5jZWxsYWJsZTsKIHR5cGVkZWYgc3RydWN0IF9HQ29uZCBHQ29uZDsKIHR5cGVkZWYgc3RydWN0
IF9HRGlyIEdEaXI7CiB0eXBlZGVmIHN0cnVjdCBfR2RrQXRvbSogR2RrQXRvbTsKQEAgLTQ3LDkg
KzQ5LDE0IEBAIHR5cGVkZWYgc3RydWN0IF9HZGtQaXhidWYgR2RrUGl4YnVmOwogdHlwZWRlZiBz
dHJ1Y3QgX0dFcnJvciBHRXJyb3I7CiB0eXBlZGVmIHN0cnVjdCBfR0ZpbGUgR0ZpbGU7CiB0eXBl
ZGVmIHN0cnVjdCBfR0hhc2hUYWJsZSBHSGFzaFRhYmxlOwordHlwZWRlZiBzdHJ1Y3QgX0dJbnB1
dFN0cmVhbSBHSW5wdXRTdHJlYW07CiB0eXBlZGVmIHN0cnVjdCBfR0xpc3QgR0xpc3Q7CiB0eXBl
ZGVmIHN0cnVjdCBfR011dGV4IEdNdXRleDsKK3R5cGVkZWYgc3RydWN0IF9HT3V0cHV0U3RyZWFt
IEdPdXRwdXRTdHJlYW07CiB0eXBlZGVmIHN0cnVjdCBfR1BhdHRlcm5TcGVjIEdQYXR0ZXJuU3Bl
YzsKK3R5cGVkZWYgc3RydWN0IF9HU29ja2V0Q2xpZW50IEdTb2NrZXRDbGllbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfR1NvY2tldENvbm5lY3Rpb24gR1NvY2tldENvbm5lY3Rpb247Cit0eXBlZGVmIHN0
cnVjdCBfR1NvdXJjZSBHU291cmNlOwogdHlwZWRlZiBzdHJ1Y3QgX0dWYXJpYW50IEdWYXJpYW50
OwogdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyM2NmNDk3MmM2
NDI3ZmU1ZWYyMThhMzg2NzA2MzA0MTBhN2VmY2UzLi4xYTY4OTRiZWY1ZTNiYTkyZTlkYjJkZWMw
ZDBhZWI1NDljNjUyNGRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDMgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIE5lZWQgYSBXZWJTb2NrZXQgaW1wbGVt
ZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MTk3CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogVW5za2lwIGFsbCBXZWJT
b2NrZXQgdGVzdHMsIGFzIHRoZXkgYXJlIHBhc3NpbmcuCisKIDIwMTAtMDktMDcgIFNhdGlzaCBT
YW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJl
bXkgT3Jsb3cuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDlhNWJmYTc5OGZmMGQ5MzUz
NjIwNTMwZjNjYTMwMTI4NDkwMzQ2MWIuLjkxM2UwOGQwMmNiMDU2YTZiODE4NzM0ZWE2YjJkODI4
YmQ4YWE4YTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01MjE4LDkgKzUyMTgsNiBA
QCBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtcnQyLmh0bWwKIGZhc3QvcnVieS9ydWJ5RE9NLXJl
bW92ZS10ZXh0MS5odG1sCiBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtdGV4dDIuaHRtbAogCi0j
IE1pc3NpbmcgU29ja2V0U3RyZWFtSGFuZGxlIGltcGxlbWVudGF0aW9uCi13ZWJzb2NrZXQvdGVz
dHMKLQogIyBOZXcgY29sb3IgY29ycmVjdGlvbiB0ZXN0cwogZmFzdC9jc3MvY29sb3ItY29ycmVj
dGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC5odG1sCiBmYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9u
LW9uLWJhY2tncm91bmRzLmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ1MzU1ZmVlOTU1MzNhOTUzMjhmYjM3NGNkZGQ5MWJiYWY0
YjhkOS4uM2Q1Mzc3MDBkM2RlN2JjYWFjZDZjZWUxMzU0YTgwM2QxZTI4OGFmOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MSBAQAorMjAxMC0wOS0wMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10g
TmVlZCBhIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxOTcKKworICAgICAgICBBZGQgYSBHSU8tYmFzZWQg
V2ViU29ja2V0IGltcGxlbWVudGF0aW9uLiBUaGlzIGRvZXMgbm90IHlldCBzdXBwb3J0CisgICAg
ICAgIFNTTCBzb2NrZXRzIG9yIHByb3hpZXMsIGJ1dCB0aGVzZSBzaG91bGQgYmUgcG9zc2libGUg
dG8gYWRkIGFzIHN1cHBvcnQKKyAgICAgICAgYXJyaXZlcyBpbiBHTGliL0dJTyBmb3IgdGhlbS4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5j
cHA6IEFkZCBhIEdJTy1iYXNlZCBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChX
ZWJDb3JlOjppc0FjdGl2ZUhhbmRsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVhY3Rp
dmF0ZUhhbmRsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpTb2NrZXRTdHJlYW1IYW5kbGUpOiBGaWxsZWQgb3V0IHN0dWIuCisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IEZpbGxl
ZCBvdXQgc3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZv
cm1DbG9zZSk6IEZpbGxlZCBvdXQgc3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZTo6YmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0
YWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpjb25uZWN0ZWRDYWxsYmFjayk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlUmVhZHlDYWxsYmFjayk6IEFkZGVkLgorCiAyMDEwLTA5LTA3ICBNYXJ0aW4g
Um9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBTbWFsbCBidWlsZCBm
aXguIFJlbW92ZSBsaWJXZWJDb3JlSlMgZnJvbSBDTEVBTl9GSUxFUywgYXMgaXQKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmgKaW5kZXgg
NjQxMzllNWNkMzM5ODlmYTllNDdiMDJlZmNkZGNjNmJjYzI2YWYzMy4uMmJhNDUwNDZkZmUxMjMy
ZTVlMmVjNGUwMDA3ZDFlYmE0MDUwZDdlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmgKQEAgLTMyLDggKzMyLDggQEAKICNpZm5k
ZWYgU29ja2V0U3RyZWFtSGFuZGxlX2gKICNkZWZpbmUgU29ja2V0U3RyZWFtSGFuZGxlX2gKIAor
I2luY2x1ZGUgIkdSZWZQdHIuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgi
Ci0KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKQEAgLTQ4LDEyICs0OCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IEtVUkwmIHVy
bCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQogCiAgICAgICAgIHZpcnR1YWwg
flNvY2tldFN0cmVhbUhhbmRsZSgpOworICAgICAgICB2b2lkIGNvbm5lY3RlZChHU29ja2V0Q29u
bmVjdGlvbiosIEdFcnJvciopOworICAgICAgICB2b2lkIHJlYWRCeXRlcyhzaWduZWQgbG9uZywg
R0Vycm9yKik7CisgICAgICAgIHZvaWQgd3JpdGVSZWFkeSgpOwogCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7CiAKICAgICBwcml2
YXRlOgorICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRD
b25uZWN0aW9uOworICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRT
dHJlYW07CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1fb3V0cHV0U3Ry
ZWFtOworICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHU291cmNlPiBtX3dyaXRlUmVhZHlTb3VyY2U7
CisgICAgICAgIGNoYXIqIG1fcmVhZEJ1ZmZlcjsKKwogICAgICAgICBTb2NrZXRTdHJlYW1IYW5k
bGUoY29uc3QgS1VSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOwogCiAgICAgICAgIC8v
IE5vIGF1dGhlbnRpY2F0aW9uIGZvciBzdHJlYW1zIHBlciBzZSwgYnV0IHByb3h5IG1heSBhc2sg
Zm9yIGNyZWRlbnRpYWxzLgpAQCAtNjEsNiArNzAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwogICAgICAgICB2b2lkIHJlY2VpdmVkUmVxdWVzdFRv
Q29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwogICAgICAgICB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJik7CisgICAgICAgIHZvaWQgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxp
dHkoKTsKKyAgICAgICAgdm9pZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CiAg
ICAgfTsKIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKaW5kZXggNmFh
MzNmY2UyY2Y2YzdlYzdjMmRjY2ZlYzZkZGYxZGI5NTUzNGZhNS4uZDczYjQ5OWE0MzNjM2M0Yjcw
N2IzMmUyZjhjNWVmMGRhZWVmYzkwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKQEAgLTMxLDM4ICszMSwx
NjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUu
aCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJHT3duUHRyLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RGb3VuZC5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3Iu
aCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJWZWN0
b3IuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCisjZGVmaW5l
IFJFQURfQlVGRkVSX1NJWkUgMTAyNAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRoZXNl
IGZ1bmN0aW9ucyBpbW1lZGlhdGVseSBjYWxsIHRoZSBzaW1pbGFybHkgbmFtZWQgU29ja2V0U3Ry
ZWFtSGFuZGxlIG1ldGhvZHMuCitzdGF0aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0
Q2xpZW50KiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7CitzdGF0aWMgdm9p
ZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRT
dHJlYW1IYW5kbGUqKTsKK3N0YXRpYyBnYm9vbGVhbiB3cml0ZVJlYWR5Q2FsbGJhY2soR1NvY2tl
dCosIEdJT0NvbmRpdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlKik7CisKKy8vIEhhdmluZyBhIGxp
c3Qgb2YgYWN0aXZlIGhhbmRsZXMgbWVhbnMgdGhhdCB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCBXZWJDb3JlCisvLyByZWZlcmVuY2UgY291bnRpbmcgaW4gR0xpYiBjYWxsYmFja3MuIE9u
Y2UgdGhlIGhhbmRsZSBpcyBvZmYgdGhlIGFjdGl2ZSBoYW5kbGVzIGxpc3QKKy8vIHdlIGp1c3Qg
aWdub3JlIGl0IGluIHRoZSBjYWxsYmFjay4gV2UgYXZvaWQgYSBsb3Qgb2YgZXh0cmEgY2hlY2tz
IGFuZCB0cmlja3kKKy8vIHNpdHVhdGlvbnMgdGhpcyB3YXkuCitzdGF0aWMgVmVjdG9yPFNvY2tl
dFN0cmVhbUhhbmRsZSo+IGdBY3RpdmVIYW5kbGVzOworYm9vbCBpc0FjdGl2ZUhhbmRsZShTb2Nr
ZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3sKKyAgICByZXR1cm4gZ0FjdGl2ZUhhbmRsZXMuZmlu
ZChoYW5kbGUpICE9IG5vdEZvdW5kOworfQorCit2b2lkIGRlYWN0aXZhdGVIYW5kbGUoU29ja2V0
U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAgc2l6ZV90IGhhbmRsZUluZGV4ID0gZ0FjdGl2
ZUhhbmRsZXMuZmluZChoYW5kbGUpOworICAgIGlmIChoYW5kbGVJbmRleCAhPSBub3RGb3VuZCkK
KyAgICAgICAgZ0FjdGl2ZUhhbmRsZXMucmVtb3ZlKGhhbmRsZUluZGV4KTsKK30KKwogU29ja2V0
U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgS1VSTCYgdXJsLCBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQqIGNsaWVudCkKICAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2Uo
dXJsLCBjbGllbnQpCisgICAgLCBtX3JlYWRCdWZmZXIoMCkKIHsKLSAgICBMT0coTmV0d29yaywg
IlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgbV9jbGllbnQpOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gTm8gc3VwcG9ydCBmb3IgU1NMIHNvY2tldHMg
eWV0LgorICAgIGlmICh1cmwucHJvdG9jb2xJcygid3NzIikpCisgICAgICAgIHJldHVybjsKKyAg
ICB1bnNpZ25lZCBpbnQgcG9ydCA9IHVybC5oYXNQb3J0KCkgPyB1cmwucG9ydCgpIDogODA7CisK
KyAgICBnQWN0aXZlSGFuZGxlcy5hcHBlbmQodGhpcyk7CisgICAgUGxhdGZvcm1SZWZQdHI8R1Nv
Y2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRQbGF0Zm9ybVJlZihnX3NvY2tldF9jbGll
bnRfbmV3KCkpOworICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29j
a2V0Q2xpZW50LmdldCgpLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHBvcnQsIDAsCisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY29ubmVjdGVkQ2FsbGJh
Y2spLCB0aGlzKTsKIH0KIAogU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxl
KCkKIHsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0
aGlzKTsKKyAgICAvLyBJZiBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBkZXN0cm95ZWQgd2l0aG91
dCBjbG9zaW5nLCBlbnN1cmUgdGhhdCB3ZSBhcmUgZGVhY3RpdmF0ZWQuCisgICAgZGVhY3RpdmF0
ZUhhbmRsZSh0aGlzKTsKICAgICBzZXRDbGllbnQoMCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqLCBp
bnQpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkKEdTb2NrZXRDb25uZWN0aW9u
KiBzb2NrZXRDb25uZWN0aW9uLCBHRXJyb3IqIGVycm9yKQogewotICAgIExPRyhOZXR3b3JrLCAi
U29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIG1fY2xp
ZW50LT5kaWRGYWlsKHRoaXMsIFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBhZG9wdFBsYXRm
b3JtUmVmKHNvY2tldENvbm5lY3Rpb24pOworICAgIG1fb3V0cHV0U3RyZWFtID0gZ19pb19zdHJl
YW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgp
KSk7CisgICAgbV9pbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19J
T19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSk7CisKKyAgICBtX3JlYWRCdWZmZXIg
PSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2Fz
eW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlciwgUkVBRF9CVUZGRVJfU0laRSwg
R19QUklPUklUWV9ERUZBVUxULCAwLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisKKyAgICAvLyBUaGUgY2xp
ZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRpYWxseSByZW1vdmluZyB0aGUgbGFzdCBy
ZWZlcmVuY2UuCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdCh0aGlzKTsg
CisgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgbV9jbGllbnQtPmRpZE9wZW4odGhpcyk7CisgICAg
aWYgKCFtX3NvY2tldENvbm5lY3Rpb24pIC8vIENsaWVudCBjbG9zZWQgdGhlIGNvbm5lY3Rpb24u
CisgICAgICAgIHJldHVybjsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRl
cyhzaWduZWQgbG9uZyBieXRlc1JlYWQsIEdFcnJvciogZXJyb3IpCit7CisgICAgaWYgKGVycm9y
KSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKHRoaXMsIFNvY2tldFN0cmVhbUVycm9yKGVy
cm9yLT5jb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWJ5dGVzUmVh
ZCkgeworICAgICAgICBjbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
VGhlIGNsaWVudCBjYW4gY2xvc2UgdGhlIGhhbmRsZSwgcG90ZW50aWFsbHkgcmVtb3ZpbmcgdGhl
IGxhc3QgcmVmZXJlbmNlLgorICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Qo
dGhpcyk7IAorICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBtX3JlYWRCdWZmZXIs
IGJ5dGVzUmVhZCk7CisgICAgaWYgKG1faW5wdXRTdHJlYW0pIC8vIFRoZSBjbGllbnQgbWF5IGhh
dmUgY2xvc2VkIHRoZSBjb25uZWN0aW9uLgorICAgICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2Fz
eW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlciwgUkVBRF9CVUZGRVJfU0laRSwg
R19QUklPUklUWV9ERUZBVUxULCAwLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5
bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSgpCit7CisgICAgLy8gV2Ugbm8gbG9uZ2VyIGhh
dmUgYnVmZmVyZWQgZGF0YSwgc28gc3RvcCB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRvIGJlIHdy
aXRhYmxlLgorICAgIGlmICghYnVmZmVyZWRBbW91bnQoKSkgeworICAgICAgICBzdG9wV2FpdGlu
Z0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
ZW5kUGVuZGluZ0RhdGEoKTsKK30KKworaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1T
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFnX3NvY2tldF9j
b25kaXRpb25fY2hlY2soZ19zb2NrZXRfY29ubmVjdGlvbl9nZXRfc29ja2V0KG1fc29ja2V0Q29u
bmVjdGlvbi5nZXQoKSksIEdfSU9fT1VUKSkgeworICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2Nr
ZXRXcml0YWJpbGl0eSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgZ3NzaXplIHdyaXR0ZW4gPSBnX291dHB1dF9zdHJlYW1fd3Jp
dGUobV9vdXRwdXRTdHJlYW0uZ2V0KCksIGRhdGEsIGxlbmd0aCwgMCwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgU29j
a2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSBzZW5zaWJs
ZSBlcnJvci4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gSWYgd2UgZGlkIG5v
dCBzZW5kIGFsbCB0aGUgYnl0ZXMgd2Ugd2VyZSBnaXZlbiwgd2Uga25vdyB0aGF0CisgICAgLy8g
U29ja2V0U3RyZWFtSGFuZGxlQmFzZSB3aWxsIG5lZWQgdG8gc2VuZCBtb3JlIGluIHRoZSBmdXR1
cmUuCisgICAgaWYgKHdyaXR0ZW4gPCBsZW5ndGgpCisgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNv
Y2tldFdyaXRhYmlsaXR5KCk7CisKKyAgICByZXR1cm4gd3JpdHRlbjsKIH0KIAogdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQogewotICAgIExPRyhOZXR3b3JrLCAiU29j
a2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIFdlIHJlbW92ZSB0aGlzIGhhbmRsZSBmcm9tIHRoZSBhY3RpdmUgaGFu
ZGxlcyBsaXN0IGZpcnN0LCB0byBkaXNhYmxlIGFsbCBjYWxsYmFja3MuCisgICAgZGVhY3RpdmF0
ZUhhbmRsZSh0aGlzKTsKKyAgICBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisK
KyAgICBpZiAobV9zb2NrZXRDb25uZWN0aW9uKSB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKKyAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0obV9zb2NrZXRDb25u
ZWN0aW9uLmdldCgpKSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKQor
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgU29ja2V0U3RyZWFtRXJyb3IoZXJy
b3ItPmNvZGUpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSBzZW5zaWJsZSBlcnJvci4KKyAgICAgICAg
bV9zb2NrZXRDb25uZWN0aW9uID0gMDsKKyAgICB9CisKKyAgICBtX291dHB1dFN0cmVhbSA9IDA7
CisgICAgbV9pbnB1dFN0cmVhbSA9IDA7CisgICAgZGVsZXRlIG1fcmVhZEJ1ZmZlcjsKKworICAg
IG1fY2xpZW50LT5kaWRDbG9zZSh0aGlzKTsKIH0KIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpCkBAIC04NSw0ICsyMDgsNzAgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJl
Y2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6YmVnaW5XYWl0
aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQoreworICAgIGlmIChtX3dyaXRlUmVhZHlTb3VyY2Up
IC8vIEFscmVhZHkgd2FpdGluZy4KKyAgICAgICAgcmV0dXJuOworCisgICAgbV93cml0ZVJlYWR5
U291cmNlID0gYWRvcHRQbGF0Zm9ybVJlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKAorICAgICAg
ICBnX3NvY2tldF9jb25uZWN0aW9uX2dldF9zb2NrZXQobV9zb2NrZXRDb25uZWN0aW9uLmdldCgp
KSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihHX0lPX09VVCksIDApKTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJj
ZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCAwKTsKK30KKwordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQoreworICAgIGlm
ICghbV93cml0ZVJlYWR5U291cmNlKSAvLyBOb3Qgd2FpdGluZy4KKyAgICAgICAgcmV0dXJuOwor
CisgICAgZ19zb3VyY2VfcmVtb3ZlKGdfc291cmNlX2dldF9pZChtX3dyaXRlUmVhZHlTb3VyY2Uu
Z2V0KCkpKTsKKyAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSAwOworfQorCitzdGF0aWMgdm9pZCBj
b25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3sKKyAgICAvLyBBbHdheXMgZmluaXNo
IHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBkZWFj
dGl2YXRlZCBlYXJsaWVyLgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHU29ja2V0
Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlvbiA9IGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3Rv
X2hvc3RfZmluaXNoKGNsaWVudCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgLy8g
VGhlIFNvY2tldFN0cmVhbUhhbmRsZSBoYXMgYmVlbiBkZWFjdGl2YXRlZCwgc28ganVzdCBjbG9z
ZSB0aGUgY29ubmVjdGlvbiwgaWdub3JpbmcgZXJyb3JzLgorICAgIGlmICghaXNBY3RpdmVIYW5k
bGUoaGFuZGxlKSkgeworICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShzb2Nr
ZXRDb25uZWN0aW9uKSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGhhbmRsZS0+Y29ubmVjdGVkKHNvY2tldENvbm5lY3Rpb24sIGVycm9yLmdldCgp
KTsKK30KKworc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3sK
KyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFkLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFt
SGFuZGxlIHdhcyBkZWFjdGl2YXRlZCBlYXJsaWVyLgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3Ry
ZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICBpZiAoIWlzQWN0aXZlSGFuZGxl
KGhhbmRsZSkpCisgICAgICAgIHJldHVybjsKKyAgICBoYW5kbGUtPnJlYWRCeXRlcyhieXRlc1Jl
YWQsIGVycm9yLmdldCgpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFj
ayhHU29ja2V0KiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlKiBo
YW5kbGUpCit7CisgICAgaWYgKCFpc0FjdGl2ZUhhbmRsZShoYW5kbGUpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICAvLyBHX0lPX0hVUCBhbmQgR19JT19FUlIgYXJlIGFyZSBhbHdheXMg
YWN0aXZlLiBTZWU6CisgICAgLy8gaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dpby9z
dGFibGUvR1NvY2tldC5odG1sI2ctc29ja2V0LWNyZWF0ZS1zb3VyY2UKKyAgICBpZiAoY29uZGl0
aW9uICYgR19JT19IVVApIHsKKyAgICAgICAgaGFuZGxlLT5jbG9zZSgpOworICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChjb25kaXRpb24gJiBHX0lPX0VSUikgeworICAgICAg
ICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZSwgU29ja2V0U3RyZWFtRXJyb3IoMCkp
OyAvLyBGSVhNRTogUHJvdmlkZSBhIHNlbnNpYmxlIGVycm9yLgorICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgfQorICAgIGlmIChjb25kaXRpb24gJiBHX0lPX09VVCkKKyAgICAgICAgaGFuZGxl
LT53cml0ZVJlYWR5KCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNjQ5
MDhhMmE5OGYwZmFmODJkMjQyOTc2ZGRhNWRlYWFiNDRhOGExNy4uMmU5M2NkMzlhOTQ4YjExMWZl
ZTQwYjg3MjU4MjcxYWJmZDRiY2VjZSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2Nv
bmZpZ3VyZS5hYwpAQCAtNjI4LDggKzYyOCw4IEBAIGZpCiBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRo
ZXIgdG8gZW5hYmxlIFdlYiBTb2NrZXRzIHN1cHBvcnRdKQogQUNfQVJHX0VOQUJMRSh3ZWJfc29j
a2V0cywKICAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXdlYi1zb2NrZXRz
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0IGZvciBXZWIg
U29ja2V0cyBbZGVmYXVsdD1ub11dKSwKLSAgICAgICAgICAgICAgW10sW2VuYWJsZV93ZWJfc29j
a2V0cz0ibm8iXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0
IGZvciBXZWIgU29ja2V0cyBbZGVmYXVsdD15ZXNdXSksCisgICAgICAgICAgICAgIFtdLFtlbmFi
bGVfd2ViX3NvY2tldHM9InllcyJdKQogQUNfTVNHX1JFU1VMVChbJGVuYWJsZV93ZWJfc29ja2V0
c10pCiAKICMgY2hlY2sgd2hldGhlciB0byBlbmFibGUgV2ViIFRpbWluZyBzdXBwb3J0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>