<?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>144380</bug_id>
          
          <creation_ts>2015-04-29 02:13:23 -0700</creation_ts>
          <short_desc>[SOUP] Network Cache: Implement ShareableResource for Soup and enable it for GTK platform</short_desc>
          <delta_ts>2015-05-20 00:04:52 -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>528+ (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>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>144950</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089939</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-29 02:13:23 -0700</bug_when>
    <thetext>It improves the network cache performance, by mmaping big resources and sending only the file descriptor to the web process instead of the actual file data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089941</commentid>
    <comment_count>1</comment_count>
      <attachid>251937</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-29 02:43:07 -0700</bug_when>
    <thetext>Created attachment 251937
Patch

NetworkCache is enabled only for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091356</commentid>
    <comment_count>2</comment_count>
      <attachid>251937</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-05-04 05:17:05 -0700</bug_when>
    <thetext>Comment on attachment 251937
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheBlobStorage.cpp:130
&gt; -    auto mappedData = Data::adoptMap(map, size);
&gt; +    auto mappedData = Data::adoptMap(map, size, fd);

It would be good to encapsulate the whole &quot;create disk-backed map from existing Data&quot; operation and make it a Data function.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheData.h:42
&gt;  namespace WebKit {
&gt; +class SharedMemory;

empty line after namespace

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataCocoa.mm:112
&gt;  Data mapFile(int fd, size_t offset, size_t size)
&gt;  {
&gt; -    if (!size)
&gt; +    if (!size) {
&gt; +        close(fd);
&gt;          return Data::empty();
&gt; +    }

It is surprising this function now closes the file. At minimum it should be renamed to something like adoptAndMapFile. There are a bunch of clients that call this and close the file manually.

We really need better abstactions though.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataCocoa.mm:157
&gt; +RefPtr&lt;SharedMemory&gt; Data::createSharedMemory() const

tryCreateSharedMemory?

&gt; Source/WebKit2/Shared/soup/ShareableResourceSoup.cpp:43
&gt; +PassRefPtr&lt;SharedBuffer&gt; ShareableResource::Handle::tryWrapInSharedBuffer() const

Adding this Soup-specific stuff is going to make it harder to get rid of these ugly abstractions. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091725</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-05 03:21:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 251937 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251937&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheBlobStorage.cpp:130
&gt; &gt; -    auto mappedData = Data::adoptMap(map, size);
&gt; &gt; +    auto mappedData = Data::adoptMap(map, size, fd);
&gt; 
&gt; It would be good to encapsulate the whole &quot;create disk-backed map from
&gt; existing Data&quot; operation and make it a Data function.

Ok.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheData.h:42
&gt; &gt;  namespace WebKit {
&gt; &gt; +class SharedMemory;
&gt; 
&gt; empty line after namespace

Sure.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataCocoa.mm:112
&gt; &gt;  Data mapFile(int fd, size_t offset, size_t size)
&gt; &gt;  {
&gt; &gt; -    if (!size)
&gt; &gt; +    if (!size) {
&gt; &gt; +        close(fd);
&gt; &gt;          return Data::empty();
&gt; &gt; +    }
&gt; 
&gt; It is surprising this function now closes the file. At minimum it should be
&gt; renamed to something like adoptAndMapFile. There are a bunch of clients that
&gt; call this and close the file manually.

I agree it&apos;s not that obvious that mapFile takes ownership of the fd. I think, I updated all callers to not close the fd, or what clients do you mean?

&gt; We really need better abstactions though.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataCocoa.mm:157
&gt; &gt; +RefPtr&lt;SharedMemory&gt; Data::createSharedMemory() const
&gt; 
&gt; tryCreateSharedMemory?

It makes sense, yes.

&gt; &gt; Source/WebKit2/Shared/soup/ShareableResourceSoup.cpp:43
&gt; &gt; +PassRefPtr&lt;SharedBuffer&gt; ShareableResource::Handle::tryWrapInSharedBuffer() const
&gt; 
&gt; Adding this Soup-specific stuff is going to make it harder to get rid of
&gt; these ugly abstractions. :(

Yes, this is because current tryWrapInSharedBuffer() method is CF specific, but implemented in the main cpp file. I just provided a soup implementation, but using its own platform file, I could move it to the cpp file though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091729</commentid>
    <comment_count>4</comment_count>
      <attachid>252375</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-05 05:01:21 -0700</bug_when>
    <thetext>Created attachment 252375
Updated patch

Updated patch. I&apos;ve moved the common code to a new cpp file (I need someone with a mac who add the xcode bits, please), merging the mapfile methods, and adding mapTofile, leaving adoptMap as the only method that requires platform specific implementation. Not asking for review to not kick the EWS bots, since network cache is still disabled in GTK+ port and it won&apos;t build in mac because of the new file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091731</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-05-05 05:12:22 -0700</bug_when>
    <thetext>&gt; I agree it&apos;s not that obvious that mapFile takes ownership of the fd. I
&gt; think, I updated all callers to not close the fd, or what clients do you
&gt; mean?

Some of the NetworkCache types have been used outside the cache code, check WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091733</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-05 05:16:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I agree it&apos;s not that obvious that mapFile takes ownership of the fd. I
&gt; &gt; think, I updated all callers to not close the fd, or what clients do you
&gt; &gt; mean?
&gt; 
&gt; Some of the NetworkCache types have been used outside the cache code, check
&gt; WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp.

Ah!, I only grepped the cache dir indeed :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091737</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-05 05:56:52 -0700</bug_when>
    <thetext>My patch indeed breaks APIUserContentExtensionStore.cpp, since I&apos;ve merged the two mapFile methods. So, it seems APIUserContentExtensionStore uses mapfile in two places:

 - openAndMapContentExtension: This could use the mapFile method that receives the path, and the code would be indeed simpler.

 - compiledToFile: this creates a temp file that is written, mapped and moved to the final destination. In this case, maybe we could add a parameter to mapToFile that receives a flag to indicate whether we want to write to the file atomically (write to temp and then move), and move all the temp file logic there. This would also simplify the UserContentExtensionStore code a lot.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094449</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-13 02:11:21 -0700</bug_when>
    <thetext>I&apos;ve split the patch in the end, moving the Data refactoring to a new bug, see #144950</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095567</commentid>
    <comment_count>9</comment_count>
      <attachid>253309</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-18 00:49:48 -0700</bug_when>
    <thetext>Created attachment 253309
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095568</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-18 00:51:58 -0700</bug_when>
    <thetext>Attachment 253309 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ShareableResource.cpp:92:  More than one command on the same line  [whitespace/newline] [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>1095570</commentid>
    <comment_count>11</comment_count>
      <attachid>253310</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-18 01:38:07 -0700</bug_when>
    <thetext>Created attachment 253310
Try to fix IOS build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095571</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-18 01:40:09 -0700</bug_when>
    <thetext>Attachment 253310 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ShareableResource.cpp:92:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 16 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>1095941</commentid>
    <comment_count>13</comment_count>
      <attachid>253310</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-05-19 08:37:02 -0700</bug_when>
    <thetext>Comment on attachment 253310
Try to fix IOS build

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

&gt; Source/WebKit2/Platform/SharedMemory.h:88
&gt; +    static RefPtr&lt;SharedMemory&gt; wrapMap(void*, size_t, int fileDescriptor);

This should be #if&apos;d for the platforms it is implemented only.

&gt; Source/WebKit2/Shared/ShareableResource.cpp:85
&gt; +PassRefPtr&lt;SharedBuffer&gt; ShareableResource::sharedBuffer()
&gt; +{
&gt; +    ref(); // Balanced by deref when SharedBuffer is deallocated.

This is named like an accessor but does some non-accessor like ref tricks. Maybe wrapInSharedBuffer()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095946</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-19 08:45:22 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 253310 [details]
&gt; Try to fix IOS build
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253310&amp;action=review

Thanks!
 
&gt; &gt; Source/WebKit2/Platform/SharedMemory.h:88
&gt; &gt; +    static RefPtr&lt;SharedMemory&gt; wrapMap(void*, size_t, int fileDescriptor);
&gt; 
&gt; This should be #if&apos;d for the platforms it is implemented only.

hmm, right, I guess we should do the same for the create() that is mac only.

&gt; &gt; Source/WebKit2/Shared/ShareableResource.cpp:85
&gt; &gt; +PassRefPtr&lt;SharedBuffer&gt; ShareableResource::sharedBuffer()
&gt; &gt; +{
&gt; &gt; +    ref(); // Balanced by deref when SharedBuffer is deallocated.
&gt; 
&gt; This is named like an accessor but does some non-accessor like ref tricks.
&gt; Maybe wrapInSharedBuffer()?

I thought about createSharedBuffer but didn&apos;t like it either, wrapInSharedBuffer() sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096200</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-20 00:04:52 -0700</bug_when>
    <thetext>Committed r184620: &lt;http://trac.webkit.org/changeset/184620&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251937</attachid>
            <date>2015-04-29 02:43:07 -0700</date>
            <delta_ts>2015-05-05 05:01:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-shareable-resource-soup.diff</filename>
            <type>text/plain</type>
            <size>24138</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhOWY3ODNlLi5hMTEzNzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTUtMDQtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBJbXBsZW1lbnQgU2hhcmVhYmxlUmVz
b3VyY2UgZm9yIFNvdXAgYW5kIGVuYWJsZSBpdCBmb3IgR1RLIHBsYXRmb3JtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzb3VwIGltcGxlbWVu
dGF0aW9uIG9mIFNoYXJlZEJ1ZmZlcjo6dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVm
ZmVyKCkuCisKKyAgICAgICAgQ292ZXJlZCBieSBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUv
IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDogRGVm
aW5lCisgICAgICAgIENhY2hlZFJlc291cmNlOjp0cnlSZXBsYWNlRW5jb2RlZERhdGEoKSBhbHNv
IGZvciBTb3VwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1C
dWZmZXIpOgorCiAyMDE1LTA0LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIE1ha2UgYSBub24tc3RhdGljIHZlcnNpb24gb2YgRnJhbWVWaWV3Ojp5
UG9zaXRpb25Gb3JSb290Q29udGVudExheWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmluZGV4IDcyMGI5MGMuLmZlYWZjMjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtNzY1LDcg
Kzc2NSw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OkNhbGxiYWNrOjp0aW1lckZpcmVkKCkKICAg
ICBtX3Jlc291cmNlLmRpZEFkZENsaWVudCgmbV9jbGllbnQpOwogfQogCi0jaWYgVVNFKEZPVU5E
QVRJT04pCisjaWYgVVNFKEZPVU5EQVRJT04pIHx8IFVTRShTT1VQKQogCiB2b2lkIENhY2hlZFJl
c291cmNlOjp0cnlSZXBsYWNlRW5jb2RlZERhdGEoU2hhcmVkQnVmZmVyJiBuZXdCdWZmZXIpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCmluZGV4IDdl
ZTZhNjguLjYzMzYxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5oCkBAIC0yNDgsNyArMjQ4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IGNhblJldXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAotI2lmIFVTRShGT1VOREFUSU9OKQorI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVJlcGxhY2VFbmNvZGVkRGF0YShTaGFyZWRCdWZm
ZXImKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zb3Vw
L1NoYXJlZEJ1ZmZlclNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc291cC9TaGFy
ZWRCdWZmZXJTb3VwLmNwcAppbmRleCAyOWJjZGI3Li5mNzMwMGUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NvdXAvU2hhcmVkQnVmZmVyU291cC5jcHAKQEAgLTc5LDYgKzc5
LDE2IEBAIGJvb2wgU2hhcmVkQnVmZmVyOjptYXliZUFwcGVuZFBsYXRmb3JtRGF0YShTaGFyZWRC
dWZmZXIqKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTaGFyZWRCdWZmZXI6OnRyeVJl
cGxhY2VDb250ZW50c1dpdGhQbGF0Zm9ybUJ1ZmZlcihTaGFyZWRCdWZmZXImIG5ld0NvbnRlbnRz
KQoreworICAgIGlmICghbmV3Q29udGVudHMuaGFzUGxhdGZvcm1EYXRhKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNsZWFyKCk7CisgICAgLy8gRklYTUU6IFVzZSBHUmVmUHRyIGluc3RlYWQg
b2YgR1VuaXF1ZVB0ciBmb3IgdGhlIFNvdXBCdWZmZXIuCisgICAgbV9zb3VwQnVmZmVyLnN3YXAo
bmV3Q29udGVudHMubV9zb3VwQnVmZmVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyODQzZjUwLi44ZWZjMjUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzAgQEAKKzIwMTUtMDQtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBJbXBsZW1lbnQgU2hh
cmVhYmxlUmVzb3VyY2UgZm9yIFNvdXAgYW5kIGVuYWJsZSBpdCBmb3IgR1RLIHBsYXRmb3JtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpbXByb3Zl
cyB0aGUgbmV0d29yayBjYWNoZSBwZXJmb3JtYW5jZSwgYnkgbW1hcGluZyBiaWcKKyAgICAgICAg
cmVzb3VyY2VzIGFuZCBzZW5kaW5nIG9ubHkgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgd2Vi
IHByb2Nlc3MKKyAgICAgICAgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgZGF0YS4gSXQgbmVl
ZHMgc29tZSBjaGFuZ2VzIGluCisgICAgICAgIGNyb3NzLXBsYXRmb3JtIGNvZGUsIGJlY2F1c2Ug
d2UgY2FuJ3QgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGFzCisgICAgICAgIG1hYyAoaXQgdXNlcyBh
IHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG5vdCBhdmFpbGFibGUgaW4KKyAgICAg
ICAgb3RoZXIgcGxhdGZvcm1zKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnN0
b3JlKTogVXNlCisgICAgICAgIERhdGE6OmNyZWF0ZVNoYXJlZE1lbW9yeSgpIHRvIGNyZWF0ZSB0
aGUgc2hhcmVkIG1lbW9yeSB1c2VkIGJ5IHRoZQorICAgICAgICBTaGFyZWFibGVSZXNvdXJjZS4g
QWxzbyBhZGQgYW4gQVNTRVJUIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlCisgICAgICAgIHNoYXJl
YWJsZSByZXNvdXJjZSBjcmVhdGVkIGlzIG5vdCBudWxscHRyLCBiZWNhdXNlCisgICAgICAgIHRo
ZSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCkgdGhhdCByZWNlaXZlcyBhIHNoYXJlZCBtZW1v
cnkKKyAgICAgICAgc2hvdWxkIG5ldmVyIHJldHVybiBudWxscHRyLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpCbG9iU3RvcmFnZTo6YWRkKTogRG8gbm90IGNsb3NlIHRoZSBm
aWxlCisgICAgICAgIGRlc2NyaXB0b3IgcmlnaHQgYWZ0ZXIgbW1hcCwgc2luY2UgaXQgd2lsbCBi
ZSBuZWVkZWQgYnkgRGF0YSBpbgorICAgICAgICB0aGUgc291cCBpbXBsZW1lbnRhdGlvbiBvZiBj
cmVhdGVTaGFyZWRNZW1vcnkoKS4gSW5zdGVhZCwgcGFzcyB0aGUKKyAgICAgICAgb3duZXJzaGlw
IHRvIERhdGE6OmFkb3B0TWFwKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjph
ZG9wdE1hcCk6IENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6bWFwRmlsZSk6IFBhc3MgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBhZG9wdE1h
cCgpLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmNyZWF0ZVNoYXJlZE1l
bW9yeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNv
dXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OkRhdGEpOiBVc2Ug
YSBjb25zdHJ1Y3RvciB0aGF0CisgICAgICAgIHJlY2VpdmVzIGEgZmlsZSBkZXNjcmlwdG9yIGlu
c3RlYWQgb2YgdGhlIG9uZSByZWNlaXZpbmcKKyAgICAgICAgQmFja2luZy4gSWYgdGhlIGZpbGUg
ZGVzY3JpcHRvciBpcyBub3QgLTEgdGhlbiB0aGUgRGF0YSBpcyBhIG1hcC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpNYXBXcmFwcGVyOjp+TWFwV3JhcHBlcik6IEFsc28gY2xvc2Ug
dGhlCisgICAgICAgIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjptYXBGaWxlKTogUGFzcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGFkb3B0TWFwKCkuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YWRvcHRNYXApOiBQYXNzIHRoZSBm
aWxlIGRlc2NyaXB0b3IKKyAgICAgICAgdG8gdGhlIE1hcFdyYXBwZXIgYW5kIGNyZWF0ZSB0aGUg
RGF0YSBwYXNzaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6RGF0YTo6Y3JlYXRlU2hhcmVkTWVtb3J5KTogQ3JlYXRlIGEKKyAgICAgICAgU2hh
cmVkTWVtb3J5IG9iamVjdCB0byB3cmFwIHRoZSBtYXBwZWQgZmlsZSwgYnV0IGtlZXBpbmcgdGhl
IG93bmVyc2hpcC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmluaXRpYWxp
emVTaGFyZWFibGVSZXNvdXJjZUhhbmRsZUZyb21TdG9yYWdlUmVjb3JkKToKKyAgICAgICAgVXNl
IERhdGE6OmNyZWF0ZVNoYXJlZE1lbW9yeSgpIHRvIGNyZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeSB1
c2VkIGJ5CisgICAgICAgIHRoZSBTaGFyZWFibGVSZXNvdXJjZS4gQWxzbyBhZGQgYW4gQVNTRVJU
IGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlCisgICAgICAgIHNoYXJlYWJsZSByZXNvdXJjZSBjcmVh
dGVkIGlzIG5vdCBudWxscHRyLCBiZWNhdXNlIHRoZQorICAgICAgICBTaGFyZWFibGVSZXNvdXJj
ZTo6Y3JlYXRlKCkgdGhhdCByZWNlaXZlcyBhIHNoYXJlZCBtZW1vcnkgc2hvdWxkCisgICAgICAg
IG5ldmVyIHJldHVybiBudWxscHRyLgorICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5o
OiBBZGQgd3JhcE1hcCgpIHN0YXRpYyBtZXRob2QgYW5kCisgICAgICAgIG1faXNXcmFwcGluZ01h
cCBtZW1iZXIuCisgICAgICAgICogUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjphbGxvY2F0ZSk6IEluaXRpYWxpemUgbV9p
c1dyYXBwaW5nTWFwIHRvIGZhbHNlLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6Om1h
cCk6IFVzZSB3cmFwTWFwKCkgYW5kIGluaXRpYWxpemUKKyAgICAgICAgbV9pc1dyYXBwaW5nTWFw
IHRvIGZhbHNlLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OndyYXBNYXApOiBDcmVh
dGUgYSBTaGFyZWRNZW1vcnkgb2JqZWN0IGZvcgorICAgICAgICB0aGUgZ2l2ZW4gbWFwLCB3aXRo
b3V0IHRha2luZyBpdHMgb3duZXJzaGlwLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
On5TaGFyZWRNZW1vcnkpOiBEbyBub3QgdW5tYXAgYW5kIGNsb3NlIHRoZQorICAgICAgICBmaWxl
IGRlc2NyaXB0b3IgaWYgbV9pc1dyYXBwaW5nTWFwIGlzIHRydWUuCisgICAgICAgICogUGxhdGZv
cm1HVEsuY21ha2U6IEFkZCBTaGFyZWQvc291cC9TaGFyZWFibGVSZXNvdXJjZVNvdXAuY3BwLgor
ICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHA6IFVzZSAjVVNFKENGKSBmb3Ig
Y2Ygc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBTaGFyZWQvc291cC9TaGFyZWFibGVSZXNvdXJj
ZVNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6c291cEJ1ZmZlckRlc3Ryb3llZCk6
IERlcmVmIHRoZSBzaGFyZWFibGUgcmVzb3VyY2UuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZVJlc291cmNlOjpIYW5kbGU6OnRyeVdyYXBJblNoYXJlZEJ1ZmZlcik6IENyZWF0ZQorICAgICAg
ICBhIFNoYXJlZEJ1ZmZlciB3cmFwcGluZyBhIFNvdXBCdWZmZXIgZm9yIHRoZSBzaGFyZWFibGUg
cmVzb3VyY2UgZGF0YS4KKyAgICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6IEVuYWJsZSBFTkFCTEVf
U0hBUkVBQkxFX1JFU09VUkNFIGZvciBHVEsuCisKIDIwMTUtMDQtMjggIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTT1VQXSBVc2UgeGF0dHJz
IHRvIGdldC9zZXQgdGhlIGNyZWF0aW9uIHRpbWUgb2YgZGlzayBjYWNoZSBmaWxlcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAK
aW5kZXggODU1ZjI1Mi4uZWM4NWFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC00MDYsMTEgKzQwNiwxMCBAQCB2
b2lkIENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFs
UmVxdWVzdCwgY29uc3QgV2ViQ29yZQogICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbY29t
cGxldGlvbkhhbmRsZXJdKGNvbnN0IERhdGEmIGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJv
ZHkgbWFwcGVkQm9keTsKICNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQotICAgICAgICBp
ZiAoYm9keURhdGEuaXNNYXAoKSkgewotICAgICAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4g
c2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4o
Ym9keURhdGEuZGF0YSgpKSwgYm9keURhdGEuc2l6ZSgpLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rp
b246OlJlYWRPbmx5KTsKLSAgICAgICAgICAgIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2Ug
PSBzaGFyZWRNZW1vcnkgPyBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKFdURjo6bW92ZShzaGFy
ZWRNZW1vcnkpLCAwLCBib2R5RGF0YS5zaXplKCkpIDogbnVsbHB0cjsKLSAgICAgICAgICAgIGlm
IChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlKQotICAgICAgICAgICAgICAgIG1hcHBlZEJv
ZHkuc2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShtYXBwZWRCb2R5LnNoYXJlYWJsZVJl
c291cmNlSGFuZGxlKTsKKyAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1l
bW9yeSA9IGJvZHlEYXRhLmNyZWF0ZVNoYXJlZE1lbW9yeSgpKSB7CisgICAgICAgICAgICBtYXBw
ZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShXVEY6
Om1vdmUoc2hhcmVkTWVtb3J5KSwgMCwgYm9keURhdGEuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlKTsKKyAgICAgICAgICAgIG1hcHBlZEJv
ZHkuc2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShtYXBwZWRCb2R5LnNoYXJlYWJsZVJl
c291cmNlSGFuZGxlKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG1hcHBlZEJvZHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCmluZGV4IDdiMDNi
ZTIuLjI5YmM1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKQEAgLTExMiwxMCAr
MTEyLDEwIEBAIEJsb2JTdG9yYWdlOjpCbG9iIEJsb2JTdG9yYWdlOjphZGQoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBEYXRhJiBkYXRhKQogICAgIH0KIAogICAgIHZvaWQqIG1hcCA9IG1tYXAo
bnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDAp
OwotICAgIGNsb3NlKGZkKTsKLQotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKKyAgICBpZiAo
bWFwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KIAogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obWFwKTsKICAgICBkYXRhLmFwcGx5KFsmbWFwRGF0YV0oY29uc3QgdWludDhfdCogYnl0ZXMs
IHNpemVfdCBieXRlc1NpemUpIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBCbG9iU3RvcmFnZTo6Qmxv
YiBCbG9iU3RvcmFnZTo6YWRkKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRGF0YSYgZGF0YSkK
ICAgICAvLyBEcm9wIHRoZSB3cml0ZSBwZXJtaXNzaW9uLgogICAgIG1wcm90ZWN0KG1hcCwgc2l6
ZSwgUFJPVF9SRUFEKTsKIAotICAgIGF1dG8gbWFwcGVkRGF0YSA9IERhdGE6OmFkb3B0TWFwKG1h
cCwgc2l6ZSk7CisgICAgYXV0byBtYXBwZWREYXRhID0gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXpl
LCBmZCk7CiAKICAgICBsaW5rKGJsb2JQYXRoLmRhdGEoKSwgbGlua1BhdGguZGF0YSgpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCmluZGV4IDg0ZmNjYzguLjc3MGUzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKQEAgLTM5LDYg
KzM5LDggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFNoYXJlZE1lbW9y
eTsKKwogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAg
LTEwNCwxNCArMTA2LDE0IEBAIHB1YmxpYzoKICAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOwogCiAgICAgc3RhdGljIERhdGEgZW1wdHkoKTsKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCk7CisgICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFw
LCBzaXplX3QsIGludCBmZCk7CiAKLSAgICBlbnVtIGNsYXNzIEJhY2tpbmcgeyBCdWZmZXIsIE1h
cCB9OwogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZl
ciwgTWFwIH07CiAgICAgRGF0YShEaXNwYXRjaFB0cjxkaXNwYXRjaF9kYXRhX3Q+LCBCYWNraW5n
ID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lmIFVTRShTT1VQKQotICAgIERhdGEoR1Jl
ZlB0cjxTb3VwQnVmZmVyPiYmLCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKKyAgICBEYXRh
KEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50IGZkID0gLTEpOwogI2VuZGlmCiAgICAgYm9vbCBp
c051bGwoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zaXpl
OyB9CkBAIC0xMTksNiArMTIxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEo
KSBjb25zdDsKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAg
IGJvb2wgaXNNYXAoKSBjb25zdCB7IHJldHVybiBtX2lzTWFwOyB9CisgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gY3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3Q7CiAKICAgICBEYXRhIHN1YnJhbmdl
KHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29uc3Q7CiAKQEAgLTEzNyw2ICsxNDAsNyBAQCBwcml2
YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZm
ZXI+IG1fYnVmZmVyOworICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKICNlbmRpZgog
ICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVf
dCBtX3NpemUgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5kZXggNGEzYzdiYi4uZDRl
MGQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNs
dWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KQEAgLTkzLDkgKzk0LDEwIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3Qg
RGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9wdERpc3BhdGNoKGRpc3Bh
dGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgp
KSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplKQor
RGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiB7CiAg
ICAgQVNTRVJUKG1hcCAmJiBtYXAgIT0gTUFQX0ZBSUxFRCk7CisgICAgY2xvc2UoZmQpOwogICAg
IGF1dG8gYm9keU1hcCA9IGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBz
aXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbbWFwLCBzaXplXSB7CiAgICAgICAgIG11
bm1hcChtYXAsIHNpemUpOwogICAgIH0pKTsKQEAgLTEwNCwxMyArMTA2LDE3IEBAIERhdGEgRGF0
YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSkKIAogRGF0YSBtYXBGaWxlKGludCBm
ZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgaWYgKCFzaXplKQorICAgIGlm
ICghc2l6ZSkgeworICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiBEYXRhOjplbXB0
eSgpOworICAgIH0KIAogICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9S
RUFELCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVE
KQorICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBjbG9zZShmZCk7CiAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSk7Cisg
ICAgfQorICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZkKTsKIH0KIAogRGF0
YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCkBAIC0xMjQsMTAgKzEzMCw3IEBAIERhdGEgbWFw
RmlsZShjb25zdCBjaGFyKiBwYXRoKQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBz
aXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKLSAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAw
LCBzaXplKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICByZXR1cm4gZGF0YTsKKyAgICByZXR1cm4g
bWFwRmlsZShmZCwgMCwgc2l6ZSk7CiB9CiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25z
dCBEYXRhJiBkYXRhKQpAQCAtMTUxLDYgKzE1NCwxNCBAQCBib29sIGJ5dGVzRXF1YWwoY29uc3Qg
RGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5k
YXRhKCksIGEuc2l6ZSgpKTsKIH0KIAorUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6Y3JlYXRl
U2hhcmVkTWVtb3J5KCkgY29uc3QKK3sKKyAgICBpZiAoaXNOdWxsKCkgfHwgIWlzTWFwKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGNvbnN0X2Nhc3Q8dWludDhfdCo+KGRhdGEoKSksIG1fc2l6ZSwgU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seSk7Cit9CisKIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCmlu
ZGV4IGI0ZTUwNzIuLmNhNzAwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCisjaW5jbHVkZSAiU2hhcmVk
TWVtb3J5LmgiCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC00NSwxMCArNDYsMTEgQEAgRGF0YTo6RGF0YShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtX2J1ZmZlciA9IGFkb3B0R1JlZihzb3Vw
X2J1ZmZlcl9uZXdfd2l0aF9vd25lcihjb3BpZWREYXRhLCBzaXplLCBjb3BpZWREYXRhLCBmYXN0
RnJlZSkpOwogfQogCi1EYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIEJh
Y2tpbmcgYmFja2luZykKK0RhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwg
aW50IGZkKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9maWxlRGVzY3JpcHRvcihm
ZCkKICAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0aCA6IDApCi0gICAgLCBtX2lz
TWFwKG1fc2l6ZSAmJiBiYWNraW5nID09IEJhY2tpbmc6Ok1hcCkKKyAgICAsIG1faXNNYXAobV9z
aXplICYmIGZkICE9IC0xKQogewogfQogCkBAIC0xMDQsMTAgKzEwNiwxMiBAQCBzdHJ1Y3QgTWFw
V3JhcHBlciB7CiAgICAgfk1hcFdyYXBwZXIoKQogICAgIHsKICAgICAgICAgbXVubWFwKG1hcCwg
c2l6ZSk7CisgICAgICAgIGNsb3NlKGZpbGVEZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICB2b2lk
KiBtYXA7CiAgICAgc2l6ZV90IHNpemU7CisgICAgaW50IGZpbGVEZXNjcmlwdG9yOwogfTsKIAog
c3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTE3
LDIyICsxMjEsMjYgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3
cmFwcGVyKQogCiBEYXRhIG1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6
ZSkKIHsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIGNsb3NlKGZk
KTsKICAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CisgICAgfQogCiAgICAgdm9pZCogbWFw
ID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0
KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpCisgICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVE
KSB7CisgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4g
RGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIERhdGE6OmFkb3B0
TWFwKG1hcCwgc2l6ZSwgZmQpOwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwg
c2l6ZV90IHNpemUpCitEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUs
IGludCBmZCkKIHsKICAgICBBU1NFUlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlM
RUQpOwotICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6
ZSB9OworICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6
ZSwgZmQgfTsKICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihzb3Vw
X2J1ZmZlcl9uZXdfd2l0aF9vd25lcihtYXAsIHNpemUsIHdyYXBwZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlbGV0ZU1hcFdyYXBwZXIpKSk7Ci0gICAgcmV0dXJuIHsgV1RG
Ojptb3ZlKGJ1ZmZlciksIERhdGE6OkJhY2tpbmc6Ok1hcCB9OworICAgIHJldHVybiB7IFdURjo6
bW92ZShidWZmZXIpLCBmZCB9OwogfQogCiBEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkK
QEAgLTE0NiwxMCArMTU0LDcgQEAgRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwot
ICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUoZmQsIDAsIHNpemUpOwotICAgIGNsb3NlKGZkKTsKLQot
ICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiBtYXBGaWxlKGZkLCAwLCBzaXplKTsKIH0KIAog
U0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEpCkBAIC0xNzMsNiArMTc4
LDE0IEBAIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQogICAg
IHJldHVybiAhbWVtY21wKGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOwogfQogCitSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBEYXRhOjpjcmVhdGVTaGFyZWRNZW1vcnkoKSBjb25zdAoreworICAg
IGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVy
LT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxlRGVzY3JpcHRvcik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcAppbmRleCBjMzRmYzUyLi5mODQ0NTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCkBAIC0x
MDUsMTIgKzEwNSwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNvZGVTdG9y
YWdlUmVjb3JkKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZQogI2lmIEVOQUJMRShTSEFS
RUFCTEVfUkVTT1VSQ0UpCiB2b2lkIEVudHJ5Ojppbml0aWFsaXplU2hhcmVhYmxlUmVzb3VyY2VI
YW5kbGVGcm9tU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZGF0YSA9IG1fc291
cmNlU3RvcmFnZVJlY29yZC5ib2R5LmRhdGEoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNl
U3RvcmFnZVJlY29yZC5ib2R5LnNpemUoKTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnkgPSBtX3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5pc01hcCgpID8gU2hhcmVkTWVt
b3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4oZGF0YSksIHNpemUsIFNoYXJlZE1lbW9y
eTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpIDogbnVsbHB0cjsKLSAgICBSZWZQdHI8U2hhcmVhYmxl
UmVzb3VyY2U+IHNoYXJlYWJsZVJlc291cmNlID0gc2hhcmVkTWVtb3J5ID8gU2hhcmVhYmxlUmVz
b3VyY2U6OmNyZWF0ZShzaGFyZWRNZW1vcnkucmVsZWFzZSgpLCAwLCBzaXplKSA6IG51bGxwdHI7
Ci0gICAgaWYgKHNoYXJlYWJsZVJlc291cmNlKQotICAgICAgICBzaGFyZWFibGVSZXNvdXJjZS0+
Y3JlYXRlSGFuZGxlKG1fc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUpOworICAgIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LmNyZWF0
ZVNoYXJlZE1lbW9yeSgpOworICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHNoYXJlYWJsZVJlc291cmNlID0gU2hh
cmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShzaGFyZWRNZW1vcnkucmVsZWFzZSgpLCAwLCBtX3NvdXJj
ZVN0b3JhZ2VSZWNvcmQuYm9keS5zaXplKCkpOworICAgIEFTU0VSVChzaGFyZWFibGVSZXNvdXJj
ZSk7CisgICAgc2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShtX3NoYXJlYWJsZVJlc291
cmNlSGFuZGxlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9y
eS5oCmluZGV4IGU0OWZlY2UuLjk5OWViOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1NoYXJlZE1lbW9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJl
ZE1lbW9yeS5oCkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gYWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZE1l
bW9yeT4gY3JlYXRlKHZvaWQqLCBzaXplX3QsIFByb3RlY3Rpb24pOwogICAgIHN0YXRpYyBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBtYXAoY29uc3QgSGFuZGxlJiwgUHJvdGVjdGlvbik7CisgICAgc3Rh
dGljIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHdyYXBNYXAodm9pZCosIHNpemVfdCwgaW50IGZpbGVE
ZXNjcmlwdG9yKTsKIAogICAgIH5TaGFyZWRNZW1vcnkoKTsKIApAQCAtMTEzLDYgKzExNCw3IEBA
IHByaXZhdGU6CiAgICAgbWFjaF9wb3J0X3QgbV9wb3J0OwogI2VsaWYgVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CisgICAgYm9vbCBtX2lzV3JhcHBp
bmdNYXA7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4
L1NoYXJlZE1lbW9yeVVuaXguY3BwCmluZGV4IDgwMDlkNWIuLjk2NGUzN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcApAQCAtMTMy
LDYgKzEzMiw3IEBAIFJlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUo
c2l6ZV90IHNpemUpCiAgICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7CiAgICAgaW5zdGFuY2Ut
Pm1fZmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKICAgICBpbnN0YW5jZS0+bV9zaXpl
ID0gc2l6ZTsKKyAgICBpbnN0YW5jZS0+bV9pc1dyYXBwaW5nTWFwID0gZmFsc2U7CiAgICAgcmV0
dXJuIGluc3RhbmNlLnJlbGVhc2UoKTsKIH0KIApAQCAtMTU2LDE3ICsxNTcsMjcgQEAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjptYXAoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFBy
b3RlY3Rpb24gcHJvdGVjdGkKICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gd3Jh
cE1hcChkYXRhLCBoYW5kbGUubV9hdHRhY2htZW50LnNpemUoKSwgaGFuZGxlLm1fYXR0YWNobWVu
dC5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKSk7CisgICAgaW5zdGFuY2UtPm1faXNXcmFwcGluZ01h
cCA9IGZhbHNlOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworUmVmUHRyPFNoYXJlZE1lbW9y
eT4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBpbnQgZmls
ZURlc2NyaXB0b3IpCit7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2UgPSBhZG9w
dFJlZihuZXcgU2hhcmVkTWVtb3J5KCkpOwogICAgIGluc3RhbmNlLT5tX2RhdGEgPSBkYXRhOwot
ICAgIGluc3RhbmNlLT5tX2ZpbGVEZXNjcmlwdG9yID0gaGFuZGxlLm1fYXR0YWNobWVudC5yZWxl
YXNlRmlsZURlc2NyaXB0b3IoKTsKLSAgICBpbnN0YW5jZS0+bV9zaXplID0gaGFuZGxlLm1fYXR0
YWNobWVudC5zaXplKCk7CisgICAgaW5zdGFuY2UtPm1fc2l6ZSA9IHNpemU7CisgICAgaW5zdGFu
Y2UtPm1fZmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBpbnN0YW5jZS0+bV9p
c1dyYXBwaW5nTWFwID0gdHJ1ZTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKIFNoYXJlZE1l
bW9yeTo6flNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbXVubWFwKG1fZGF0YSwgbV9zaXplKTsKLSAg
ICBjbG9zZVdpdGhSZXRyeShtX2ZpbGVEZXNjcmlwdG9yKTsKKyAgICBpZiAoIW1faXNXcmFwcGlu
Z01hcCkgeworICAgICAgICBtdW5tYXAobV9kYXRhLCBtX3NpemUpOworICAgICAgICBjbG9zZVdp
dGhSZXRyeShtX2ZpbGVEZXNjcmlwdG9yKTsKKyAgICB9CiB9CiAKIGJvb2wgU2hhcmVkTWVtb3J5
OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IDQ4NWE5ZGQuLjNiMzExY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC03NCw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFNo
YXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsLmNwcAogICAgIFNoYXJlZC9saW51eC9T
ZWNjb21wRmlsdGVycy9TeXNjYWxsUG9saWN5LmNwcAogCisgICAgU2hhcmVkL3NvdXAvU2hhcmVh
YmxlUmVzb3VyY2VTb3VwLmNwcAogICAgIFNoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVy
c1NvdXAuY3BwCiAKICAgICBTaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKaW5kZXggODNmZmE3MC4uODg0
YTc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCkBA
IC01Nyw2ICs1Nyw3IEBAIGJvb2wgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZTo6ZGVjb2RlKElQ
Qzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBIYW5kbGUmIGhhCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKKyNpZiBVU0UoQ0YpCiBzdGF0aWMgdm9pZCBzaGFyZWFibGVSZXNvdXJjZURlYWxsb2Nh
dGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQogewogICAgIChzdGF0aWNfY2FzdDxTaGFyZWFibGVS
ZXNvdXJjZSo+KGluZm8pKS0+ZGVyZWYoKTsgLy8gQmFsYW5jZWQgYnkgcmVmKCkgaW4gY3JlYXRl
U2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcigpCkBAIC05Niw3ICs5Nyw4IEBAIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlXcmFwSW5TaGFy
ZWRCdWZmZXIoKSBjb25zCiB7CiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YSh0
cnlXcmFwSW5DRkRhdGEoKS5nZXQoKSk7CiB9Ci0gICAgCisjZW5kaWYKKwogUGFzc1JlZlB0cjxT
aGFyZWFibGVSZXNvdXJjZT4gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHNpemUp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVSZXNvdXJjZShzaGFyZWRNZW1v
cnksIG9mZnNldCwgc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3Nv
dXAvU2hhcmVhYmxlUmVzb3VyY2VTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3Vw
L1NoYXJlYWJsZVJlc291cmNlU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNWQwNzBlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9z
b3VwL1NoYXJlYWJsZVJlc291cmNlU291cC5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lk
IHNvdXBCdWZmZXJEZXN0cm95ZWQoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgU2hhcmVhYmxl
UmVzb3VyY2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8U2hhcmVhYmxlUmVzb3VyY2UqPih1c2Vy
RGF0YSk7CisgICAgcmVzb3VyY2UtPmRlcmVmKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlXcmFwSW5TaGFyZWRCdWZmZXIoKSBj
b25zdAoreworICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFi
bGVSZXNvdXJjZTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHJlY3JlYXRlIFNoYXJlYWJsZVJlc291cmNlIGZyb20gaGFu
ZGxlLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXNvdXJjZS0+
cmVmKCk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcFNvdXBCdWZmZXIoc291cF9idWZm
ZXJfbmV3X3dpdGhfb3duZXIocmVzb3VyY2UtPmRhdGEoKSwgcmVzb3VyY2UtPnNpemUoKSwgcmVz
b3VyY2UuZ2V0KCksIHNvdXBCdWZmZXJEZXN0cm95ZWQpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0MlByZWZpeC5oIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
MlByZWZpeC5oCmluZGV4IGQ1NDBiODkuLjE1ODQyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDJQcmVmaXguaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgK
QEAgLTU4LDYgKzU4LDcgQEAKIAogI2lmIFBMQVRGT1JNKEdUSykKICNkZWZpbmUgRU5BQkxFX05F
VFdPUktfUFJPQ0VTUyAxCisjZGVmaW5lIEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UgMQogI2Vu
ZGlmCiAKIC8qIFdoZW4gQysrIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkLCB0aGUgQysrIGxpYnJh
cnkgZGVmaW5lcyB8dHJ5fCBhbmQgfGNhdGNofApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Y29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAppbmRleCBiYzlhYzI5Li4xNmRlYWZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9jb25maWcuaApAQCAtODIsNyArODIsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgRU5BQkxFX05F
VFdPUktfQ0FDSEUKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAmJiBQTEFURk9STShDT0NP
QSkKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAmJiAoUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEdUSykpCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hFIDEKICNlbHNlCiAjZGVm
aW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hFIDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252375</attachid>
            <date>2015-05-05 05:01:21 -0700</date>
            <delta_ts>2015-05-18 00:49:48 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-shareable-resource-soup.diff</filename>
            <type>text/plain</type>
            <size>29251</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNjc4YzNkLi5lZWVlMGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTUtMDUtMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBJbXBsZW1lbnQgU2hhcmVhYmxlUmVz
b3VyY2UgZm9yIFNvdXAgYW5kIGVuYWJsZSBpdCBmb3IgR1RLIHBsYXRmb3JtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzb3VwIGltcGxlbWVu
dGF0aW9uIG9mIFNoYXJlZEJ1ZmZlcjo6dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVm
ZmVyKCkuCisKKyAgICAgICAgQ292ZXJlZCBieSBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUv
IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDogRGVm
aW5lCisgICAgICAgIENhY2hlZFJlc291cmNlOjp0cnlSZXBsYWNlRW5jb2RlZERhdGEoKSBhbHNv
IGZvciBTb3VwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1C
dWZmZXIpOgorCiAyMDE1LTA1LTA1ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgU21hbGwgY2xlYW51cCBpbiBSZW5kZXJUZXh0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAppbmRleCAzYTk1MzYwLi5iMDhiZTIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTc2NSw3ICs3NjUsNyBA
QCB2b2lkIENhY2hlZFJlc291cmNlOjpDYWxsYmFjazo6dGltZXJGaXJlZCgpCiAgICAgbV9yZXNv
dXJjZS5kaWRBZGRDbGllbnQoJm1fY2xpZW50KTsKIH0KIAotI2lmIFVTRShGT1VOREFUSU9OKQor
I2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6
dHJ5UmVwbGFjZUVuY29kZWREYXRhKFNoYXJlZEJ1ZmZlciYgbmV3QnVmZmVyKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAppbmRleCA3ZWU2YTY4Li42
MzM2MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aApAQCAtMjQ4LDcgKzI0OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5SZXVz
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSNpZiBV
U0UoRk9VTkRBVElPTikKKyNpZiBVU0UoRk9VTkRBVElPTikgfHwgVVNFKFNPVVApCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCB0cnlSZXBsYWNlRW5jb2RlZERhdGEoU2hhcmVkQnVmZmVyJik7CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc291cC9TaGFyZWRC
dWZmZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NvdXAvU2hhcmVkQnVmZmVy
U291cC5jcHAKaW5kZXggMjliY2RiNy4uZjczMDBlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc291cC9TaGFyZWRCdWZmZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwCkBAIC03OSw2ICs3OSwxNiBAQCBi
b29sIFNoYXJlZEJ1ZmZlcjo6bWF5YmVBcHBlbmRQbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKikK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgU2hhcmVkQnVmZmVyOjp0cnlSZXBsYWNlQ29u
dGVudHNXaXRoUGxhdGZvcm1CdWZmZXIoU2hhcmVkQnVmZmVyJiBuZXdDb250ZW50cykKK3sKKyAg
ICBpZiAoIW5ld0NvbnRlbnRzLmhhc1BsYXRmb3JtRGF0YSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjbGVhcigpOworICAgIC8vIEZJWE1FOiBVc2UgR1JlZlB0ciBpbnN0ZWFkIG9mIEdVbmlx
dWVQdHIgZm9yIHRoZSBTb3VwQnVmZmVyLgorICAgIG1fc291cEJ1ZmZlci5zd2FwKG5ld0NvbnRl
bnRzLm1fc291cEJ1ZmZlcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDkxY2MwZGYuLjRiN2RiZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CkBAIC0xNjUsNiArMTY1LDcgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX1NPVVJDRVMKICAg
ICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCiAgICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGEuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGVjb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVy
LmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDdiYjY0MjAuLmNlYjE1ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw3NSBAQAog
MjAxNS0wNS0wNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
KyAgICAgICAgW1NPVVBdIE5ldHdvcmsgQ2FjaGU6IEltcGxlbWVudCBTaGFyZWFibGVSZXNvdXJj
ZSBmb3IgU291cCBhbmQgZW5hYmxlIGl0IGZvciBHVEsgcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDM4MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGltcHJvdmVzIHRoZSBuZXR3b3Jr
IGNhY2hlIHBlcmZvcm1hbmNlLCBieSBtbWFwaW5nIGJpZworICAgICAgICByZXNvdXJjZXMgYW5k
IHNlbmRpbmcgb25seSB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSB3ZWIgcHJvY2VzcworICAg
ICAgICBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZmlsZSBkYXRhLiBJdCBuZWVkcyBzb21lIGNoYW5n
ZXMgaW4KKyAgICAgICAgY3Jvc3MtcGxhdGZvcm0gY29kZSwgYmVjYXVzZSB3ZSBjYW4ndCB1c2Ug
dGhlIHNhbWUgYXBwcm9hY2ggYXMKKyAgICAgICAgbWFjIChpdCB1c2VzIGEgcGxhdGZvcm0gc3Bl
Y2lmaWMgaW1wbGVtZW50YXRpb24gbm90IGF2YWlsYWJsZSBpbgorICAgICAgICBvdGhlciBwbGF0
Zm9ybXMpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBuZXcgZmlsZSB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZSk6IFVzZQorICAg
ICAgICBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSB0byBjcmVhdGUgdGhlIHNoYXJlZCBt
ZW1vcnkgdXNlZCBieSB0aGUKKyAgICAgICAgU2hhcmVhYmxlUmVzb3VyY2UuIEFsc28gYWRkIGFu
IEFTU0VSVCBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZQorICAgICAgICBzaGFyZWFibGUgcmVzb3Vy
Y2UgY3JlYXRlZCBpcyBub3QgbnVsbHB0ciwgYmVjYXVzZQorICAgICAgICB0aGUgU2hhcmVhYmxl
UmVzb3VyY2U6OmNyZWF0ZSgpIHRoYXQgcmVjZWl2ZXMgYSBzaGFyZWQgbWVtb3J5CisgICAgICAg
IHNob3VsZCBuZXZlciByZXR1cm4gbnVsbHB0ci4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6QmxvYlN0b3JhZ2U6OmFkZCk6IFVzZSBEYXRhOjptYXBUb0ZpbGUoKS4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6bWFwVG9GaWxlKTogQ29kZSBtb3Zl
ZCBmcm9tCisgICAgICAgIEJsb2JTdG9yYWdlOjphZGQoKSwgaXQgbWFwcyB0aGUgZ2l2ZW4gZmls
ZSBhbmQgd3JpdGVzIHRoZSBkYXRhIHRvCisgICAgICAgIGl0LCByZXR1cm5pbmcgYSBuZXcgRGF0
YSBmb3IgdGhlIG1hcHBlZCBmaWxlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1h
cEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbXB1dGVTSEExKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpieXRlc0VxdWFsKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKTogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvci4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1v
cnkpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKTogVXNlIGEg
Y29uc3RydWN0b3IgdGhhdAorICAgICAgICByZWNlaXZlcyBhIGZpbGUgZGVzY3JpcHRvciBpbnN0
ZWFkIG9mIHRoZSBvbmUgcmVjZWl2aW5nCisgICAgICAgIEJhY2tpbmcuIElmIHRoZSBmaWxlIGRl
c2NyaXB0b3IgaXMgbm90IC0xIHRoZW4gdGhlIERhdGEgaXMgYSBtYXAuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6TWFwV3JhcHBlcjo6fk1hcFdyYXBwZXIpOiBBbHNvIGNsb3NlIHRo
ZQorICAgICAgICBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGF0YTo6YWRvcHRNYXApOiBQYXNzIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgdG8g
dGhlIE1hcFdyYXBwZXIgYW5kIGNyZWF0ZSB0aGUgRGF0YSBwYXNzaW5nIHRoZSBmaWxlIGRlc2Ny
aXB0b3IuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6dHJ5Q3JlYXRlU2hh
cmVkTWVtb3J5KTogQ3JlYXRlIGEKKyAgICAgICAgU2hhcmVkTWVtb3J5IG9iamVjdCB0byB3cmFw
IHRoZSBtYXBwZWQgZmlsZSwgYnV0IGtlZXBpbmcgdGhlIG93bmVyc2hpcC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmluaXRpYWxpemVTaGFyZWFibGVSZXNvdXJjZUhhbmRs
ZUZyb21TdG9yYWdlUmVjb3JkKToKKyAgICAgICAgVXNlIERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1l
bW9yeSgpIHRvIGNyZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeSB1c2VkIGJ5CisgICAgICAgIHRoZSBT
aGFyZWFibGVSZXNvdXJjZS4gQWxzbyBhZGQgYW4gQVNTRVJUIGluc3RlYWQgb2YgY2hlY2tpbmcg
dGhlCisgICAgICAgIHNoYXJlYWJsZSByZXNvdXJjZSBjcmVhdGVkIGlzIG5vdCBudWxscHRyLCBi
ZWNhdXNlIHRoZQorICAgICAgICBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCkgdGhhdCByZWNl
aXZlcyBhIHNoYXJlZCBtZW1vcnkgc2hvdWxkCisgICAgICAgIG5ldmVyIHJldHVybiBudWxscHRy
LgorICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOiBBZGQgd3JhcE1hcCgpIHN0YXRp
YyBtZXRob2QgYW5kCisgICAgICAgIG1faXNXcmFwcGluZ01hcCBtZW1iZXIuCisgICAgICAgICog
UGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkTWVtb3J5OjphbGxvY2F0ZSk6IEluaXRpYWxpemUgbV9pc1dyYXBwaW5nTWFwIHRvIGZhbHNl
LgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6Om1hcCk6IFVzZSB3cmFwTWFwKCkgYW5k
IGluaXRpYWxpemUKKyAgICAgICAgbV9pc1dyYXBwaW5nTWFwIHRvIGZhbHNlLgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OndyYXBNYXApOiBDcmVhdGUgYSBTaGFyZWRNZW1vcnkgb2Jq
ZWN0IGZvcgorICAgICAgICB0aGUgZ2l2ZW4gbWFwLCB3aXRob3V0IHRha2luZyBpdHMgb3duZXJz
aGlwLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOiBEbyBu
b3QgdW5tYXAgYW5kIGNsb3NlIHRoZQorICAgICAgICBmaWxlIGRlc2NyaXB0b3IgaWYgbV9pc1dy
YXBwaW5nTWFwIGlzIHRydWUuCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBTaGFy
ZWQvc291cC9TaGFyZWFibGVSZXNvdXJjZVNvdXAuY3BwLgorICAgICAgICAqIFNoYXJlZC9TaGFy
ZWFibGVSZXNvdXJjZS5jcHA6IFVzZSAjVVNFKENGKSBmb3IgY2Ygc3BlY2lmaWMgY29kZS4KKyAg
ICAgICAgKiBTaGFyZWQvc291cC9TaGFyZWFibGVSZXNvdXJjZVNvdXAuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6c291cEJ1ZmZlckRlc3Ryb3llZCk6IERlcmVmIHRoZSBzaGFyZWFibGUg
cmVzb3VyY2UuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGU6OnRy
eVdyYXBJblNoYXJlZEJ1ZmZlcik6IENyZWF0ZQorICAgICAgICBhIFNoYXJlZEJ1ZmZlciB3cmFw
cGluZyBhIFNvdXBCdWZmZXIgZm9yIHRoZSBzaGFyZWFibGUgcmVzb3VyY2UgZGF0YS4KKyAgICAg
ICAgKiBXZWJLaXQyUHJlZml4Lmg6IEVuYWJsZSBFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFIGZv
ciBHVEsuCisKKzIwMTUtMDUtMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCiAgICAgICAgIFtHVEtdW1dLMl0gVGhlIFdlYktpdCBuZXR3b3JrIGRpc2sgY2Fj
aGUgaXMgbm90IGVuYWJsZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjgyMQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCAzNmQzMWVlLi4yNDk5NDFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHAKQEAgLTQxNCwxMSArNDE0LDEwIEBAIHZvaWQgQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlCiAgICAgbV9z
dG9yYWdlLT5zdG9yZShyZWNvcmQsIFtjb21wbGV0aW9uSGFuZGxlcl0oY29uc3QgRGF0YSYgYm9k
eURhdGEpIHsKICAgICAgICAgTWFwcGVkQm9keSBtYXBwZWRCb2R5OwogI2lmIEVOQUJMRShTSEFS
RUFCTEVfUkVTT1VSQ0UpCi0gICAgICAgIGlmIChib2R5RGF0YS5pc01hcCgpKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNy
ZWF0ZShjb25zdF9jYXN0PHVpbnQ4X3QqPihib2R5RGF0YS5kYXRhKCkpLCBib2R5RGF0YS5zaXpl
KCksIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgICAgICAgICAgbWFw
cGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZSA9IHNoYXJlZE1lbW9yeSA/IFNoYXJlYWJsZVJlc291
cmNlOjpjcmVhdGUoV1RGOjptb3ZlKHNoYXJlZE1lbW9yeSksIDAsIGJvZHlEYXRhLnNpemUoKSkg
OiBudWxscHRyOwotICAgICAgICAgICAgaWYgKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2Up
Ci0gICAgICAgICAgICAgICAgbWFwcGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZS0+Y3JlYXRlSGFu
ZGxlKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUpOworICAgICAgICBpZiAoUmVm
UHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gYm9keURhdGEudHJ5Q3JlYXRlU2hhcmVk
TWVtb3J5KCkpIHsKKyAgICAgICAgICAgIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2UgPSBT
aGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKFdURjo6bW92ZShzaGFyZWRNZW1vcnkpLCAwLCBib2R5
RGF0YS5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVz
b3VyY2UpOworICAgICAgICAgICAgbWFwcGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZS0+Y3JlYXRl
SGFuZGxlKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUpOwogICAgICAgICB9CiAj
ZW5kaWYKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobWFwcGVkQm9keSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3Rv
cmFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVCbG9iU3RvcmFnZS5jcHAKaW5kZXggN2IwM2JlMi4uMGRmY2Y0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUJsb2JTdG9yYWdlLmNwcApAQCAtMTAxLDM3ICsxMDEsMTMgQEAgQmxvYlN0b3JhZ2U6OkJsb2Ig
QmxvYlN0b3JhZ2U6OmFkZChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IERhdGEmIGRhdGEpCiAg
ICAgICAgIHVubGluayhibG9iUGF0aC5kYXRhKCkpOwogICAgIH0KIAotICAgIGludCBmZCA9IG9w
ZW4oYmxvYlBhdGguZGF0YSgpLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8
IFNfSVdVU1IpOwotICAgIGlmIChmZCA8IDApCisgICAgYXV0byBtYXBwZWREYXRhID0gZGF0YS5t
YXBUb0ZpbGUoYmxvYlBhdGguZGF0YSgpKTsKKyAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHNpemVfdCBzaXplID0gZGF0YS5zaXplKCk7Ci0g
ICAgaWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIs
IHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBj
bG9zZShmZCk7Ci0KLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7
Ci0gICAgZGF0YS5hcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qg
Ynl0ZXNTaXplKSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsK
LSAgICAgICAgbWFwRGF0YSArPSBieXRlc1NpemU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0pOwotCi0gICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KLSAgICBtcHJvdGVjdCht
YXAsIHNpemUsIFBST1RfUkVBRCk7Ci0KLSAgICBhdXRvIG1hcHBlZERhdGEgPSBEYXRhOjphZG9w
dE1hcChtYXAsIHNpemUpOwotCiAgICAgbGluayhibG9iUGF0aC5kYXRhKCksIGxpbmtQYXRoLmRh
dGEoKSk7CiAKLSAgICBtX2FwcHJveGltYXRlU2l6ZSArPSBzaXplOworICAgIG1fYXBwcm94aW1h
dGVTaXplICs9IG1hcHBlZERhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHsgbWFwcGVkRGF0YSwg
aGFzaCB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wYmQ5NGYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5o
IgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworRGF0YSBEYXRhOjptYXBUb0ZpbGUo
Y29uc3QgY2hhciogcGF0aCkgY29uc3QKK3sKKyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fQ1JF
QVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7CisgICAgaWYgKGZkIDwg
MCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChmdHJ1bmNhdGUoZmQsIG1fc2l6ZSkg
PCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewor
ICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgdWlu
dDhfdCogbWFwRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOworICAgIGFwcGx5KFsm
bWFwRGF0YV0oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUpIHsKKyAgICAg
ICAgbWVtY3B5KG1hcERhdGEsIGJ5dGVzLCBieXRlc1NpemUpOworICAgICAgICBtYXBEYXRhICs9
IGJ5dGVzU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisKKyAgICAvLyBEcm9w
IHRoZSB3cml0ZSBwZXJtaXNzaW9uLgorICAgIG1wcm90ZWN0KG1hcCwgbV9zaXplLCBQUk9UX1JF
QUQpOworCisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBmZCk7Cit9CisK
K0RhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0
aCwgT19SRE9OTFksIDApOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgc3RydWN0IHN0YXQgc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAg
ICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qg
c2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgY2xvc2UoZmQp
OworICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKKyAgICB9CisKKyAgICB2b2lkKiBtYXAg
PSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAg
ICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUs
IGZkKTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEpCit7
CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBTSEExOjpEaWdlc3QgZGlnZXN0Owor
ICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAgICByZXR1cm4gZGlnZXN0OworfQorCiti
b29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKK3sKKyAgICBpZiAo
YS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
ICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggODRmY2NjOC4uYjE5YTRiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuaApAQCAtMzksNiArMzksOSBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBTaGFyZWRNZW1vcnk7CisKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMDQsMTQgKzEwNywxNCBAQCBwdWJsaWM6CiAgICAg
RGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7
Ci0gICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QpOworICAgIHN0YXRp
YyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90LCBpbnQgZmQpOwogCi0gICAgZW51bSBj
bGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICBl
bnVtIGNsYXNzIEJhY2tpbmcgeyBCdWZmZXIsIE1hcCB9OwogICAgIERhdGEoRGlzcGF0Y2hQdHI8
ZGlzcGF0Y2hfZGF0YV90PiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKICNp
ZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgQmFja2luZyA9IEJh
Y2tpbmc6OkJ1ZmZlcik7CisgICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYsIGludCBmZCA9
IC0xKTsKICNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQpAQCAtMTE5LDExICsxMjIsMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIGJvb2wgaXNNYXAoKSBjb25zdCB7IHJldHVybiBt
X2lzTWFwOyB9CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gdHJ5Q3JlYXRlU2hhcmVkTWVtb3J5
KCkgY29uc3Q7CiAKICAgICBEYXRhIHN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCkgY29u
c3Q7CiAKICAgICBib29sIGFwcGx5KGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoY29uc3QgdWlu
dDhfdCosIHNpemVfdCk+JiYpIGNvbnN0OwogCisgICAgRGF0YSBtYXBUb0ZpbGUoY29uc3QgY2hh
ciogcGF0aCkgY29uc3Q7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBkaXNwYXRjaF9kYXRh
X3QgZGlzcGF0Y2hEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaERhdGEuZ2V0KCk7IH0K
ICNlbmRpZgpAQCAtMTM3LDYgKzE0Myw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICNpZiBVU0UoU09V
UCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7CisgICAgaW50IG1f
ZmlsZURlc2NyaXB0b3IgeyAtMSB9OwogI2VuZGlmCiAgICAgbXV0YWJsZSBjb25zdCB1aW50OF90
KiBtX2RhdGEgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDb2NvYS5tbQppbmRleCA0YTNjN2JiLi4wODBjNWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNv
Y29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIAor
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtOTMsNjIg
Kzk0LDIyIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikK
ICAgICByZXR1cm4geyBhZG9wdERpc3BhdGNoKGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChh
LmRpc3BhdGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjph
ZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplKQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lk
KiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCAmJiBtYXAgIT0g
TUFQX0ZBSUxFRCk7CisgICAgY2xvc2UoZmQpOwogICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0RGlz
cGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbbWFwLCBzaXplXSB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwogICAgIH0p
KTsKICAgICByZXR1cm4geyBib2R5TWFwLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIAotRGF0
YSBtYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgaWYg
KCFzaXplKQotICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKLQotICAgIHZvaWQqIG1hcCA9
IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7
Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJl
dHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUpOwotfQotCi1EYXRhIG1hcEZpbGUoY29uc3Qg
Y2hhciogcGF0aCkKLXsKLSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAg
ICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7
Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7
Ci0gICAgYXV0byBkYXRhID0gbWFwRmlsZShmZCwgMCwgc2l6ZSk7Ci0gICAgY2xvc2UoZmQpOwot
Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBE
YXRhJiBkYXRhKQorUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5Q3JlYXRlU2hhcmVkTWVt
b3J5KCkgY29uc3QKIHsKLSAgICBTSEExIHNoYTE7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
ZGF0YSwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0pOwotICAgIFNIQTE6OkRp
Z2VzdCBkaWdlc3Q7Ci0gICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwotICAgIHJldHVybiBk
aWdlc3Q7Ci19CisgICAgaWYgKGlzTnVsbCgpIHx8ICFpc01hcCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotYm9vbCBieXRlc0VxdWFsKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIp
Ci17Ci0gICAgaWYgKGEuaXNOdWxsKCkgfHwgYi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiAhbWVtY21wKGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOworICAg
IHJldHVybiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdF9jYXN0PHVpbnQ4X3QqPihkYXRhKCkp
LCBtX3NpemUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhU291cC5jcHAKaW5kZXggYjRlNTA3Mi4uYTA4YTA2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFTb3VwLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlIDxmY250bC5oPgogI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTQ1LDEwICs0Niwx
MSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogICAgIG1f
YnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGNvcGllZERhdGEs
IHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxT
b3VwQnVmZmVyPiYmIGJ1ZmZlciwgQmFja2luZyBiYWNraW5nKQorRGF0YTo6RGF0YShHUmVmUHRy
PFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisg
ICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+
bGVuZ3RoIDogMCkKLSAgICAsIG1faXNNYXAobV9zaXplICYmIGJhY2tpbmcgPT0gQmFja2luZzo6
TWFwKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgZmQgIT0gLTEpCiB7CiB9CiAKQEAgLTEwNCwx
MCArMTA2LDEyIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAg
ewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0
b3IpOwogICAgIH0KIAogICAgIHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKKyAgICBpbnQg
ZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdy
YXBwZXIqIHdyYXBwZXIpCkBAIC0xMTUsNjIgKzExOSwyMSBAQCBzdGF0aWMgdm9pZCBkZWxldGVN
YXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAK
LURhdGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAg
IGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0KLSAgICB2b2lkKiBt
YXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZz
ZXQpOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKLX0KLQotRGF0YSBEYXRhOjphZG9w
dE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplKQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBt
YXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJU
KG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdy
YXBwZXIgeyBtYXAsIHNpemUgfTsKKyAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdy
YXBwZXIgeyBtYXAsIHNpemUsIGZkIH07CiAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIg
PSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIobWFwLCBzaXplLCB3cmFwcGVy
LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSkpOwot
ICAgIHJldHVybiB7IFdURjo6bW92ZShidWZmZXIpLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKLX0K
LQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0gb3Blbihw
YXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwgMCkgewot
ICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHNpemVf
dCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUoZmQsIDAsIHNp
emUpOwotICAgIGNsb3NlKGZkKTsKLQotICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiB7IFdU
Rjo6bW92ZShidWZmZXIpLCBmZCB9OwogfQogCi1TSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29u
c3QgRGF0YSYgZGF0YSkKK1JlZlB0cjxTaGFyZWRNZW1vcnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJl
ZE1lbW9yeSgpIGNvbnN0CiB7Ci0gICAgU0hBMSBzaGExOwotICAgIGRhdGEuYXBwbHkoWyZzaGEx
XShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBzaGExLmFkZEJ5
dGVzKGRhdGEsIHNpemUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsKLSAgICBTSEEx
OjpEaWdlc3QgZGlnZXN0OwotICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKLSAgICByZXR1
cm4gZGlnZXN0OwotfQorICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLWJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRh
JiBiKQotewotICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgpKTsK
KyAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVm
ZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxlRGVzY3JpcHRvcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCmluZGV4IGMzNGZjNTIu
LmRlNWYzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKQEAgLTEwNSwxMiArMTA1LDEzIEBAIHN0ZDo6
dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFn
ZTo6UmVjb3JkJiBzdG9yYWdlCiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKIHZvaWQg
RW50cnk6OmluaXRpYWxpemVTaGFyZWFibGVSZXNvdXJjZUhhbmRsZUZyb21TdG9yYWdlUmVjb3Jk
KCkgY29uc3QKIHsKLSAgICBhdXRvKiBkYXRhID0gbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHku
ZGF0YSgpOwotICAgIHNpemVfdCBzaXplID0gbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkuc2l6
ZSgpOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IG1fc291cmNlU3Rv
cmFnZVJlY29yZC5ib2R5LmlzTWFwKCkgPyBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25s
eSkgOiBudWxscHRyOwotICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gc2hhcmVhYmxlUmVz
b3VyY2UgPSBzaGFyZWRNZW1vcnkgPyBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKHNoYXJlZE1l
bW9yeS5yZWxlYXNlKCksIDAsIHNpemUpIDogbnVsbHB0cjsKLSAgICBpZiAoc2hhcmVhYmxlUmVz
b3VyY2UpCi0gICAgICAgIHNoYXJlYWJsZVJlc291cmNlLT5jcmVhdGVIYW5kbGUobV9zaGFyZWFi
bGVSZXNvdXJjZUhhbmRsZSk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5
ID0gbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkudHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCk7Cisg
ICAgaWYgKCFzaGFyZWRNZW1vcnkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxTaGFy
ZWFibGVSZXNvdXJjZT4gc2hhcmVhYmxlUmVzb3VyY2UgPSBTaGFyZWFibGVSZXNvdXJjZTo6Y3Jl
YXRlKHNoYXJlZE1lbW9yeS5yZWxlYXNlKCksIDAsIG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5
LnNpemUoKSk7CisgICAgQVNTRVJUKHNoYXJlYWJsZVJlc291cmNlKTsKKyAgICBzaGFyZWFibGVS
ZXNvdXJjZS0+Y3JlYXRlSGFuZGxlKG1fc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5o
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggZTQ5ZmVjZS4u
OTk5ZWI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTg1LDYg
Kzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkTWVtb3J5PiBhbGxvY2F0
ZShzaXplX3QpOwogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkTWVtb3J5PiBjcmVhdGUodm9pZCos
IHNpemVfdCwgUHJvdGVjdGlvbik7CiAgICAgc3RhdGljIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1h
cChjb25zdCBIYW5kbGUmLCBQcm90ZWN0aW9uKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZE1l
bW9yeT4gd3JhcE1hcCh2b2lkKiwgc2l6ZV90LCBpbnQgZmlsZURlc2NyaXB0b3IpOwogCiAgICAg
flNoYXJlZE1lbW9yeSgpOwogCkBAIC0xMTMsNiArMTE0LDcgQEAgcHJpdmF0ZToKICAgICBtYWNo
X3BvcnRfdCBtX3BvcnQ7CiAjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICAgICBpbnQg
bV9maWxlRGVzY3JpcHRvcjsKKyAgICBib29sIG1faXNXcmFwcGluZ01hcDsKICNlbmRpZgogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlV
bml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5j
cHAKaW5kZXggODAwOWQ1Yi4uOTY0ZTM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCkBAIC0xMzIsNiArMTMyLDcgQEAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkKICAgICBp
bnN0YW5jZS0+bV9kYXRhID0gZGF0YTsKICAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9
IGZpbGVEZXNjcmlwdG9yOwogICAgIGluc3RhbmNlLT5tX3NpemUgPSBzaXplOworICAgIGluc3Rh
bmNlLT5tX2lzV3JhcHBpbmdNYXAgPSBmYWxzZTsKICAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFz
ZSgpOwogfQogCkBAIC0xNTYsMTcgKzE1NywyNyBAQCBSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFy
ZWRNZW1vcnk6Om1hcChjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aQog
ICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2UgPSB3cmFwTWFwKGRhdGEsIGhhbmRsZS5t
X2F0dGFjaG1lbnQuc2l6ZSgpLCBoYW5kbGUubV9hdHRhY2htZW50LnJlbGVhc2VGaWxlRGVzY3Jp
cHRvcigpKTsKKyAgICBpbnN0YW5jZS0+bV9pc1dyYXBwaW5nTWFwID0gZmFsc2U7CisgICAgcmV0
dXJuIGluc3RhbmNlOworfQorCitSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6Ondy
YXBNYXAodm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGludCBmaWxlRGVzY3JpcHRvcikKK3sKICAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1v
cnkoKSk7CiAgICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7Ci0gICAgaW5zdGFuY2UtPm1fZmls
ZURlc2NyaXB0b3IgPSBoYW5kbGUubV9hdHRhY2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRvcigp
OwotICAgIGluc3RhbmNlLT5tX3NpemUgPSBoYW5kbGUubV9hdHRhY2htZW50LnNpemUoKTsKKyAg
ICBpbnN0YW5jZS0+bV9zaXplID0gc2l6ZTsKKyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRv
ciA9IGZpbGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5tX2lzV3JhcHBpbmdNYXAgPSB0cnVl
OwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAogU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5
KCkKIHsKLSAgICBtdW5tYXAobV9kYXRhLCBtX3NpemUpOwotICAgIGNsb3NlV2l0aFJldHJ5KG1f
ZmlsZURlc2NyaXB0b3IpOworICAgIGlmICghbV9pc1dyYXBwaW5nTWFwKSB7CisgICAgICAgIG11
bm1hcChtX2RhdGEsIG1fc2l6ZSk7CisgICAgICAgIGNsb3NlV2l0aFJldHJ5KG1fZmlsZURlc2Ny
aXB0b3IpOworICAgIH0KIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5k
bGUmIGhhbmRsZSwgUHJvdGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZWVm
MTg0Mi4uZDI3NDBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTc5LDYgKzc5LDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL1N5c2NhbGwuY3BwCiAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2Nh
bGxQb2xpY3kuY3BwCiAKKyAgICBTaGFyZWQvc291cC9TaGFyZWFibGVSZXNvdXJjZVNvdXAuY3Bw
CiAgICAgU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIAogICAgIFNo
YXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1No
YXJlYWJsZVJlc291cmNlLmNwcAppbmRleCA4M2ZmYTcwLi44ODRhNzk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKQEAgLTU3LDYgKzU3LDcgQEAgYm9v
bCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXIm
IGRlY29kZXIsIEhhbmRsZSYgaGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIFVTRShDRikK
IHN0YXRpYyB2b2lkIHNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0ZSh2b2lkICpwdHIsIHZvaWQg
KmluZm8pCiB7CiAgICAgKHN0YXRpY19jYXN0PFNoYXJlYWJsZVJlc291cmNlKj4oaW5mbykpLT5k
ZXJlZigpOyAvLyBCYWxhbmNlZCBieSByZWYoKSBpbiBjcmVhdGVTaGFyZWFibGVSZXNvdXJjZURl
YWxsb2NhdG9yKCkKQEAgLTk2LDcgKzk3LDggQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNo
YXJlYWJsZVJlc291cmNlOjpIYW5kbGU6OnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpIGNvbnMKIHsK
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKHRyeVdyYXBJbkNGRGF0YSgpLmdl
dCgpKTsKIH0KLSAgICAKKyNlbmRpZgorCiBQYXNzUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBT
aGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRN
ZW1vcnksIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgc2l6ZSkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNoYXJlYWJsZVJlc291cmNlKHNoYXJlZE1lbW9yeSwgb2Zmc2V0LCBzaXplKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9TaGFyZWFibGVSZXNvdXJj
ZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvU2hhcmVhYmxlUmVzb3VyY2VT
b3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDA3MGViCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvU2hhcmVhYmxlUmVzb3Vy
Y2VTb3VwLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFy
ZWFibGVSZXNvdXJjZS5oIgorCisjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQgc291cEJ1ZmZlckRlc3Ryb3ll
ZChncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBTaGFyZWFibGVSZXNvdXJjZSogcmVzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxTaGFyZWFibGVSZXNvdXJjZSo+KHVzZXJEYXRhKTsKKyAgICByZXNvdXJj
ZS0+ZGVyZWYoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlYWJsZVJlc291
cmNlOjpIYW5kbGU6OnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgUmVmUHRy
PFNoYXJlYWJsZVJlc291cmNlPiByZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUo
KnRoaXMpOworICAgIGlmICghcmVzb3VyY2UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gcmVjcmVhdGUgU2hhcmVhYmxlUmVzb3VyY2UgZnJvbSBoYW5kbGUuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIHJlc291cmNlLT5yZWYoKTsKKyAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjp3cmFwU291cEJ1ZmZlcihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihy
ZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+c2l6ZSgpLCByZXNvdXJjZS5nZXQoKSwgc291cEJ1
ZmZlckRlc3Ryb3llZCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyUHJlZml4LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgKaW5kZXggZDU0
MGI4OS4uMTU4NDI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0MlByZWZpeC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDJQcmVmaXguaApAQCAtNTgsNiArNTgsNyBAQAog
CiAjaWYgUExBVEZPUk0oR1RLKQogI2RlZmluZSBFTkFCTEVfTkVUV09SS19QUk9DRVNTIDEKKyNk
ZWZpbmUgRU5BQkxFX1NIQVJFQUJMRV9SRVNPVVJDRSAxCiAjZW5kaWYKIAogLyogV2hlbiBDKysg
ZXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQsIHRoZSBDKysgbGlicmFyeSBkZWZpbmVzIHx0cnl8IGFu
ZCB8Y2F0Y2h8Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253309</attachid>
            <date>2015-05-18 00:49:48 -0700</date>
            <delta_ts>2015-05-18 01:38:07 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-shareable-resource-soup.diff</filename>
            <type>text/plain</type>
            <size>16965</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YzQ3OTVlLi4wNzQwMjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTUtMDUtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBJbXBsZW1lbnQgU2hhcmVhYmxlUmVz
b3VyY2UgZm9yIFNvdXAgYW5kIGVuYWJsZSBpdCBmb3IgR1RLIHBsYXRmb3JtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzb3VwIGltcGxlbWVu
dGF0aW9uIG9mIFNoYXJlZEJ1ZmZlcjo6dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVm
ZmVyKCkuCisKKyAgICAgICAgQ292ZXJlZCBieSBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUv
IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDogRGVm
aW5lCisgICAgICAgIENhY2hlZFJlc291cmNlOjp0cnlSZXBsYWNlRW5jb2RlZERhdGEoKSBhbHNv
IGZvciBTb3VwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1C
dWZmZXIpOgorCiAyMDE1LTA1LTE3ICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEFkZCBzY3JvbGxiYXIgd2lkdGgg
aW4gaW50cmluc2ljIGxvZ2ljYWwgd2lkdGhzIGNvbXB1dGF0aW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCAyZGVkNWVmLi44ODhmZmMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAK
QEAgLTc3Myw3ICs3NzMsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpDYWxsYmFjazo6dGltZXJG
aXJlZCgpCiAgICAgbV9yZXNvdXJjZS5kaWRBZGRDbGllbnQoJm1fY2xpZW50KTsKIH0KIAotI2lm
IFVTRShGT1VOREFUSU9OKQorI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKIAogdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjZUVuY29kZWREYXRhKFNoYXJlZEJ1ZmZlciYgbmV3
QnVmZmVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aAppbmRleCAwMWE1ZDg4Li5jMjgyMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuaApAQCAtMjUyLDcgKzI1Miw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgYm9vbCBjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSNpZiBVU0UoRk9VTkRBVElPTikKKyNpZiBVU0UoRk9VTkRBVElPTikgfHwg
VVNFKFNPVVApCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlSZXBsYWNlRW5jb2RlZERhdGEo
U2hhcmVkQnVmZmVyJik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc291cC9TaGFyZWRCdWZmZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NvdXAvU2hhcmVkQnVmZmVyU291cC5jcHAKaW5kZXggMDZiM2FlYy4uY2JkYjMzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc291cC9TaGFyZWRCdWZmZXJTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwCkBA
IC03OCw2ICs3OCwxNiBAQCBib29sIFNoYXJlZEJ1ZmZlcjo6bWF5YmVBcHBlbmRQbGF0Zm9ybURh
dGEoU2hhcmVkQnVmZmVyKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgU2hhcmVkQnVm
ZmVyOjp0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1CdWZmZXIoU2hhcmVkQnVmZmVyJiBu
ZXdDb250ZW50cykKK3sKKyAgICBpZiAoIW5ld0NvbnRlbnRzLmhhc1BsYXRmb3JtRGF0YSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjbGVhcigpOworICAgIC8vIEZJWE1FOiBVc2UgR1JlZlB0
ciBpbnN0ZWFkIG9mIEdVbmlxdWVQdHIgZm9yIHRoZSBTb3VwQnVmZmVyLgorICAgIG1fc291cEJ1
ZmZlci5zd2FwKG5ld0NvbnRlbnRzLm1fc291cEJ1ZmZlcik7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjVmODUwYy4uZDUwNzE5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE1LTA1LTE4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gTmV0d29yayBDYWNoZTogSW1w
bGVtZW50IFNoYXJlYWJsZVJlc291cmNlIGZvciBTb3VwIGFuZCBlbmFibGUgaXQgZm9yIEdUSyBw
bGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0MzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SXQgaW1wcm92ZXMgdGhlIG5ldHdvcmsgY2FjaGUgcGVyZm9ybWFuY2UsIGJ5IG1tYXBpbmcgYmln
CisgICAgICAgIHJlc291cmNlcyBhbmQgc2VuZGluZyBvbmx5IHRoZSBmaWxlIGRlc2NyaXB0b3Ig
dG8gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBmaWxlIGRh
dGEuIEl0IG5lZWRzIHNvbWUgY2hhbmdlcyBpbgorICAgICAgICBjcm9zcy1wbGF0Zm9ybSBjb2Rl
LCBiZWNhdXNlIHdlIGNhbid0IHVzZSB0aGUgc2FtZSBhcHByb2FjaCBhcworICAgICAgICBtYWMg
KGl0IHVzZXMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBub3QgYXZhaWxhYmxl
IGluCisgICAgICAgIG90aGVyIHBsYXRmb3JtcykuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpzdG9yZSk6IFVzZQorICAgICAgICBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnko
KSB0byBjcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgdXNlZCBieQorICAgICAgICB0aGUgU2hhcmVh
YmxlUmVzb3VyY2UuIEFsc28gYWRkIGFuIEFTU0VSVCBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZQor
ICAgICAgICBzaGFyZWFibGUgcmVzb3VyY2UgY3JlYXRlZCBpcyBub3QgbnVsbHB0ciwgYmVjYXVz
ZSB0aGUKKyAgICAgICAgU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZSgpIHRoYXQgcmVjZWl2ZXMg
YSBzaGFyZWQgbWVtb3J5IHNob3VsZAorICAgICAgICBuZXZlciByZXR1cm4gbnVsbHB0ci4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9y
eSk6IENyZWF0ZSBhCisgICAgICAgIFNoYXJlZE1lbW9yeSBvYmplY3QgdG8gd3JhcCB0aGUgbWFw
cGVkIGZpbGUsIGJ1dCBrZWVwaW5nIHRoZSBvd25lcnNoaXAuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVudHJ5Ojppbml0aWFsaXplU2hhcmVhYmxlUmVzb3VyY2VIYW5kbGVGcm9tU3Rv
cmFnZVJlY29yZCk6CisgICAgICAgIFVzZSBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSB0
byBjcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgdXNlZAorICAgICAgICBieXRoZSBTaGFyZWFibGVS
ZXNvdXJjZS4gQWxzbyBhZGQgYW4gQVNTRVJUIGluc3RlYWQgb2YgY2hlY2tpbmcKKyAgICAgICAg
dGhlIHNoYXJlYWJsZSByZXNvdXJjZSBjcmVhdGVkIGlzIG5vdCBudWxscHRyLCBiZWNhdXNlIHRo
ZQorICAgICAgICBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCkgdGhhdCByZWNlaXZlcyBhIHNo
YXJlZCBtZW1vcnkgc2hvdWxkCisgICAgICAgIG5ldmVyIHJldHVybiBudWxscHRyLgorICAgICAg
ICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL3VuaXgvU2hh
cmVkTWVtb3J5VW5peC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6bWFwKTog
VXNlIHdyYXBNYXAoKSBhbmQgaW5pdGlhbGl6ZQorICAgICAgICBtX2lzV3JhcHBpbmdNYXAgdG8g
ZmFsc2UuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6d3JhcE1hcCk6IENyZWF0ZSBh
IFNoYXJlZE1lbW9yeSBvYmplY3QgZm9yCisgICAgICAgIHRoZSBnaXZlbiBtYXAsIHdpdGhvdXQg
dGFraW5nIGl0cyBvd25lcnNoaXAuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNo
YXJlZE1lbW9yeSk6IERvIG5vdCB1bm1hcCBhbmQgY2xvc2UgdGhlCisgICAgICAgIGZpbGUgZGVz
Y3JpcHRvciBpZiBtX2lzV3JhcHBpbmdNYXAgaXMgdHJ1ZS4KKyAgICAgICAgKiBTaGFyZWQvU2hh
cmVhYmxlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFibGVSZXNv
dXJjZURlYWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlUmVzb3VyY2U6OnNo
YXJlZEJ1ZmZlcik6IENyZWF0ZSBhIFNoYXJlZEJ1ZmZlcgorICAgICAgICB3cmFwcGluZyB0aGUg
U2hhcmVhYmxlUmVzb3VyY2UgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlUmVzb3Vy
Y2U6OkhhbmRsZTo6dHJ5V3JhcEluU2hhcmVkQnVmZmVyKTogQ3JlYXRlCisgICAgICAgIGEgU2hh
cmVhYmxlUmVzb3VyY2UgZm9yIHRoZSBoYW5kbGUgYW5kIGNyZWF0ZSBhIFNoYXJlZEJ1ZmZlcgor
ICAgICAgICB3cmFwcGluZyBpdC4KKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2Uu
aDoKKyAgICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6IEVuYWJsZSBFTkFCTEVfU0hBUkVBQkxFX1JF
U09VUkNFIGZvciBHVEsuCisKIDIwMTUtMDUtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5ldHdvcmsgQ2FjaGU6IE1ha2UgRGF0YTo6YWRv
cHRNYXAgdGFrZSB0aGUgb3duZXJzaGlwIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCmlu
ZGV4IDM2ZDMxZWUuLjI0OTk0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtNDE0LDExICs0MTQsMTAgQEAgdm9p
ZCBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJl
cXVlc3QsIGNvbnN0IFdlYkNvcmUKICAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgW2NvbXBs
ZXRpb25IYW5kbGVyXShjb25zdCBEYXRhJiBib2R5RGF0YSkgewogICAgICAgICBNYXBwZWRCb2R5
IG1hcHBlZEJvZHk7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKLSAgICAgICAgaWYg
KGJvZHlEYXRhLmlzTWFwKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGJv
ZHlEYXRhLmRhdGEoKSksIGJvZHlEYXRhLnNpemUoKSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSk7Ci0gICAgICAgICAgICBtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlID0g
c2hhcmVkTWVtb3J5ID8gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShXVEY6Om1vdmUoc2hhcmVk
TWVtb3J5KSwgMCwgYm9keURhdGEuc2l6ZSgpKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAo
bWFwcGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICBtYXBwZWRCb2R5
LnNoYXJlYWJsZVJlc291cmNlLT5jcmVhdGVIYW5kbGUobWFwcGVkQm9keS5zaGFyZWFibGVSZXNv
dXJjZUhhbmRsZSk7CisgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1v
cnkgPSBib2R5RGF0YS50cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSkgeworICAgICAgICAgICAgbWFw
cGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoV1RG
Ojptb3ZlKHNoYXJlZE1lbW9yeSksIDAsIGJvZHlEYXRhLnNpemUoKSk7CisgICAgICAgICAgICBB
U1NFUlQobWFwcGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZSk7CisgICAgICAgICAgICBtYXBwZWRC
b2R5LnNoYXJlYWJsZVJlc291cmNlLT5jcmVhdGVIYW5kbGUobWFwcGVkQm9keS5zaGFyZWFibGVS
ZXNvdXJjZUhhbmRsZSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihtYXBwZWRCb2R5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAppbmRleCA4Yzc0YWUzLi4yMjU1ODk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCkBAIC0zOSw2ICszOSw5IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFNoYXJlZE1lbW9yeTsKKwogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKQEAgLTExOSw2ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
dWludDhfdCogZGF0YSgpIGNvbnN0OwogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAgICAgYm9vbCBpc01hcCgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXA7IH0KKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiB0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSBjb25zdDsKIAog
ICAgIERhdGEgc3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90KSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YUNvY29hLm1tCmluZGV4IGU4ZWRjYjkuLjA4MGM1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQog
CisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2gu
aD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC0xMDMs
NyArMTA0LDEzIEBAIERhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwg
aW50IGZkKQogICAgIHJldHVybiB7IGJvZHlNYXAsIERhdGE6OkJhY2tpbmc6Ok1hcCB9OwogfQog
CitSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSBjb25z
dAoreworICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKKyAgICByZXR1cm4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90
Kj4oZGF0YSgpKSwgbV9zaXplLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsK
K30KIAogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCmluZGV4IGFhNmQzYmYuLmEwOGEwNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQogCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSA8
ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBA
IC0xMjcsNyArMTI4LDEzIEBAIERhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qg
c2l6ZSwgaW50IGZkKQogICAgIHJldHVybiB7IFdURjo6bW92ZShidWZmZXIpLCBmZCB9OwogfQog
CitSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSBjb25z
dAoreworICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKKyAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+
KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxlRGVzY3JpcHRvcik7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVFbnRyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAKaW5kZXggNzM1MGE1Yi4uMjA1OTEzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNw
cApAQCAtMTA0LDEyICsxMDQsMTMgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVj
b2RlU3RvcmFnZVJlY29yZChjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UKICNpZiBFTkFC
TEUoU0hBUkVBQkxFX1JFU09VUkNFKQogdm9pZCBFbnRyeTo6aW5pdGlhbGl6ZVNoYXJlYWJsZVJl
c291cmNlSGFuZGxlRnJvbVN0b3JhZ2VSZWNvcmQoKSBjb25zdAogewotICAgIGF1dG8qIGRhdGEg
PSBtX3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5kYXRhKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBt
X3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5zaXplKCk7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gc2hhcmVkTWVtb3J5ID0gbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkuaXNNYXAoKSA/IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGRhdGEpLCBzaXplLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSA6IG51bGxwdHI7Ci0gICAgUmVmUHRyPFNo
YXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNvdXJjZSA9IHNoYXJlZE1lbW9yeSA/IFNoYXJl
YWJsZVJlc291cmNlOjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2UoKSwgMCwgc2l6ZSkgOiBu
dWxscHRyOwotICAgIGlmIChzaGFyZWFibGVSZXNvdXJjZSkKLSAgICAgICAgc2hhcmVhYmxlUmVz
b3VyY2UtPmNyZWF0ZUhhbmRsZShtX3NoYXJlYWJsZVJlc291cmNlSGFuZGxlKTsKKyAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBtX3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9k
eS50cnlDcmVhdGVTaGFyZWRNZW1vcnkoKTsKKyAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNv
dXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2UoKSwg
MCwgbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc2hhcmVh
YmxlUmVzb3VyY2UpOworICAgIHNoYXJlYWJsZVJlc291cmNlLT5jcmVhdGVIYW5kbGUobV9zaGFy
ZWFibGVSZXNvdXJjZUhhbmRsZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAppbmRleCBlNDlmZWNlLi4zYjUwMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaApAQCAtODUsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZlB0cjxTaGFyZWRNZW1vcnk+IGFsbG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IGNyZWF0ZSh2b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uKTsKICAgICBz
dGF0aWMgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbWFwKGNvbnN0IEhhbmRsZSYsIFByb3RlY3Rpb24p
OworICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkTWVtb3J5PiB3cmFwTWFwKHZvaWQqLCBzaXplX3Qs
IGludCBmaWxlRGVzY3JpcHRvcik7CiAKICAgICB+U2hhcmVkTWVtb3J5KCk7CiAKQEAgLTExMyw2
ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIG1hY2hfcG9ydF90IG1fcG9ydDsKICNlbGlmIFVTRShV
TklYX0RPTUFJTl9TT0NLRVRTKQogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOworICAgIGJvb2wg
bV9pc1dyYXBwaW5nTWFwIHsgZmFsc2UgfTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKaW5kZXggODAwOWQ1Yi4u
ZGFlMzU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRN
ZW1vcnlVbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1l
bW9yeVVuaXguY3BwCkBAIC0xNTYsMTcgKzE1NiwyNyBAQCBSZWZQdHI8U2hhcmVkTWVtb3J5PiBT
aGFyZWRNZW1vcnk6Om1hcChjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0
aQogICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2UgPSB3cmFwTWFwKGRhdGEsIGhhbmRs
ZS5tX2F0dGFjaG1lbnQuc2l6ZSgpLCBoYW5kbGUubV9hdHRhY2htZW50LnJlbGVhc2VGaWxlRGVz
Y3JpcHRvcigpKTsKKyAgICBpbnN0YW5jZS0+bV9pc1dyYXBwaW5nTWFwID0gZmFsc2U7CisgICAg
cmV0dXJuIGluc3RhbmNlOworfQorCitSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6
OndyYXBNYXAodm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGludCBmaWxlRGVzY3JpcHRvcikKK3sK
ICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRN
ZW1vcnkoKSk7CiAgICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7Ci0gICAgaW5zdGFuY2UtPm1f
ZmlsZURlc2NyaXB0b3IgPSBoYW5kbGUubV9hdHRhY2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRv
cigpOwotICAgIGluc3RhbmNlLT5tX3NpemUgPSBoYW5kbGUubV9hdHRhY2htZW50LnNpemUoKTsK
KyAgICBpbnN0YW5jZS0+bV9zaXplID0gc2l6ZTsKKyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3Jp
cHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5tX2lzV3JhcHBpbmdNYXAgPSB0
cnVlOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAogU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVt
b3J5KCkKIHsKLSAgICBtdW5tYXAobV9kYXRhLCBtX3NpemUpOwotICAgIGNsb3NlV2l0aFJldHJ5
KG1fZmlsZURlc2NyaXB0b3IpOworICAgIGlmICghbV9pc1dyYXBwaW5nTWFwKSB7CisgICAgICAg
IG11bm1hcChtX2RhdGEsIG1fc2l6ZSk7CisgICAgICAgIGNsb3NlV2l0aFJldHJ5KG1fZmlsZURl
c2NyaXB0b3IpOworICAgIH0KIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShI
YW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVh
YmxlUmVzb3VyY2UuY3BwCmluZGV4IDgzZmZhNzAuLjZjZmM4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcApAQCAtNTcsNiArNTcsNyBAQCBib29sIFNo
YXJlYWJsZVJlc291cmNlOjpIYW5kbGU6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgSGFuZGxlJiBoYQogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgVVNFKENGKQogc3Rh
dGljIHZvaWQgc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKHZvaWQgKnB0ciwgdm9pZCAqaW5m
bykKIHsKICAgICAoc3RhdGljX2Nhc3Q8U2hhcmVhYmxlUmVzb3VyY2UqPihpbmZvKSktPmRlcmVm
KCk7IC8vIEJhbGFuY2VkIGJ5IHJlZigpIGluIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxv
Y2F0b3IoKQpAQCAtNjQsOCArNjUsNiBAQCBzdGF0aWMgdm9pZCBzaGFyZWFibGVSZXNvdXJjZURl
YWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQogICAgIAogc3RhdGljIENGQWxsb2NhdG9y
UmVmIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IoU2hhcmVhYmxlUmVzb3VyY2Uq
IHJlc291cmNlKQogewotICAgIHJlc291cmNlLT5yZWYoKTsgLy8gQmFsYW5jZWQgYnkgZGVyZWYg
aW4gc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKCkKLQogICAgIENGQWxsb2NhdG9yQ29udGV4
dCBjb250ZXh0ID0geyAwLAogICAgICAgICByZXNvdXJjZSwKICAgICAgICAgTlVMTCwgLy8gcmV0
YWluCkBAIC03OSwyNCArNzgsMzUgQEAgc3RhdGljIENGQWxsb2NhdG9yUmVmIGNyZWF0ZVNoYXJl
YWJsZVJlc291cmNlRGVhbGxvY2F0b3IoU2hhcmVhYmxlUmVzb3VyY2UqIHJlc28KIAogICAgIHJl
dHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmY29udGV4dCk7CiB9
CisjZW5kaWYKIAotUmV0YWluUHRyPENGRGF0YVJlZj4gU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRs
ZTo6dHJ5V3JhcEluQ0ZEYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFy
ZWFibGVSZXNvdXJjZTo6c2hhcmVkQnVmZmVyKCkKK3sKKyAgICByZWYoKTsgLy8gQmFsYW5jZWQg
YnkgZGVyZWYgd2hlbiBTaGFyZWRCdWZmZXIgaXMgZGVhbGxvY2F0ZWQuCisKKyNpZiBVU0UoQ0Yp
CisgICAgUmV0YWluUHRyPENGQWxsb2NhdG9yUmVmPiBkZWFsbG9jYXRvciA9IGFkb3B0Q0YoY3Jl
YXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcih0aGlzKSk7CisgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEoKSks
IHN0YXRpY19jYXN0PENGSW5kZXg+KHNpemUoKSksIGRlYWxsb2NhdG9yLmdldCgpKSk7CisgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShjZkRhdGEuZ2V0KCkpOworI2VsaWYgVVNF
KFNPVVApCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcFNvdXBCdWZmZXIoc291cF9idWZm
ZXJfbmV3X3dpdGhfb3duZXIoZGF0YSgpLCBzaXplKCksIHRoaXMsIFtdKHZvaWQqIGRhdGEpIHsg
c3RhdGljX2Nhc3Q8U2hhcmVhYmxlUmVzb3VyY2UqPihkYXRhKS0+ZGVyZWYoKTsgfSkpOworI2Vs
c2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRp
ZgorfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRs
ZTo6dHJ5V3JhcEluU2hhcmVkQnVmZmVyKCkgY29uc3QKIHsKICAgICBSZWZQdHI8U2hhcmVhYmxl
UmVzb3VyY2U+IHJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZSgqdGhpcyk7CiAg
ICAgaWYgKCFyZXNvdXJjZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWNyZWF0
ZSBTaGFyZWFibGVSZXNvdXJjZSBmcm9tIGhhbmRsZS4iKTsKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFJldGFpblB0cjxDRkFsbG9jYXRv
clJlZj4gZGVhbGxvY2F0b3IgPSBhZG9wdENGKGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxv
Y2F0b3IocmVzb3VyY2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGVX
aXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVSW50OCo+KHJlc291cmNlLT5kYXRhKCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4PihyZXNvdXJj
ZS0+c2l6ZSgpKSwgZGVhbGxvY2F0b3IuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzb3VyY2UtPnNo
YXJlZEJ1ZmZlcigpOwogfQogCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVhYmxlUmVz
b3VyY2U6OkhhbmRsZTo6dHJ5V3JhcEluU2hhcmVkQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKHRyeVdyYXBJbkNGRGF0YSgpLmdldCgpKTsKLX0K
LSAgICAKIFBhc3NSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IFNoYXJlYWJsZVJlc291cmNlOjpj
cmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBzaXplKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxl
UmVzb3VyY2Uoc2hhcmVkTWVtb3J5LCBvZmZzZXQsIHNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1NoYXJlYWJsZVJlc291cmNlLmgKaW5kZXggZjg3MzJmMy4uNmYyOTQ0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmgKQEAgLTU2LDkgKzU2LDYgQEAgcHVi
bGljOgogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0Owog
ICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBIYW5kbGUm
KTsKIAotI2lmIFVTRShDRikKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdHJ5V3JhcElu
Q0ZEYXRhKCkgY29uc3Q7Ci0jZW5kaWYKICAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+IHRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToK
QEAgLTg2LDYgKzgzLDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICBTaGFyZWFibGVS
ZXNvdXJjZShQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgc2l6ZSk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1
ZmZlcigpOwogCiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1vcnk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDJQcmVmaXguaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDJQcmVmaXguaAppbmRleCBkNTQwYjg5Li4xNTg0MjU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0MlBy
ZWZpeC5oCkBAIC01OCw2ICs1OCw3IEBACiAKICNpZiBQTEFURk9STShHVEspCiAjZGVmaW5lIEVO
QUJMRV9ORVRXT1JLX1BST0NFU1MgMQorI2RlZmluZSBFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNF
IDEKICNlbmRpZgogCiAvKiBXaGVuIEMrKyBleGNlcHRpb25zIGFyZSBkaXNhYmxlZCwgdGhlIEMr
KyBsaWJyYXJ5IGRlZmluZXMgfHRyeXwgYW5kIHxjYXRjaHwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253310</attachid>
            <date>2015-05-18 01:38:07 -0700</date>
            <delta_ts>2015-05-19 08:37:02 -0700</delta_ts>
            <desc>Try to fix IOS build</desc>
            <filename>wk2-shareable-resource-soup.diff</filename>
            <type>text/plain</type>
            <size>18615</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YzQ3OTVlLi4wNzQwMjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTUtMDUtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBJbXBsZW1lbnQgU2hhcmVhYmxlUmVz
b3VyY2UgZm9yIFNvdXAgYW5kIGVuYWJsZSBpdCBmb3IgR1RLIHBsYXRmb3JtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzb3VwIGltcGxlbWVu
dGF0aW9uIG9mIFNoYXJlZEJ1ZmZlcjo6dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVm
ZmVyKCkuCisKKyAgICAgICAgQ292ZXJlZCBieSBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUv
IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDogRGVm
aW5lCisgICAgICAgIENhY2hlZFJlc291cmNlOjp0cnlSZXBsYWNlRW5jb2RlZERhdGEoKSBhbHNv
IGZvciBTb3VwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1C
dWZmZXIpOgorCiAyMDE1LTA1LTE3ICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEFkZCBzY3JvbGxiYXIgd2lkdGgg
aW4gaW50cmluc2ljIGxvZ2ljYWwgd2lkdGhzIGNvbXB1dGF0aW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCAyZGVkNWVmLi44ODhmZmMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAK
QEAgLTc3Myw3ICs3NzMsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpDYWxsYmFjazo6dGltZXJG
aXJlZCgpCiAgICAgbV9yZXNvdXJjZS5kaWRBZGRDbGllbnQoJm1fY2xpZW50KTsKIH0KIAotI2lm
IFVTRShGT1VOREFUSU9OKQorI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKIAogdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjZUVuY29kZWREYXRhKFNoYXJlZEJ1ZmZlciYgbmV3
QnVmZmVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aAppbmRleCAwMWE1ZDg4Li5jMjgyMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuaApAQCAtMjUyLDcgKzI1Miw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgYm9vbCBjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSNpZiBVU0UoRk9VTkRBVElPTikKKyNpZiBVU0UoRk9VTkRBVElPTikgfHwg
VVNFKFNPVVApCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlSZXBsYWNlRW5jb2RlZERhdGEo
U2hhcmVkQnVmZmVyJik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc291cC9TaGFyZWRCdWZmZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NvdXAvU2hhcmVkQnVmZmVyU291cC5jcHAKaW5kZXggMDZiM2FlYy4uY2JkYjMzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc291cC9TaGFyZWRCdWZmZXJTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zb3VwL1NoYXJlZEJ1ZmZlclNvdXAuY3BwCkBA
IC03OCw2ICs3OCwxNiBAQCBib29sIFNoYXJlZEJ1ZmZlcjo6bWF5YmVBcHBlbmRQbGF0Zm9ybURh
dGEoU2hhcmVkQnVmZmVyKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgU2hhcmVkQnVm
ZmVyOjp0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1CdWZmZXIoU2hhcmVkQnVmZmVyJiBu
ZXdDb250ZW50cykKK3sKKyAgICBpZiAoIW5ld0NvbnRlbnRzLmhhc1BsYXRmb3JtRGF0YSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjbGVhcigpOworICAgIC8vIEZJWE1FOiBVc2UgR1JlZlB0
ciBpbnN0ZWFkIG9mIEdVbmlxdWVQdHIgZm9yIHRoZSBTb3VwQnVmZmVyLgorICAgIG1fc291cEJ1
ZmZlci5zd2FwKG5ld0NvbnRlbnRzLm1fc291cEJ1ZmZlcik7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjVmODUwYy4uN2I4NjMyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE1LTA1LTE4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gTmV0d29yayBDYWNoZTogSW1w
bGVtZW50IFNoYXJlYWJsZVJlc291cmNlIGZvciBTb3VwIGFuZCBlbmFibGUgaXQgZm9yIEdUSyBw
bGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0MzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SXQgaW1wcm92ZXMgdGhlIG5ldHdvcmsgY2FjaGUgcGVyZm9ybWFuY2UsIGJ5IG1tYXBpbmcgYmln
CisgICAgICAgIHJlc291cmNlcyBhbmQgc2VuZGluZyBvbmx5IHRoZSBmaWxlIGRlc2NyaXB0b3Ig
dG8gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBmaWxlIGRh
dGEuIEl0IG5lZWRzIHNvbWUgY2hhbmdlcyBpbgorICAgICAgICBjcm9zcy1wbGF0Zm9ybSBjb2Rl
LCBiZWNhdXNlIHdlIGNhbid0IHVzZSB0aGUgc2FtZSBhcHByb2FjaCBhcworICAgICAgICBtYWMg
KGl0IHVzZXMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBub3QgYXZhaWxhYmxl
IGluCisgICAgICAgIG90aGVyIHBsYXRmb3JtcykuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpzdG9yZSk6IFVzZQorICAgICAgICBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnko
KSB0byBjcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgdXNlZCBieQorICAgICAgICB0aGUgU2hhcmVh
YmxlUmVzb3VyY2UuIEFsc28gYWRkIGFuIEFTU0VSVCBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZQor
ICAgICAgICBzaGFyZWFibGUgcmVzb3VyY2UgY3JlYXRlZCBpcyBub3QgbnVsbHB0ciwgYmVjYXVz
ZSB0aGUKKyAgICAgICAgU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZSgpIHRoYXQgcmVjZWl2ZXMg
YSBzaGFyZWQgbWVtb3J5IHNob3VsZAorICAgICAgICBuZXZlciByZXR1cm4gbnVsbHB0ci4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9y
eSk6IENyZWF0ZSBhCisgICAgICAgIFNoYXJlZE1lbW9yeSBvYmplY3QgdG8gd3JhcCB0aGUgbWFw
cGVkIGZpbGUsIGJ1dCBrZWVwaW5nIHRoZSBvd25lcnNoaXAuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVudHJ5Ojppbml0aWFsaXplU2hhcmVhYmxlUmVzb3VyY2VIYW5kbGVGcm9tU3Rv
cmFnZVJlY29yZCk6CisgICAgICAgIFVzZSBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSB0
byBjcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgdXNlZAorICAgICAgICBieXRoZSBTaGFyZWFibGVS
ZXNvdXJjZS4gQWxzbyBhZGQgYW4gQVNTRVJUIGluc3RlYWQgb2YgY2hlY2tpbmcKKyAgICAgICAg
dGhlIHNoYXJlYWJsZSByZXNvdXJjZSBjcmVhdGVkIGlzIG5vdCBudWxscHRyLCBiZWNhdXNlIHRo
ZQorICAgICAgICBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCkgdGhhdCByZWNlaXZlcyBhIHNo
YXJlZCBtZW1vcnkgc2hvdWxkCisgICAgICAgIG5ldmVyIHJldHVybiBudWxscHRyLgorICAgICAg
ICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL3VuaXgvU2hh
cmVkTWVtb3J5VW5peC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6bWFwKTog
VXNlIHdyYXBNYXAoKSBhbmQgaW5pdGlhbGl6ZQorICAgICAgICBtX2lzV3JhcHBpbmdNYXAgdG8g
ZmFsc2UuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6d3JhcE1hcCk6IENyZWF0ZSBh
IFNoYXJlZE1lbW9yeSBvYmplY3QgZm9yCisgICAgICAgIHRoZSBnaXZlbiBtYXAsIHdpdGhvdXQg
dGFraW5nIGl0cyBvd25lcnNoaXAuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNo
YXJlZE1lbW9yeSk6IERvIG5vdCB1bm1hcCBhbmQgY2xvc2UgdGhlCisgICAgICAgIGZpbGUgZGVz
Y3JpcHRvciBpZiBtX2lzV3JhcHBpbmdNYXAgaXMgdHJ1ZS4KKyAgICAgICAgKiBTaGFyZWQvU2hh
cmVhYmxlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFibGVSZXNv
dXJjZURlYWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlUmVzb3VyY2U6OnNo
YXJlZEJ1ZmZlcik6IENyZWF0ZSBhIFNoYXJlZEJ1ZmZlcgorICAgICAgICB3cmFwcGluZyB0aGUg
U2hhcmVhYmxlUmVzb3VyY2UgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlUmVzb3Vy
Y2U6OkhhbmRsZTo6dHJ5V3JhcEluU2hhcmVkQnVmZmVyKTogQ3JlYXRlCisgICAgICAgIGEgU2hh
cmVhYmxlUmVzb3VyY2UgZm9yIHRoZSBoYW5kbGUgYW5kIGNyZWF0ZSBhIFNoYXJlZEJ1ZmZlcgor
ICAgICAgICB3cmFwcGluZyBpdC4KKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2Uu
aDoKKyAgICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6IEVuYWJsZSBFTkFCTEVfU0hBUkVBQkxFX1JF
U09VUkNFIGZvciBHVEsuCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNvdXJjZSk6IEdldCB0aGUgQ0ZEYXRhCisgICAgICAgIGZyb20gdGhlIFNoYXJlZEJ1ZmZl
ciBmb3IgUXVpY2tMb29rIGluc3RlYWQgb2Ygd3JhcHBpbmcgdGhlIGhhbmRsZSBhZ2Fpbi4KKwog
MjAxNS0wNS0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgTmV0d29yayBDYWNoZTogTWFrZSBEYXRhOjphZG9wdE1hcCB0YWtlIHRoZSBvd25l
cnNoaXAgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggMzZkMzFlZS4uMjQ5OTQx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCkBAIC00MTQsMTEgKzQxNCwxMCBAQCB2b2lkIENhY2hlOjpzdG9yZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29y
ZQogICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbY29tcGxldGlvbkhhbmRsZXJdKGNvbnN0
IERhdGEmIGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJvZHkgbWFwcGVkQm9keTsKICNpZiBF
TkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQotICAgICAgICBpZiAoYm9keURhdGEuaXNNYXAoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVk
TWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4oYm9keURhdGEuZGF0YSgpKSwgYm9k
eURhdGEuc2l6ZSgpLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICAg
ICAgICAgIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2UgPSBzaGFyZWRNZW1vcnkgPyBTaGFy
ZWFibGVSZXNvdXJjZTo6Y3JlYXRlKFdURjo6bW92ZShzaGFyZWRNZW1vcnkpLCAwLCBib2R5RGF0
YS5zaXplKCkpIDogbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChtYXBwZWRCb2R5LnNoYXJlYWJs
ZVJlc291cmNlKQotICAgICAgICAgICAgICAgIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2Ut
PmNyZWF0ZUhhbmRsZShtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlKTsKKyAgICAg
ICAgaWYgKFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IGJvZHlEYXRhLnRyeUNy
ZWF0ZVNoYXJlZE1lbW9yeSgpKSB7CisgICAgICAgICAgICBtYXBwZWRCb2R5LnNoYXJlYWJsZVJl
c291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShXVEY6Om1vdmUoc2hhcmVkTWVtb3J5
KSwgMCwgYm9keURhdGEuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtYXBwZWRCb2R5LnNo
YXJlYWJsZVJlc291cmNlKTsKKyAgICAgICAgICAgIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3Vy
Y2UtPmNyZWF0ZUhhbmRsZShtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlKTsKICAg
ICAgICAgfQogI2VuZGlmCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG1hcHBlZEJvZHkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCmluZGV4IDhjNzRhZTMuLjIyNTU4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKQEAgLTM5LDYg
KzM5LDkgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVkTWVt
b3J5OworCiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpA
QCAtMTE5LDYgKzEyMiw3IEBAIHB1YmxpYzoKICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29u
c3Q7CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBib29s
IGlzTWFwKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcDsgfQorICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0OwogCiAgICAgRGF0YSBzdWJyYW5nZShz
aXplX3Qgb2Zmc2V0LCBzaXplX3QpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5k
ZXggZThlZGNiOS4uMDgwYzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKKyNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKICNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTEwMyw3ICsxMDQsMTMgQEAgRGF0YSBE
YXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAgcmV0dXJu
IHsgYm9keU1hcCwgRGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAKK1JlZlB0cjxTaGFyZWRNZW1v
cnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTnVs
bCgpIHx8ICFpc01hcCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIHJldHVybiBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdF9jYXN0PHVpbnQ4X3QqPihkYXRhKCkpLCBtX3NpemUs
IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworfQogCiB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAKaW5kZXggYWE2ZDNiZi4uYTA4YTA2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFT
b3VwLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAK
KyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUg
PHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTEyNyw3ICsxMjgsMTMgQEAg
RGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAg
cmV0dXJuIHsgV1RGOjptb3ZlKGJ1ZmZlciksIGZkIH07CiB9CiAKK1JlZlB0cjxTaGFyZWRNZW1v
cnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTnVs
bCgpIHx8ICFpc01hcCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIHJldHVybiBT
aGFyZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBt
X2J1ZmZlci0+bGVuZ3RoLCBtX2ZpbGVEZXNjcmlwdG9yKTsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
TmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAppbmRl
eCA3MzUwYTViLi4yMDU5MTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCkBAIC0xMDQsMTIgKzEwNCwx
MyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKGNv
bnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZQogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VS
Q0UpCiB2b2lkIEVudHJ5Ojppbml0aWFsaXplU2hhcmVhYmxlUmVzb3VyY2VIYW5kbGVGcm9tU3Rv
cmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZGF0YSA9IG1fc291cmNlU3RvcmFnZVJl
Y29yZC5ib2R5LmRhdGEoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNlU3RvcmFnZVJlY29y
ZC5ib2R5LnNpemUoKTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBt
X3NvdXJjZVN0b3JhZ2VSZWNvcmQuYm9keS5pc01hcCgpID8gU2hhcmVkTWVtb3J5OjpjcmVhdGUo
Y29uc3RfY2FzdDx1aW50OF90Kj4oZGF0YSksIHNpemUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlv
bjo6UmVhZE9ubHkpIDogbnVsbHB0cjsKLSAgICBSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHNo
YXJlYWJsZVJlc291cmNlID0gc2hhcmVkTWVtb3J5ID8gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0
ZShzaGFyZWRNZW1vcnkucmVsZWFzZSgpLCAwLCBzaXplKSA6IG51bGxwdHI7Ci0gICAgaWYgKHNo
YXJlYWJsZVJlc291cmNlKQotICAgICAgICBzaGFyZWFibGVSZXNvdXJjZS0+Y3JlYXRlSGFuZGxl
KG1fc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUpOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LnRyeUNyZWF0ZVNoYXJlZE1l
bW9yeSgpOworICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHNoYXJlYWJsZVJlc291cmNlID0gU2hhcmVhYmxlUmVz
b3VyY2U6OmNyZWF0ZShzaGFyZWRNZW1vcnkucmVsZWFzZSgpLCAwLCBtX3NvdXJjZVN0b3JhZ2VS
ZWNvcmQuYm9keS5zaXplKCkpOworICAgIEFTU0VSVChzaGFyZWFibGVSZXNvdXJjZSk7CisgICAg
c2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShtX3NoYXJlYWJsZVJlc291cmNlSGFuZGxl
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFy
ZWRNZW1vcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCmluZGV4
IGU0OWZlY2UuLjNiNTAwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1No
YXJlZE1lbW9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5o
CkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gYWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3Jl
YXRlKHZvaWQqLCBzaXplX3QsIFByb3RlY3Rpb24pOwogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBtYXAoY29uc3QgSGFuZGxlJiwgUHJvdGVjdGlvbik7CisgICAgc3RhdGljIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IHdyYXBNYXAodm9pZCosIHNpemVfdCwgaW50IGZpbGVEZXNjcmlwdG9y
KTsKIAogICAgIH5TaGFyZWRNZW1vcnkoKTsKIApAQCAtMTEzLDYgKzExNCw3IEBAIHByaXZhdGU6
CiAgICAgbWFjaF9wb3J0X3QgbV9wb3J0OwogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMp
CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CisgICAgYm9vbCBtX2lzV3JhcHBpbmdNYXAgeyBm
YWxzZSB9OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5p
eC9TaGFyZWRNZW1vcnlVbml4LmNwcAppbmRleCA4MDA5ZDViLi5kYWUzNTVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKQEAgLTE1
NiwxNyArMTU2LDI3IEBAIFJlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6bWFwKGNv
bnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3RpCiAgICAgaWYgKGRhdGEgPT0g
TUFQX0ZBSUxFRCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBpbnN0YW5jZSA9IHdyYXBNYXAoZGF0YSwgaGFuZGxlLm1fYXR0YWNobWVudC5zaXpl
KCksIGhhbmRsZS5tX2F0dGFjaG1lbnQucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkpOworICAgIGlu
c3RhbmNlLT5tX2lzV3JhcHBpbmdNYXAgPSBmYWxzZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9
CisKK1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6d3JhcE1hcCh2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSwgaW50IGZpbGVEZXNjcmlwdG9yKQorewogICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKICAgICBpbnN0
YW5jZS0+bV9kYXRhID0gZGF0YTsKLSAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGhh
bmRsZS5tX2F0dGFjaG1lbnQucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCk7Ci0gICAgaW5zdGFuY2Ut
Pm1fc2l6ZSA9IGhhbmRsZS5tX2F0dGFjaG1lbnQuc2l6ZSgpOworICAgIGluc3RhbmNlLT5tX3Np
emUgPSBzaXplOworICAgIGluc3RhbmNlLT5tX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0
b3I7CisgICAgaW5zdGFuY2UtPm1faXNXcmFwcGluZ01hcCA9IHRydWU7CiAgICAgcmV0dXJuIGlu
c3RhbmNlOwogfQogCiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQogewotICAgIG11bm1h
cChtX2RhdGEsIG1fc2l6ZSk7Ci0gICAgY2xvc2VXaXRoUmV0cnkobV9maWxlRGVzY3JpcHRvcik7
CisgICAgaWYgKCFtX2lzV3JhcHBpbmdNYXApIHsKKyAgICAgICAgbXVubWFwKG1fZGF0YSwgbV9z
aXplKTsKKyAgICAgICAgY2xvc2VXaXRoUmV0cnkobV9maWxlRGVzY3JpcHRvcik7CisgICAgfQog
fQogCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90
ZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291
cmNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKaW5k
ZXggODNmZmE3MC4uNmNmYzhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1No
YXJlYWJsZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxl
UmVzb3VyY2UuY3BwCkBAIC01Nyw2ICs1Nyw3IEBAIGJvb2wgU2hhcmVhYmxlUmVzb3VyY2U6Okhh
bmRsZTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBIYW5kbGUmIGhhCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBVU0UoQ0YpCiBzdGF0aWMgdm9pZCBzaGFyZWFibGVS
ZXNvdXJjZURlYWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQogewogICAgIChzdGF0aWNf
Y2FzdDxTaGFyZWFibGVSZXNvdXJjZSo+KGluZm8pKS0+ZGVyZWYoKTsgLy8gQmFsYW5jZWQgYnkg
cmVmKCkgaW4gY3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcigpCkBAIC02NCw4ICs2
NSw2IEBAIHN0YXRpYyB2b2lkIHNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0ZSh2b2lkICpwdHIs
IHZvaWQgKmluZm8pCiAgICAgCiBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlU2hhcmVhYmxl
UmVzb3VyY2VEZWFsbG9jYXRvcihTaGFyZWFibGVSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAg
cmVzb3VyY2UtPnJlZigpOyAvLyBCYWxhbmNlZCBieSBkZXJlZiBpbiBzaGFyZWFibGVSZXNvdXJj
ZURlYWxsb2NhdGUoKQotCiAgICAgQ0ZBbGxvY2F0b3JDb250ZXh0IGNvbnRleHQgPSB7IDAsCiAg
ICAgICAgIHJlc291cmNlLAogICAgICAgICBOVUxMLCAvLyByZXRhaW4KQEAgLTc5LDI0ICs3OCwz
NSBAQCBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9j
YXRvcihTaGFyZWFibGVSZXNvdXJjZSogcmVzbwogCiAgICAgcmV0dXJuIENGQWxsb2NhdG9yQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsICZjb250ZXh0KTsKIH0KKyNlbmRpZgogCi1SZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlXcmFwSW5DRkRhdGEo
KSBjb25zdAorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlYWJsZVJlc291cmNlOjpzaGFy
ZWRCdWZmZXIoKQoreworICAgIHJlZigpOyAvLyBCYWxhbmNlZCBieSBkZXJlZiB3aGVuIFNoYXJl
ZEJ1ZmZlciBpcyBkZWFsbG9jYXRlZC4KKworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZB
bGxvY2F0b3JSZWY+IGRlYWxsb2NhdG9yID0gYWRvcHRDRihjcmVhdGVTaGFyZWFibGVSZXNvdXJj
ZURlYWxsb2NhdG9yKHRoaXMpKTsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSgpKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRl
eD4oc2l6ZSgpKSwgZGVhbGxvY2F0b3IuZ2V0KCkpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
Ojp3cmFwQ0ZEYXRhKGNmRGF0YS5nZXQoKSk7CisjZWxpZiBVU0UoU09VUCkKKyAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjp3cmFwU291cEJ1ZmZlcihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihk
YXRhKCksIHNpemUoKSwgdGhpcywgW10odm9pZCogZGF0YSkgeyBzdGF0aWNfY2FzdDxTaGFyZWFi
bGVSZXNvdXJjZSo+KGRhdGEpLT5kZXJlZigpOyB9KSk7CisjZWxzZQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlXcmFwSW5TaGFyZWRC
dWZmZXIoKSBjb25zdAogewogICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gcmVzb3VyY2Ug
PSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCp0aGlzKTsKICAgICBpZiAoIXJlc291cmNlKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlY3JlYXRlIFNoYXJlYWJsZVJlc291cmNl
IGZyb20gaGFuZGxlLiIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgUmV0YWluUHRyPENGQWxsb2NhdG9yUmVmPiBkZWFsbG9jYXRvciA9
IGFkb3B0Q0YoY3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihyZXNvdXJjZS5nZXQo
KSkpOwotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4ocmVzb3VyY2Ut
PmRhdGEoKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KHJlc291cmNlLT5zaXplKCkpLCBkZWFsbG9j
YXRvci5nZXQoKSkpOworICAgIHJldHVybiByZXNvdXJjZS0+c2hhcmVkQnVmZmVyKCk7CiB9CiAK
LVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlX
cmFwSW5TaGFyZWRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6Ondy
YXBDRkRhdGEodHJ5V3JhcEluQ0ZEYXRhKCkuZ2V0KCkpOwotfQotICAgIAogUGFzc1JlZlB0cjxT
aGFyZWFibGVSZXNvdXJjZT4gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHNpemUp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVSZXNvdXJjZShzaGFyZWRNZW1v
cnksIG9mZnNldCwgc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1No
YXJlYWJsZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3Vy
Y2UuaAppbmRleCBmODczMmYzLi42ZjI5NDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hh
cmVhYmxlUmVzb3VyY2UuaApAQCAtNTYsOSArNTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQg
ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29s
IGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIEhhbmRsZSYpOwogCi0jaWYgVVNFKENGKQot
ICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0cnlXcmFwSW5DRkRhdGEoKSBjb25zdDsKLSNl
bmRpZgogICAgICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gdHJ5V3JhcElu
U2hhcmVkQnVmZmVyKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgpAQCAtODYsNiArODMsNyBAQCBw
dWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIFNoYXJlYWJsZVJlc291cmNlKFBhc3NSZWZQdHI8
U2hhcmVkTWVtb3J5PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKTsKKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyKCk7CiAKICAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0MlByZWZpeC5oIGIvU291cmNlL1dlYktpdDIvV2ViS2l0MlByZWZpeC5oCmlu
ZGV4IGQ1NDBiODkuLjE1ODQyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDJQ
cmVmaXguaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgKQEAgLTU4LDYgKzU4
LDcgQEAKIAogI2lmIFBMQVRGT1JNKEdUSykKICNkZWZpbmUgRU5BQkxFX05FVFdPUktfUFJPQ0VT
UyAxCisjZGVmaW5lIEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UgMQogI2VuZGlmCiAKIC8qIFdo
ZW4gQysrIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkLCB0aGUgQysrIGxpYnJhcnkgZGVmaW5lcyB8
dHJ5fCBhbmQgfGNhdGNofApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggODlkMTc4Yi4uODNkNmNhOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkZXIuY3BwCkBAIC0xODAsMTEgKzE4MCwxMiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZGVy
OjpkaWRSZWNlaXZlUmVzb3VyY2UoY29uc3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFu
ZAogewogICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlUmVzb3VyY2UgZm9yICclcyciLCBtX2NvcmVMb2FkZXItPnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaGFu
ZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpOworCiAjaWYgVVNFKFFVSUNLX0xPT0spCiAgICAg
aWYgKFF1aWNrTG9va0hhbmRsZSogcXVpY2tMb29rSGFuZGxlID0gbV9jb3JlTG9hZGVyLT5kb2N1
bWVudExvYWRlcigpLT5xdWlja0xvb2tIYW5kbGUoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBjZkJ1ZmZlciA9IGhhbmRsZS50cnlXcmFwSW5DRkRhdGEoKTsKLSAgICAgICAgaWYg
KGNmQnVmZmVyKSB7Ci0gICAgICAgICAgICBpZiAocXVpY2tMb29rSGFuZGxlLT5kaWRSZWNlaXZl
RGF0YShjZkJ1ZmZlci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAg
ICAgaWYgKHF1aWNrTG9va0hhbmRsZS0+ZGlkUmVjZWl2ZURhdGEoYnVmZmVyLT5leGlzdGluZ0NG
RGF0YSgpKSkgewogICAgICAgICAgICAgICAgIHF1aWNrTG9va0hhbmRsZS0+ZGlkRmluaXNoTG9h
ZGluZygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTE5Myw3
ICsxOTQsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzb3VyY2UoY29u
c3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZAogICAgIH0KICNlbmRpZgogCi0gICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZl
cigpOwogICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNy
ZWF0ZSBidWZmZXIgZnJvbSBTaGFyZWFibGVSZXNvdXJjZSBzZW50IGZyb20gdGhlIG5ldHdvcmsg
cHJvY2Vzcy4iKTsKICAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRGYWlsKGludGVybmFsRXJyb3Io
bV9jb3JlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKTsK
</data>
<flag name="review"
          id="278191"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>