<?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>86356</bug_id>
          
          <creation_ts>2012-05-14 04:34:24 -0700</creation_ts>
          <short_desc>[GTK] Add API to get plugins to WebKit2 GTK+</short_desc>
          <delta_ts>2012-05-16 11:43:27 -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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>mrobinson</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>622827</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-14 04:34:24 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622832</commentid>
    <comment_count>1</comment_count>
      <attachid>141692</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-14 04:43:00 -0700</bug_when>
    <thetext>Created attachment 141692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622835</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-14 04:44:48 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624342</commentid>
    <comment_count>3</comment_count>
      <attachid>141692</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-15 11:51:44 -0700</bug_when>
    <thetext>Comment on attachment 141692
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:273
&gt; +static void webkitWebContextGetPluginThread(GSimpleAsyncResult* result, GObject* object,  GCancellable*)

Nit: extra space before GCancellable.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:299
&gt; +    g_simple_async_result_run_in_thread(result.get(), webkitWebContextGetPluginThread, G_PRIORITY_DEFAULT, cancellable);

Do you mind explaining why you call pluginInfoStore().plugins() in a thread? Why not simply make this method synchronous and call pluginInfoStore().plugins() right here?

I worry because I&apos;m not sure that the WebContext is thread-safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625031</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-15 23:55:29 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 141692 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141692&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:273
&gt; &gt; +static void webkitWebContextGetPluginThread(GSimpleAsyncResult* result, GObject* object,  GCancellable*)
&gt; 
&gt; Nit: extra space before GCancellable.

oh, ok

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:299
&gt; &gt; +    g_simple_async_result_run_in_thread(result.get(), webkitWebContextGetPluginThread, G_PRIORITY_DEFAULT, cancellable);
&gt; 
&gt; Do you mind explaining why you call pluginInfoStore().plugins() in a thread? Why not simply make this method synchronous and call pluginInfoStore().plugins() right here?

Because it&apos;s blocking and slow.

&gt; I worry because I&apos;m not sure that the WebContext is thread-safe.

pluginInfoStore().plugins() is thread-safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625518</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-16 09:07:51 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; pluginInfoStore().plugins() is thread-safe.

I don&apos;t see any Mutexes in the PluginInfoStore and it looks like other methods call loadPluginsIfNecessary. I think I just need confirmation from the author of PluginInfoStore::plugins() is thread-safe to review this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625572</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-16 10:01:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; 
&gt; &gt; pluginInfoStore().plugins() is thread-safe.
&gt; 
&gt; I don&apos;t see any Mutexes in the PluginInfoStore and it looks like other methods call loadPluginsIfNecessary. I think I just need confirmation from the author of PluginInfoStore::plugins() is thread-safe to review this patch.

https://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp#L114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625578</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-16 10:08:11 -0700</bug_when>
    <thetext>Note also, that the WebContext is calling PluginInfoStore::plugins() from a thread to handle the GetPlugins message</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625591</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-16 10:16:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Note also, that the WebContext is calling PluginInfoStore::plugins() from a thread to handle the GetPlugins message

The change (http://trac.webkit.org/changeset/116796) to make this work across threads was made 4 days ago and I&apos;m not following the code right now. Instead of just saying &quot;It&apos;s thread safe&quot; perhaps you could have given me a bit more information to help me finish reviewing your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625601</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-16 10:23:48 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Note also, that the WebContext is calling PluginInfoStore::plugins() from a thread to handle the GetPlugins message
&gt; 
&gt; The change (http://trac.webkit.org/changeset/116796) to make this work across threads was made 4 days ago and I&apos;m not following the code right now. Instead of just saying &quot;It&apos;s thread safe&quot; perhaps you could have given me a bit more information to help me finish reviewing your patch.

I posted this patch 2 days ago, when I wrote the patch the code was already thread-safe and I dind&apos;t know it had been added just 2 days ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625606</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-16 10:28:51 -0700</bug_when>
    <thetext>Committed r117305: &lt;http://trac.webkit.org/changeset/117305&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625615</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-16 10:36:48 -0700</bug_when>
    <thetext>Yeah, this is kool. Though note that I&apos;ve filed bug 86648 to solidify the thread-safety of it all. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625623</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-16 10:41:53 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Yeah, this is kool. Though note that I&apos;ve filed bug 86648 to solidify the thread-safety of it all. :)

Okay. Thanks for confirming. Carlos, sorry for my tone above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625668</commentid>
    <comment_count>13</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-05-16 11:23:34 -0700</bug_when>
    <thetext>Bonus points for making this API asynchronous. Ideally we&apos;d like to make all access to the plug-in info store happen on a work queue so we don&apos;t need any locking whatsoever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625693</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-16 11:43:27 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Yeah, this is kool. Though note that I&apos;ve filed bug 86648 to solidify the thread-safety of it all. :)
&gt; 
&gt; Okay. Thanks for confirming. Carlos, sorry for my tone above.

No problem! :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141692</attachid>
            <date>2012-05-14 04:43:00 -0700</date>
            <delta_ts>2012-05-16 10:16:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-plugins-api.diff</filename>
            <type>text/plain</type>
            <size>37058</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2NGY4ZmM2Li5hZWJjMTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTItMDUtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gZ2V0IHBsdWdpbnMgdG8gV2ViS2l0MiBHVEsr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjM1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoX1dl
YktpdE1pbWVJbmZvKTogQm94ZWQgdHlwZSB0byByZXByZXNlbnQgTUlNRSB0eXBlIGluZm9ybWF0
aW9uLgorICAgICAgICAod2Via2l0TWltZUluZm9DcmVhdGUpOiBDZWF0ZSBhIG5ldyBXZWJLaXRN
aW1lSW5mby4KKyAgICAgICAgKHdlYmtpdF9taW1lX2luZm9fcmVmKToKKyAgICAgICAgKHdlYmtp
dF9taW1lX2luZm9fdW5yZWYpOgorICAgICAgICAod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90
eXBlKTogUmV0dXJuIHRoZSBtaW1lIHR5cGUuCisgICAgICAgICh3ZWJraXRfbWltZV9pbmZvX2dl
dF9kZXNjcmlwdGlvbik6IFJldHVybiB0aGUgbWltZSB0eXBlCisgICAgICAgIGRlc2NyaXB0aW9u
LgorICAgICAgICAod2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9ucyk6IFJldHVybiB0aGUg
bGlzdCBvZiBleHRlbnNpb25zCisgICAgICAgIGFzc29jaWF0ZWQgdG8gdGhlIG1pbWUgdHlwZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mby5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mb1ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UGx1Z2luLmNwcDogQWRkZWQuCisg
ICAgICAgICh3ZWJraXRQbHVnaW5GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfcGx1Z2luX2lu
aXQpOgorICAgICAgICAod2Via2l0X3BsdWdpbl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtp
dFBsdWdpbkNyZWF0ZSk6IENyZWF0ZSBhIG5ldyBXZWJLaXRQbHVnaW4gZm9yIHRoZSBnaXZlbgor
ICAgICAgICBQbHVnaW5Nb2R1bGVJbmZvLgorICAgICAgICAod2Via2l0X3BsdWdpbl9nZXRfbmFt
ZSk6IFJldHVybiB0aGUgcGx1Z2luIG5hbWUuCisgICAgICAgICh3ZWJraXRfcGx1Z2luX2dldF9k
ZXNjcmlwdGlvbik6IFJldHVybiB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uLgorICAgICAgICAod2Vi
a2l0X3BsdWdpbl9nZXRfcGF0aCk6IFJldHVybiB0aGUgcGF0aCB3aGVyZSB0aGUgcGx1Z2luIGlz
CisgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgKHdlYmtpdF9wbHVnaW5fZ2V0X21pbWVfaW5m
b19saXN0KTogUmV0dXJuIHRoZSBsaXN0IG9mIG1pbWUgdHlwZXMKKyAgICAgICAgaGFuZGxlZCBi
eSB0aGUgcGx1Z2luLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBsdWdpbi5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQbHVnaW5Qcml2YXRl
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNf
ZGlyZWN0b3J5KTogU2V0IGFuCisgICAgICAgIGFkZGl0aW9uYWwgZGlyZWN0b3J5IHRvIGJlIHNj
YW5uZWQgZm9yIHBsdWdpbnMuCisgICAgICAgIChHZXRQbHVnaW5zQXN5bmNEYXRhKTogSGVscGVy
IHN0cnVjdCB1c2VkIHRvIGFzeW5jaHJvbm91c2x5IGdldAorICAgICAgICB0aGUgbGlzdCBvZiBw
bHVnaW5zLgorICAgICAgICAoZ2V0UGx1Z2luc0FzeW5jRGF0YUNyZWF0ZSk6IENyZWF0ZSBhIEdl
dFBsdWdpbnNBc3luY0RhdGEgc3RydWN0LgorICAgICAgICAoZ2V0UGx1Z2luc0FzeW5jRGF0YURl
c3Ryb3kpOiBEZXN0cm95IGEgR2V0UGx1Z2luc0FzeW5jRGF0YQorICAgICAgICBzdHJ1Y3QuCisg
ICAgICAgICh3ZWJraXRXZWJDb250ZXh0R2V0UGx1Z2luVGhyZWFkKTogVGhyZWFkIGJvZHkgdG8g
Z2V0IHRoZSBsaXN0IG9mCisgICAgICAgIHBsdWdpbnMgaW5zdGFsbGVkLgorICAgICAgICAod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zKTogQXN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsaXN0
IG9mCisgICAgICAgIHBsdWdpbnMgaW5zdGFsbGVkLgorICAgICAgICAod2Via2l0X3dlYl9jb250
ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaCk6IEZpbmlzaCBhc3luYyBvcGVyYXRpb24KKyAgICAgICAg
c3RhcnRlZCBieSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnMoKSByZXR1cm5pbmcgYSBs
aXN0IG9mCisgICAgICAgIFdlYktpdFBsdWdpbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uIGZvcgorICAgICAgICBXZWJLaXRQ
bHVnaW4uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rp
b25zLnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay50eXBlczogQWRkIG5ldyB0eXBlcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4
dEdldFBsdWdpbnMpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmg6CisKIDIwMTItMDUtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTT1VQXSBBbGxvdyBzZW5kaW5nIFVSSSBy
ZXF1ZXN0IGRhdGEgaW4gY2h1bmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBk
ODdlMDk4Li43MTU1MWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTk2LDcg
Kzk2LDkgQEAgd2Via2l0Mmd0a19oX2FwaSArPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TWltZUluZm8uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQbHVnaW4uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQb2xpY3lEZWNpc2lvbi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFByaW50T3BlcmF0aW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5oIFwKQEAgLTU4MiwxMSArNTg0LDE3IEBAIHdlYmtpdDJf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TG9hZGVyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdE1pbWVJbmZvLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TWltZUluZm8uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TWltZUluZm9Qcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UGx1Z2luLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UGx1Z2luLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFBsdWdpblByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5RGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mby5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mby5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4MmVkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE1pbWVJbmZvLmNwcApAQCAtMCwwICsx
LDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0TWltZUluZm8uaCIKKworI2luY2x1ZGUgIldlYktp
dE1pbWVJbmZvUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0cnVjdCBfV2ViS2l0TWltZUluZm8gewor
ICAgIF9XZWJLaXRNaW1lSW5mbyhjb25zdCBXZWJDb3JlOjpNaW1lQ2xhc3NJbmZvJiBtaW1lSW5m
bykKKyAgICAgICAgOiBtaW1lSW5mbyhtaW1lSW5mbykKKyAgICB7CisgICAgfQorCisgICAgV2Vi
Q29yZTo6TWltZUNsYXNzSW5mbyBtaW1lSW5mbzsKKyAgICBDU3RyaW5nIG1pbWVUeXBlOworICAg
IENTdHJpbmcgZGVzY3JpcHRpb247CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGV4dGVuc2lvbnM7
CisKKyAgICBpbnQgcmVmZXJlbmNlQ291bnQ7Cit9OworCitHX0RFRklORV9CT1hFRF9UWVBFKFdl
YktpdE1pbWVJbmZvLCB3ZWJraXRfbWltZV9pbmZvLCB3ZWJraXRfbWltZV9pbmZvX3JlZiwgd2Vi
a2l0X21pbWVfaW5mb191bnJlZikKKworV2ViS2l0TWltZUluZm8qIHdlYmtpdE1pbWVJbmZvQ3Jl
YXRlKGNvbnN0IFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8mIG1pbWVJbmZvKQoreworICAgIFdlYktp
dE1pbWVJbmZvKiBpbmZvID0gZ19zbGljZV9uZXcoV2ViS2l0TWltZUluZm8pOworICAgIG5ldyAo
aW5mbykgV2ViS2l0TWltZUluZm8obWltZUluZm8pOworICAgIHJldHVybiBpbmZvOworfQorCisv
KioKKyAqIHdlYmtpdF9taW1lX2luZm9fcmVmOgorICogQGluZm86IGEgI1dlYktpdE1pbWVJbmZv
CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgQGlu
Zm8gYnkgb25lLiBUaGlzCisgKiBmdW5jdGlvbiBpcyBNVC1zYWZlIGFuZCBtYXkgYmUgY2FsbGVk
IGZyb20gYW55IHRocmVhZC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcGFzc2VkIGluICNXZWJLaXRN
aW1lSW5mbworICovCitXZWJLaXRNaW1lSW5mbyogd2Via2l0X21pbWVfaW5mb19yZWYoV2ViS2l0
TWltZUluZm8qIGluZm8pCit7CisgICAgZ19hdG9taWNfaW50X2luYygmaW5mby0+cmVmZXJlbmNl
Q291bnQpOworICAgIHJldHVybiBpbmZvOworfQorCisvKioKKyAqIHdlYmtpdF9taW1lX2luZm9f
dW5yZWY6CisgKiBAaW5mbzogYSAjV2ViS2l0TWltZUluZm8KKyAqCisgKiBBdG9taWNhbGx5IGRl
Y3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAaW5mbyBieSBvbmUuIElmIHRoZQorICog
cmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIDAsIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSAj
V2ViS2l0TWltZUluZm8gaXMKKyAqIHJlbGVhc2VkLiBUaGlzIGZ1bmN0aW9uIGlzIE1ULXNhZmUg
YW5kIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkKKyAqIHRocmVhZC4KKyAqLwordm9pZCB3ZWJraXRf
bWltZV9pbmZvX3VucmVmKFdlYktpdE1pbWVJbmZvKiBpbmZvKQoreworICAgIGlmIChnX2F0b21p
Y19pbnRfZGVjX2FuZF90ZXN0KCZpbmZvLT5yZWZlcmVuY2VDb3VudCkpIHsKKyAgICAgICAgaW5m
by0+fldlYktpdE1pbWVJbmZvKCk7CisgICAgICAgIGdfc2xpY2VfZnJlZShXZWJLaXRNaW1lSW5m
bywgaW5mbyk7CisgICAgfQorfQorCisvKioKKyAqIHdlYmtpdF9taW1lX2luZm9fZ2V0X21pbWVf
dHlwZToKKyAqIEBpbmZvOiBhICNXZWJLaXRNaW1lSW5mbworICoKKyAqIFJldHVybnM6IHRoZSBN
SU1FIHR5cGUgb2YgQGluZm8KKyAqLworY29uc3QgY2hhciogd2Via2l0X21pbWVfaW5mb19nZXRf
bWltZV90eXBlKFdlYktpdE1pbWVJbmZvKiBpbmZvKQoreworICAgIGlmICghaW5mby0+bWltZVR5
cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBpbmZvLT5taW1lVHlwZS5kYXRhKCk7CisKKyAg
ICBpZiAoaW5mby0+bWltZUluZm8udHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaW5mby0+bWltZVR5cGUgPSBpbmZvLT5taW1lSW5mby50eXBlLnV0ZjgoKTsKKyAgICBy
ZXR1cm4gaW5mby0+bWltZVR5cGUuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9taW1lX2lu
Zm9fZ2V0X2Rlc2NyaXB0aW9uOgorICogQGluZm86IGEgI1dlYktpdE1pbWVJbmZvCisgKgorICog
UmV0dXJuczogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNSU1FIHR5cGUgb2YgQGluZm8KKyAqLwor
Y29uc3QgY2hhciogd2Via2l0X21pbWVfaW5mb19nZXRfZGVzY3JpcHRpb24oV2ViS2l0TWltZUlu
Zm8qIGluZm8pCit7CisgICAgaWYgKCFpbmZvLT5kZXNjcmlwdGlvbi5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGluZm8tPmRlc2NyaXB0aW9uLmRhdGEoKTsKKworICAgIGlmIChpbmZvLT5taW1l
SW5mby5kZXNjLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbmZvLT5kZXNj
cmlwdGlvbiA9IGluZm8tPm1pbWVJbmZvLmRlc2MudXRmOCgpOworICAgIHJldHVybiBpbmZvLT5k
ZXNjcmlwdGlvbi5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X21pbWVfaW5mb19nZXRfZXh0
ZW5zaW9uczoKKyAqIEBpbmZvOiBhICNXZWJLaXRNaW1lSW5mbworICoKKyAqIEdldCB0aGUgbGlz
dCBvZiBmaWxlIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB0byB0aGUKKyAqIE1JTUUgdHlwZSBvZiBA
aW5mbworICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVy
IG5vbmUpOiBhCisgKiAgICAgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzCisgKi8K
K2NvbnN0IGNoYXIqIGNvbnN0KiB3ZWJraXRfbWltZV9pbmZvX2dldF9leHRlbnNpb25zKFdlYktp
dE1pbWVJbmZvKiBpbmZvKQoreworICAgIGlmIChpbmZvLT5leHRlbnNpb25zKQorICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihpbmZvLT5leHRlbnNpb25zLT5wZGF0YSk7
CisKKyAgICBpZiAoaW5mby0+bWltZUluZm8uZXh0ZW5zaW9ucy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaW5mby0+ZXh0ZW5zaW9ucyA9IGFkb3B0R1JlZihnX3B0cl9hcnJh
eV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmZvLT5taW1lSW5mby5leHRlbnNpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChp
bmZvLT5taW1lSW5mby5leHRlbnNpb25zW2ldLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoaW5mby0+ZXh0ZW5zaW9ucy5nZXQoKSwgZ19z
dHJkdXAoaW5mby0+bWltZUluZm8uZXh0ZW5zaW9uc1tpXS51dGY4KCkuZGF0YSgpKSk7CisgICAg
fQorICAgIGdfcHRyX2FycmF5X2FkZChpbmZvLT5leHRlbnNpb25zLmdldCgpLCAwKTsKKworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KGluZm8tPmV4dGVuc2lvbnMtPnBkYXRh
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dE1pbWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1l
SW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzhlNjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1l
SW5mby5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJL
SVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdE1pbWVJbmZvX2gK
KyNkZWZpbmUgV2ViS2l0TWltZUluZm9faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9UWVBFX01JTUVfSU5GTyAod2Via2l0X21pbWVfaW5mb19nZXRfdHlwZSgpKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWltZUluZm8gV2ViS2l0TWltZUluZm87CisKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X21pbWVfaW5mb19nZXRfdHlwZSAgICAgICAgKHZvaWQpOwor
CitXRUJLSVRfQVBJIFdlYktpdE1pbWVJbmZvICoKK3dlYmtpdF9taW1lX2luZm9fcmVmICAgICAg
ICAgICAgIChXZWJLaXRNaW1lSW5mbyAqaW5mbyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X21pbWVfaW5mb191bnJlZiAgICAgICAgICAgKFdlYktpdE1pbWVJbmZvICppbmZvKTsKKworV0VC
S0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfbWltZV9pbmZvX2dldF9taW1lX3R5cGUgICAo
V2ViS2l0TWltZUluZm8gKmluZm8pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtp
dF9taW1lX2luZm9fZ2V0X2Rlc2NyaXB0aW9uIChXZWJLaXRNaW1lSW5mbyAqaW5mbyk7CisKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfbWltZV9pbmZvX2dldF9leHRl
bnNpb25zICAoV2ViS2l0TWltZUluZm8gKmluZm8pOworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE1pbWVJ
bmZvUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TWlt
ZUluZm9Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjYzAw
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE1pbWVJbmZvUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRNaW1lSW5mb1ByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRNaW1lSW5mb1ByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0TWltZUluZm8u
aCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5E
YXRhLmg+CisKK1dlYktpdE1pbWVJbmZvKiB3ZWJraXRNaW1lSW5mb0NyZWF0ZShjb25zdCBXZWJD
b3JlOjpNaW1lQ2xhc3NJbmZvJik7CisKKyNlbmRpZiAvLyBXZWJLaXRNaW1lSW5mb1ByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UGx1
Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBsdWdpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmNjUxYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBsdWdpbi5j
cHAKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFBsdWdpbi5oIgorCisjaW5j
bHVkZSAiV2ViS2l0TWltZUluZm9Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UGx1Z2luUHJp
dmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRQbHVnaW5Qcml2YXRlIHsKKyAgICBQbHVnaW5Nb2R1
bGVJbmZvIHBsdWdpbkluZm87CisgICAgQ1N0cmluZyBuYW1lOworICAgIENTdHJpbmcgZGVzY3Jp
cHRpb247CisgICAgQ1N0cmluZyBwYXRoOworICAgIEdMaXN0KiBtaW1lSW5mb0xpc3Q7Cit9Owor
CitHX0RFRklORV9UWVBFKFdlYktpdFBsdWdpbiwgd2Via2l0X3BsdWdpbiwgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQgd2Via2l0UGx1Z2luRmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdFBsdWdpblByaXZhdGUqIHByaXYgPSBXRUJLSVRfUExVR0lOKG9iamVjdCkt
PnByaXY7CisgICAgZ19saXN0X2ZyZWVfZnVsbChwcml2LT5taW1lSW5mb0xpc3QsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHdlYmtpdF9taW1lX2luZm9fdW5yZWYpKTsKKyAgICBw
cml2LT5+V2ViS2l0UGx1Z2luUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9w
bHVnaW5fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3BsdWdpbl9pbml0KFdlYktpdFBsdWdpbiogcGx1Z2luKQoreworICAgIFdlYktpdFBs
dWdpblByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocGx1Z2luLCBX
RUJLSVRfVFlQRV9QTFVHSU4sIFdlYktpdFBsdWdpblByaXZhdGUpOworICAgIHBsdWdpbi0+cHJp
diA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRQbHVnaW5Qcml2YXRlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9wbHVnaW5fY2xhc3NfaW5pdChXZWJLaXRQbHVnaW5DbGFzcyogcGx1
Z2luQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhwbHVnaW5DbGFzcyk7CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFBs
dWdpbkZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHBsdWdpbkNsYXNz
LCBzaXplb2YoV2ViS2l0UGx1Z2luUHJpdmF0ZSkpOworfQorCitXZWJLaXRQbHVnaW4qIHdlYmtp
dFBsdWdpbkNyZWF0ZShjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW5JbmZvKQoreworICAg
IFdlYktpdFBsdWdpbiogcGx1Z2luID0gV0VCS0lUX1BMVUdJTihnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfUExVR0lOLCBOVUxMKSk7CisgICAgcGx1Z2luLT5wcml2LT5wbHVnaW5JbmZvID0gcGx1
Z2luSW5mbzsKKyAgICByZXR1cm4gcGx1Z2luOworfQorCisvKioKKyAqIHdlYmtpdF9wbHVnaW5f
Z2V0X25hbWU6CisgKiBAcGx1Z2luOiBhICNXZWJLaXRQbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgbmFtZSBvZiB0aGUgcGx1Z2luLgorICovCitjb25zdCBjaGFyKiB3ZWJraXRfcGx1Z2luX2dl
dF9uYW1lKFdlYktpdFBsdWdpbiogcGx1Z2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19QTFVHSU4ocGx1Z2luKSwgMCk7CisKKyAgICBpZiAoIXBsdWdpbi0+cHJpdi0+
bmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHBsdWdpbi0+cHJpdi0+bmFtZS5kYXRhKCk7
CisKKyAgICBpZiAocGx1Z2luLT5wcml2LT5wbHVnaW5JbmZvLmluZm8ubmFtZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcGx1Z2luLT5wcml2LT5uYW1lID0gcGx1Z2luLT5w
cml2LT5wbHVnaW5JbmZvLmluZm8ubmFtZS51dGY4KCk7CisgICAgcmV0dXJuIHBsdWdpbi0+cHJp
di0+bmFtZS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3BsdWdpbl9nZXRfZGVzY3JpcHRp
b246CisgKiBAcGx1Z2luOiBhICNXZWJLaXRQbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVz
Y3JpcHRpb24gb2YgdGhlIHBsdWdpbi4KKyAqLworY29uc3QgY2hhciogd2Via2l0X3BsdWdpbl9n
ZXRfZGVzY3JpcHRpb24oV2ViS2l0UGx1Z2luKiBwbHVnaW4pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1BMVUdJTihwbHVnaW4pLCAwKTsKKworICAgIGlmICghcGx1Z2lu
LT5wcml2LT5kZXNjcmlwdGlvbi5pc051bGwoKSkKKyAgICAgICAgcGx1Z2luLT5wcml2LT5kZXNj
cmlwdGlvbi5kYXRhKCk7CisKKyAgICBpZiAocGx1Z2luLT5wcml2LT5wbHVnaW5JbmZvLmluZm8u
ZGVzYy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcGx1Z2luLT5wcml2LT5k
ZXNjcmlwdGlvbiA9IHBsdWdpbi0+cHJpdi0+cGx1Z2luSW5mby5pbmZvLmRlc2MudXRmOCgpOwor
ICAgIHJldHVybiBwbHVnaW4tPnByaXYtPmRlc2NyaXB0aW9uLmRhdGEoKTsKK30KKworLyoqCisg
KiB3ZWJraXRfcGx1Z2luX2dldF9wYXRoOgorICogQHBsdWdpbjogYSAjV2ViS2l0UGx1Z2luCisg
KgorICogUmV0dXJuczogdGhlIGFic29sdXRlIHBhdGggd2hlcmUgdGhlIHBsdWdpbiBpcyBpbnN0
YWxsZWQuCisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF9wbHVnaW5fZ2V0X3BhdGgoV2ViS2l0UGx1
Z2luKiBwbHVnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BMVUdJ
TihwbHVnaW4pLCAwKTsKKworICAgIGlmICghcGx1Z2luLT5wcml2LT5wYXRoLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gcGx1Z2luLT5wcml2LT5wYXRoLmRhdGEoKTsKKworICAgIGlmIChwbHVn
aW4tPnByaXYtPnBsdWdpbkluZm8ucGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcGx1Z2luLT5wcml2LT5wYXRoID0gcGx1Z2luLT5wcml2LT5wbHVnaW5JbmZvLnBhdGgu
dXRmOCgpOworICAgIHJldHVybiBwbHVnaW4tPnByaXYtPnBhdGguZGF0YSgpOworfQorCisvKioK
KyAqIHdlYmtpdF9wbHVnaW5fZ2V0X21pbWVfaW5mb19saXN0OgorICogQHBsdWdpbjogYSAjV2Vi
S2l0UGx1Z2luCisgKgorICogR2V0IGluZm9ybWF0aW9uIGFib3V0IE1JTUUgdHlwZXMgaGFuZGxl
ZCBieSB0aGUgcGx1Z2luLAorICogYXMgYSBsaXN0IG9mICNXZWJLaXRNaW1lSW5mby4KKyAqCisg
KiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdE1pbWVJbmZvKSAodHJhbnNmZXIgbm9uZSk6
IGEgI0dMaXN0IG9mICNXZWJLaXRNaW1lSW5mby4KKyAqLworR0xpc3QqIHdlYmtpdF9wbHVnaW5f
Z2V0X21pbWVfaW5mb19saXN0KFdlYktpdFBsdWdpbiogcGx1Z2luKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19QTFVHSU4ocGx1Z2luKSwgMCk7CisKKyAgICBpZiAocGx1
Z2luLT5wcml2LT5taW1lSW5mb0xpc3QpCisgICAgICAgIHJldHVybiBwbHVnaW4tPnByaXYtPm1p
bWVJbmZvTGlzdDsKKworICAgIGlmIChwbHVnaW4tPnByaXYtPnBsdWdpbkluZm8uaW5mby5taW1l
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwbHVnaW4tPnByaXYtPnBsdWdpbkluZm8uaW5mby5taW1lcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgcGx1Z2luLT5wcml2LT5taW1lSW5mb0xpc3QgPSBnX2xpc3RfcHJlcGVuZChwbHVnaW4t
PnByaXYtPm1pbWVJbmZvTGlzdCwgd2Via2l0TWltZUluZm9DcmVhdGUocGx1Z2luLT5wcml2LT5w
bHVnaW5JbmZvLmluZm8ubWltZXNbaV0pKTsKKyAgICByZXR1cm4gcGx1Z2luLT5wcml2LT5taW1l
SW5mb0xpc3Q7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRQbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MjgzNDgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
bHVnaW4uaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VC
S0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRQbHVnaW5faAor
I2RlZmluZSBXZWJLaXRQbHVnaW5faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX1BMVUdJTiAgICAgICAgICAgICh3ZWJraXRfcGx1Z2luX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9QTFVHSU4ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfUExVR0lOLCBXZWJLaXRQbHVnaW4pKQorI2Rl
ZmluZSBXRUJLSVRfSVNfUExVR0lOKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1BMVUdJTikpCisjZGVmaW5lIFdFQktJVF9QTFVHSU5f
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfUExVR0lOLCBXZWJLaXRQbHVnaW5DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19QTFVH
SU5fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfUExVR0lOKSkKKyNkZWZpbmUgV0VCS0lUX1BMVUdJTl9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9QTFVHSU4sIFdlYktp
dFBsdWdpbkNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBsdWdpbiAgICAgICAgV2Vi
S2l0UGx1Z2luOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBsdWdpbkNsYXNzICAgV2ViS2l0UGx1
Z2luQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UGx1Z2luUHJpdmF0ZSBXZWJLaXRQbHVn
aW5Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFBsdWdpbiB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICBXZWJLaXRQbHVnaW5Qcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRQ
bHVnaW5DbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9wbHVnaW5fZ2V0X3R5cGUgICAgICAgICAgICh2b2lkKTsKKwor
V0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfcGx1Z2luX2dldF9uYW1lICAgICAgICAg
ICAoV2ViS2l0UGx1Z2luICpwbHVnaW4pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dl
YmtpdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uICAgIChXZWJLaXRQbHVnaW4gKnBsdWdpbik7CisK
K1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3BsdWdpbl9nZXRfcGF0aCAgICAgICAg
ICAgKFdlYktpdFBsdWdpbiAqcGx1Z2luKTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRf
cGx1Z2luX2dldF9taW1lX2luZm9fbGlzdCAoV2ViS2l0UGx1Z2luICpwbHVnaW4pOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFBsdWdpblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFBsdWdpblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZmUyYWMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UGx1Z2luUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRQbHVnaW5Qcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0UGx1Z2luUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJQbHVnaW5N
b2R1bGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViS2l0UGx1Z2luLmgiCisjaW5jbHVkZSAiV2ViS2l0
UHJpdmF0ZS5oIgorCitXZWJLaXRQbHVnaW4qIHdlYmtpdFBsdWdpbkNyZWF0ZShjb25zdCBXZWJL
aXQ6OlBsdWdpbk1vZHVsZUluZm8mKTsKKworI2VuZGlmIC8vIFdlYktpdFBsdWdpblByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJD
b250ZXh0LmNwcAppbmRleCAwYjY4YzA4Li41M2ViNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjQsOCAr
MjQsMTAgQEAKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UGx1Z2luUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktp
dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KQEAgLTIzNiw2ICsyMzgsOTcgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0X3dlYl9j
b250ZXh0X2dldF9jb29raWVfbWFuYWdlcihXZWJLaXRXZWJDb250ZXh0KiBjb24KICAgICByZXR1
cm4gcHJpdi0+Y29va2llTWFuYWdlci5nZXQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnk6CisgKiBAY29udGV4dDogYSAj
V2ViS2l0V2ViQ29udGV4dAorICogQGRpcmVjdG9yeTogdGhlIGRpcmVjdG9yeSB0byBhZGQKKyAq
CisgKiBTZXQgYW4gYWRkaXRpb25hbCBkaXJlY3Rvcnkgd2hlcmUgV2ViS2l0IHdpbGwgbG9vayBm
b3IgcGx1Z2lucy4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxf
cGx1Z2luc19kaXJlY3RvcnkoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciog
ZGlyZWN0b3J5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhU
KGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRpcmVjdG9yeSk7CisKKyAgICB0b0lt
cGwoY29udGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKSktPnNldEFkZGl0aW9uYWxQbHVnaW5zRGly
ZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGlyZWN0b3J5KSk7Cit9CisKK3N0cnVj
dCBHZXRQbHVnaW5zQXN5bmNEYXRhIHsKKyAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gcGx1
Z2luczsKK307CisKK3N0YXRpYyBHZXRQbHVnaW5zQXN5bmNEYXRhKiBnZXRQbHVnaW5zQXN5bmNE
YXRhQ3JlYXRlKCkKK3sKKyAgICBHZXRQbHVnaW5zQXN5bmNEYXRhKiBkYXRhID0gZ19zbGljZV9u
ZXcoR2V0UGx1Z2luc0FzeW5jRGF0YSk7CisgICAgbmV3IChkYXRhKSBHZXRQbHVnaW5zQXN5bmNE
YXRhKCk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGdldFBsdWdpbnNBc3lu
Y0RhdGFEZXN0cm95KEdldFBsdWdpbnNBc3luY0RhdGEqIGRhdGEpCit7CisgICAgZGF0YS0+fkdl
dFBsdWdpbnNBc3luY0RhdGEoKTsKKyAgICBnX3NsaWNlX2ZyZWUoR2V0UGx1Z2luc0FzeW5jRGF0
YSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRHZXRQbHVnaW5UaHJl
YWQoR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIEdPYmplY3QqIG9iamVjdCwgIEdDYW5jZWxs
YWJsZSopCit7CisgICAgR2V0UGx1Z2luc0FzeW5jRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEdl
dFBsdWdpbnNBc3luY0RhdGEqPihnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9p
bnRlcihyZXN1bHQpKTsKKyAgICBkYXRhLT5wbHVnaW5zID0gdG9JbXBsKFdFQktJVF9XRUJfQ09O
VEVYVChvYmplY3QpLT5wcml2LT5jb250ZXh0LmdldCgpKS0+cGx1Z2luSW5mb1N0b3JlKCkucGx1
Z2lucygpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luczoKKyAq
IEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1u
b25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAo
c2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVx
dWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8g
cGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGdldCB0aGUg
bGlzdCBvZiBpbnN0YWxsZWQgcGx1Z2lucy4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMg
ZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAq
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19maW5pc2goKSB0byBnZXQgdGhlIHJlc3Vs
dCBvZiB0aGUgb3BlcmF0aW9uLgorICovCit2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1
Z2lucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxl
LCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CisKKyAg
ICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoY29udGV4dCksIGNhbGxiYWNrLCB1c2VyRGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X3dl
Yl9jb250ZXh0X2dldF9wbHVnaW5zKSkpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRf
b3BfcmVzX2dwb2ludGVyKHJlc3VsdC5nZXQoKSwgZ2V0UGx1Z2luc0FzeW5jRGF0YUNyZWF0ZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdldFBsdWdpbnNBc3luY0RhdGFEZXN0cm95KSk7Cisg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQocmVzdWx0LmdldCgpLCB3ZWJr
aXRXZWJDb250ZXh0R2V0UGx1Z2luVGhyZWFkLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbGxh
YmxlKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnNfZmluaXNo
OgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqIEByZXN1bHQ6IGEgI0dBc3lu
Y1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRv
IGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQg
d2l0aCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnMuCisgKgorICogUmV0dXJuczogKGVs
ZW1lbnQtdHlwZSBXZWJLaXRQbHVnaW4pICh0cmFuc2ZlciBmdWxsKTogYSAjR0xpc3Qgb2YgI1dl
YktpdFBsdWdpbi4gWW91IG11c3QgZnJlZSB0aGUgI0dMaXN0IHdpdGgKKyAqICAgIGdfbGlzdF9m
cmVlKCkgYW5kIHVucmVmIHRoZSAjV2ViS2l0UGx1Z2luPCEtLSAtLT5zIHdpdGggZ19vYmplY3Rf
dW5yZWYoKSB3aGVuIHlvdSdyZSBkb25lIHdpdGggdGhlbS4KKyAqLworR0xpc3QqIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfcGx1Z2luc19maW5pc2goV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoR19JU19BU1lOQ19SRVNVTFQocmVzdWx0KSwgMCk7CisKKyAgICBHU2lt
cGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1
bHQpOworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNl
X3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucyk7CisK
KyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGVSZXN1
bHQsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHZXRQbHVnaW5zQXN5bmNEYXRh
KiBkYXRhID0gc3RhdGljX2Nhc3Q8R2V0UGx1Z2luc0FzeW5jRGF0YSo+KGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBsZVJlc3VsdCkpOworICAgIEdMaXN0KiBw
bHVnaW5zID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEtPnBsdWdpbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIHBsdWdpbnMgPSBnX2xpc3RfcHJlcGVuZChwbHVnaW5zLCB3ZWJr
aXRQbHVnaW5DcmVhdGUoZGF0YS0+cGx1Z2luc1tpXSkpOworCisgICAgcmV0dXJuIHBsdWdpbnM7
Cit9CisKIFdlYktpdERvd25sb2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9h
ZChXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQpCiB7CiAgICAgR1JlZlB0cjxXZWJLaXREb3dubG9h
ZD4gZG93bmxvYWQgPSBkb3dubG9hZHNNYXAoKS5nZXQod2tEb3dubG9hZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKaW5kZXgg
NDViNmU2Yy4uMDJlZjczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaApAQCAtODAsMjMgKzgwLDM4IEBAIHN0cnVjdCBfV2Vi
S2l0V2ViQ29udGV4dENsYXNzIHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfdHlwZSAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl9jb250ZXh0X2dl
dF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBXZWJL
aXRXZWJDb250ZXh0ICoKLXdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAgICAgICAgKHZv
aWQpOword2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0ICAgICAgICAgICAgICAgICAgICAg
ICh2b2lkKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hl
X21vZGVsICAgIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2RlbCAgY2FjaGVfbW9kZWwpOword2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJDb250ZXh0ICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdENhY2hlTW9kZWwgICAgY2FjaGVfbW9kZWwpOwogV0VC
S0lUX0FQSSBXZWJLaXRDYWNoZU1vZGVsCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21v
ZGVsICAgIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfY29udGV4dF9n
ZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICpjb250
ZXh0KTsKIAogV0VCS0lUX0FQSSBXZWJLaXREb3dubG9hZCAqCi13ZWJraXRfd2ViX2NvbnRleHRf
ZG93bmxvYWRfdXJpICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqdXJpKTsKK3dl
YmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViQ29udGV4dCAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKnVyaSk7CiAKIFdFQktJVF9B
UEkgV2ViS2l0Q29va2llTWFuYWdlciAqCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9t
YW5hZ2VyIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfY29udGV4dF9n
ZXRfY29va2llX21hbmFnZXIgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICpjb250
ZXh0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9u
YWxfcGx1Z2luc19kaXJlY3RvcnkgKFdlYktpdFdlYkNvbnRleHQgICAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICpkaXJlY3RvcnkpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29u
dGV4dF9nZXRfcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR0xp
c3QgKgord2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaCAgICAgICAgICAgICAg
IChXZWJLaXRXZWJDb250ZXh0ICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAqcmVzdWx0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgICAgICAgICAgICAqKmVycm9yKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNn
bWwKaW5kZXggODIxMTI3Zi4uNjNkYjA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0zMSw2
ICszMSw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RmluZENvbnRyb2xs
ZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvb2tpZU1hbmFnZXIu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBsdWdpbi54bWwiLz4KICAg
PC9jaGFwdGVyPgogCiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0CmluZGV4IGY1ZTE1ZDkuLjg4NDE3N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dApAQCAtMjksNiArMjksOSBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsCiB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfZG93
bmxvYWRfdXJpCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyCit3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3RvcnkKK3dlYmtpdF93ZWJf
Y29udGV4dF9nZXRfcGx1Z2lucword2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2Zpbmlz
aAogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYkNvbnRleHRDbGFzcwpAQCAtNjAx
LDMgKzYwNCwzNSBAQCBXRUJLSVRfQ09PS0lFX01BTkFHRVJfR0VUX0NMQVNTCiBXZWJLaXRDb29r
aWVNYW5hZ2VyUHJpdmF0ZQogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF90eXBlCiA8L1NFQ1RJ
T04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0UGx1Z2luPC9GSUxFPgorV2ViS2l0UGx1Z2lu
Cit3ZWJraXRfcGx1Z2luX2dldF9uYW1lCit3ZWJraXRfcGx1Z2luX2dldF9kZXNjcmlwdGlvbgor
d2Via2l0X3BsdWdpbl9nZXRfcGF0aAord2Via2l0X3BsdWdpbl9nZXRfbWltZV9pbmZvX2xpc3QK
KworPFNVQlNFQ1RJT04gV2ViS2l0TWltZUluZm8+CitXZWJLaXRNaW1lSW5mbword2Via2l0X21p
bWVfaW5mb19yZWYKK3dlYmtpdF9taW1lX2luZm9fdW5yZWYKK3dlYmtpdF9taW1lX2luZm9fZ2V0
X21pbWVfdHlwZQord2Via2l0X21pbWVfaW5mb19nZXRfZGVzY3JpcHRpb24KK3dlYmtpdF9taW1l
X2luZm9fZ2V0X2V4dGVuc2lvbnMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRQbHVn
aW5DbGFzcworV0VCS0lUX1RZUEVfUExVR0lOCitXRUJLSVRfUExVR0lOCitXRUJLSVRfSVNfUExV
R0lOCitXRUJLSVRfUExVR0lOX0NMQVNTCitXRUJLSVRfSVNfUExVR0lOX0NMQVNTCitXRUJLSVRf
UExVR0lOX0dFVF9DTEFTUworV0VCS0lUX1RZUEVfTUlNRV9JTkZPCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfcGx1Z2luX2dldF90eXBlCit3ZWJraXRfbWltZV9pbmZvX2dldF90eXBl
CitXZWJLaXRQbHVnaW5Qcml2YXRlCis8L1NFQ1RJT04+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggMWNhODIx
Yi4uY2RmOWVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMTUsMyArMTUsNSBAQCB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19nZXRfdHlwZQogd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF90eXBlCiB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF90eXBlCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X3R5cGUK
K3dlYmtpdF9wbHVnaW5fZ2V0X3R5cGUKK3dlYmtpdF9taW1lX2luZm9fZ2V0X3R5cGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUu
YW0KaW5kZXggYjM4OWY0OS4uODcwZDY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTY1LDcgKzY1LDkgQEAg
TGlicmFyaWVzX2xpYldlYktpdDJBUElUZXN0Q29yZV9sYV9DUFBGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKIAogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJD
b250ZXh0X1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdFdlYkNvbnRleHRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQ
cm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRfQ1BQRkxBR1MgPSBc
CisJLURXRUJLSVRfVEVTVF9QTFVHSU5fRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGly
fS9UZXN0TmV0c2NhcGVQbHVnaW4vLmxpYnNcIiBcCisJJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdz
KQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xEQUREID0g
JCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJL
aXRXZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGFkN2NlNWIuLjIxNmE1YzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJUZXN0TWFp
bi5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJD
b250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewpAQCAtMjksOSArMzAs
ODYgQEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCiAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkg
PT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwogfQogCitjbGFzcyBQbHVnaW5z
VGVzdDogcHVibGljIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
UGx1Z2luc1Rlc3QpOworCisgICAgUGx1Z2luc1Rlc3QoKQorICAgICAgICA6IG1fY29udGV4dCh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKKyAgICAgICAgLCBtX21haW5Mb29wKGdf
bWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAgICAgLCBtX3BsdWdpbnMoMCkKKyAgICB7Cisg
ICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfYWRkaXRpb25hbF9wbHVnaW5zX2RpcmVjdG9y
eShtX2NvbnRleHQsIFdFQktJVF9URVNUX1BMVUdJTl9ESVIpOworICAgIH0KKworICAgIH5QbHVn
aW5zVGVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsK
KyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3BsdWdpbnMsIGdfb2JqZWN0X3VucmVmKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRQbHVnaW5zQXN5bmNSZWFkeUNhbGxiYWNrKEdPYmpl
Y3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgUGx1Z2luc1Rlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5tX3BsdWdpbnMgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnNfZmlu
aXNoKHRlc3QtPm1fY29udGV4dCwgcmVzdWx0LCAwKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVp
dCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogZ2V0UGx1Z2lucygpCisg
ICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19vYmplY3RfdW5yZWYp
OworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnMobV9jb250ZXh0LCAwLCBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGdldFBsdWdpbnNBc3luY1JlYWR5
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwor
ICAgICAgICByZXR1cm4gbV9wbHVnaW5zOworICAgIH0KKworICAgIFdlYktpdFdlYkNvbnRleHQq
IG1fY29udGV4dDsKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR0xpc3QqIG1fcGx1
Z2luczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyhQbHVnaW5z
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHTGlzdCogcGx1Z2lucyA9IHRlc3Qt
PmdldFBsdWdpbnMoKTsKKyAgICBnX2Fzc2VydChwbHVnaW5zKTsKKworICAgIEdSZWZQdHI8V2Vi
S2l0UGx1Z2luPiB0ZXN0UGx1Z2luOworICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBwbHVnaW5zOyBp
dGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgV2ViS2l0UGx1Z2luKiBw
bHVnaW4gPSBXRUJLSVRfUExVR0lOKGl0ZW0tPmRhdGEpOworICAgICAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHBsdWdpbikpOworICAgICAg
ICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQg
VGVzdCBQbHVnSW4iKSkgeworICAgICAgICAgICAgdGVzdFBsdWdpbiA9IHBsdWdpbjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGdfYXNzZXJ0KFdFQktJVF9JU19Q
TFVHSU4odGVzdFBsdWdpbi5nZXQoKSkpOworCisgICAgR093blB0cjxjaGFyPiBwbHVnaW5QYXRo
KGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX1RFU1RfUExVR0lOX0RJUiwgImxpYnRlc3RuZXRzY2Fw
ZXBsdWdpbi5zbyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3BsdWdpbl9n
ZXRfcGF0aCh0ZXN0UGx1Z2luLmdldCgpKSwgPT0sIHBsdWdpblBhdGguZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfcGx1Z2luX2dldF9kZXNjcmlwdGlvbih0ZXN0UGx1Z2luLmdl
dCgpKSwgPT0sICJTaW1wbGUgTmV0c2NhcGXCriBwbHVnLWluIHRoYXQgaGFuZGxlcyB0ZXN0IGNv
bnRlbnQgZm9yIFdlYktpdCIpOworICAgIEdMaXN0KiBtaW1lSW5mb0xpc3QgPSB3ZWJraXRfcGx1
Z2luX2dldF9taW1lX2luZm9fbGlzdCh0ZXN0UGx1Z2luLmdldCgpKTsKKyAgICBnX2Fzc2VydCht
aW1lSW5mb0xpc3QpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtaW1lSW5m
b0xpc3QpLCA9PSwgMik7CisKKyAgICBXZWJLaXRNaW1lSW5mbyogbWltZUluZm8gPSBzdGF0aWNf
Y2FzdDxXZWJLaXRNaW1lSW5mbyo+KG1pbWVJbmZvTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X21pbWVfdHlwZShtaW1lSW5mbyksID09LCAiaW1h
Z2UvcG5nIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X2Rlc2Ny
aXB0aW9uKG1pbWVJbmZvKSwgPT0sICJwbmcgaW1hZ2UiKTsKKyAgICBjb25zdCBnY2hhciogY29u
c3QqIGV4dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZvX2dldF9leHRlbnNpb25zKG1pbWVJbmZv
KTsKKyAgICBnX2Fzc2VydChleHRlbnNpb25zKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZXh0ZW5z
aW9uc1swXSwgPT0sICJwbmciKTsKKworICAgIG1pbWVJbmZvTGlzdCA9IGdfbGlzdF9uZXh0KG1p
bWVJbmZvTGlzdCk7CisgICAgbWltZUluZm8gPSBzdGF0aWNfY2FzdDxXZWJLaXRNaW1lSW5mbyo+
KG1pbWVJbmZvTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1lX2lu
Zm9fZ2V0X21pbWVfdHlwZShtaW1lSW5mbyksID09LCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVz
dC1uZXRzY2FwZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9k
ZXNjcmlwdGlvbihtaW1lSW5mbyksID09LCAidGVzdCBuZXRzY2FwZSBjb250ZW50Iik7CisgICAg
ZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4dGVuc2lvbnMobWltZUluZm8pOwor
ICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihleHRlbnNpb25z
WzBdLCA9PSwgInRlc3RuZXRzY2FwZSIpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAg
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJD
b250ZXh0RGVmYXVsdCk7CisgICAgUGx1Z2luc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIs
ICJnZXQtcGx1Z2lucyIsIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk7CiB9CiAKIHZvaWQgYWZ0
ZXJBbGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4
IGM1NDYwZjMuLjc2OTljNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbmRD
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRNaW1lSW5mby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UGx1Z2luLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQcmludE9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0
aW5ncy5oPgo=
</data>
<flag name="review"
          id="147866"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>