<?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>87800</bug_id>
          
          <creation_ts>2012-05-29 17:51:32 -0700</creation_ts>
          <short_desc>[GTK] Add a new and reusable Geoclue-based geolocation provider in WebCore</short_desc>
          <delta_ts>2012-06-01 10:05: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>WebKitGTK</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</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>83877</blocked>
    
    <blocked>87801</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>636647</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-29 17:51:32 -0700</bug_when>
    <thetext>The idea is to have a class in WebCore that we can use both for WebKit and WebKit2, which would take care of dealing with Geoclue when using the geolocation module.

This new class would allow simplifying code in WebKit/gtk/WebCoreSupport/GeolocationClientGtk.cpp and would ease a lot the implementation of a new client-based geolocation provider for WebKit2GTK (see bug 83877)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636667</commentid>
    <comment_count>1</comment_count>
      <attachid>144664</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-29 18:16:10 -0700</bug_when>
    <thetext>Created attachment 144664
Patch proposal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637000</commentid>
    <comment_count>2</comment_count>
      <attachid>144664</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-30 01:11:53 -0700</bug_when>
    <thetext>Comment on attachment 144664
Patch proposal

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

I know this code has just been moved from wk layer, but I think we can take advantage to improve or fix it. Most of the geoclue api includes sync and async versions of the methods, and we are using sync in some cases and async in others, so I wonder whether we could make this fully non-blocking  by always using the async methods.

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:81
&gt; +    GOwnPtr&lt;GError&gt; error;
&gt; +    GRefPtr&lt;GeoclueMasterClient&gt; client = adoptGRef(geoclue_master_create_client(master.get(), 0, &amp;error.outPtr()));
&gt; +    if (!client) {
&gt; +        errorOccured(error-&gt;message);
&gt; +        return;
&gt; +    }

Could we use geoclue_master_create_client_async() instead?

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:88
&gt; +    GeoclueAccuracyLevel accuracyLevel = m_enableHighAccuracy ? GEOCLUE_ACCURACY_LEVEL_DETAILED : GEOCLUE_ACCURACY_LEVEL_LOCALITY;
&gt; +    if (!geoclue_master_client_set_requirements(client.get(), accuracyLevel, 0,
&gt; +                                                false, GEOCLUE_RESOURCE_ALL, &amp;error.outPtr())) {
&gt; +        errorOccured(error-&gt;message);
&gt; +        return;
&gt; +    }

Could we use geoclue_master_client_set_requirements_async() instead?. We could move this to a helper since it&apos;s used twice in this file.

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:94
&gt; +    m_geocluePosition = adoptGRef(geoclue_master_client_create_position(client.get(), &amp;error.outPtr()));
&gt; +    if (!m_geocluePosition) {
&gt; +        errorOccured(error-&gt;message);
&gt; +        return;
&gt; +    }

geoclue_master_client_create_position_async()?

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:99
&gt; +    g_signal_connect(G_OBJECT(m_geocluePosition.get()), &quot;position-changed&quot;,
&gt; +                     G_CALLBACK(positionChangedCallback), this);

g_signal_connect expects a gpointer not a GObject so we don&apos;t need to cast here. This could probably be a single line,

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclueListener.h:26
&gt; +#include &lt;geoclue/geoclue-master.h&gt;
&gt; +#include &lt;geoclue/geoclue-position.h&gt;

Do you really need these headers here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638162</commentid>
    <comment_count>3</comment_count>
      <attachid>145031</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-31 02:51:44 -0700</bug_when>
    <thetext>Created attachment 145031
Patch proposal

New patch, addressing issues raised by Carlos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638471</commentid>
    <comment_count>4</comment_count>
      <attachid>145031</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-31 08:56:53 -0700</bug_when>
    <thetext>Comment on attachment 145031
Patch proposal

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

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:39
&gt; +        g_error_free(error);

We are freeing the error here but not in the other callbacks, it always looked weird to me that we would have to free the error in the callback, but I assumed geoclue worked this way. If this is the case we should free the error in all other callbacks too.

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:60
&gt; +    provider-&gt;setGeocluePosition(position);
&gt; +
&gt; +    geoclue_position_get_position_async(position, reinterpret_cast&lt;GeocluePositionCallback&gt;(getPositionCallback), provider);
&gt; +    g_signal_connect(position, &quot;position-changed&quot;, G_CALLBACK(positionChangedCallback), provider);

In these cases where we have to use a static callback I prefer to do the minimum things in the callback, what do you think about moving these two lines to setGeocluePosition?

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:82
&gt; +    provider-&gt;setGeoclueClient(client);
&gt; +    provider-&gt;updateClientRequirements();
&gt; +
&gt; +    geoclue_master_client_create_position_async(client, createPositionCallback, provider);

Same here, we could updateClientRequirements and create the position in setGeoclueClient

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:143
&gt; +    m_isUpdating = true;

It looks a bit weird to set isUpdating here, is it a problem if it&apos;s set in startUpdating()?

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:172
&gt; +void GeolocationProviderGeoclue::errorOccured(const char* message)
&gt; +{
&gt; +    m_listener-&gt;notifyErrorOcurred(message);
&gt; +}

This is funny, one method is errorOccured (double c in ocurred and only one r) and the other is notifyErrorOcurred (only on c and double r), I&apos;m not English expert, but google says the right word id occurred (double c and r) :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639400</commentid>
    <comment_count>5</comment_count>
      <attachid>145321</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-01 09:00:15 -0700</bug_when>
    <thetext>Created attachment 145321
Patch proposal

New patch addressing issues raised by Carlos.

I also renamed GeolocationProviderGeoclueListener to GeolocationProviderGeoclueClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639470</commentid>
    <comment_count>6</comment_count>
      <attachid>145321</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-01 09:55:05 -0700</bug_when>
    <thetext>Comment on attachment 145321
Patch proposal

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

Please consider changing the return in geoclueClientSetRequirementsCallback before landing.

&gt; Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp:66
&gt; +    if (error) {
&gt; +        provider-&gt;errorOccurred(error-&gt;message);
&gt; +        g_error_free(error);
&gt; +        return;
&gt; +    }

This could be an early return, or remove the return, because there&apos;s nothing to do if there isn&apos;t an error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639482</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-01 10:05:52 -0700</bug_when>
    <thetext>Committed r119249: &lt;http://trac.webkit.org/changeset/119249&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144664</attachid>
            <date>2012-05-29 18:16:10 -0700</date>
            <delta_ts>2012-05-31 02:51:44 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-05-29-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>15247</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBhMmJmMTRjMTc1ZDI5MzkzYzllY2I4NTJjYjgxNzkwOTk4NGVhYTdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDMwIE1heSAyMDEyIDAyOjIwOjEwICswMjAwClN1YmplY3Q6IFtQQVRD
SCAxLzNdIDIwMTItMDUtMjkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBbR1RLXSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQg
Z2VvbG9jYXRpb24gcHJvdmlkZXIgaW4gV2ViQ29yZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgwMAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KCiAgICAgICAgQWRkZWQgbmV3IGFuZCByZXVzYWJsZSBHZW9jbHVlLWJhc2VkIGdl
b2xvY2F0aW9uIHByb3ZpZGVyIHRvIFdlYkNvcmUuCgogICAgICAgICogR05VbWFrZWZpbGUuYW06
CiAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgogICAgICAgICogcGxhdGZvcm0vZ2VvY2x1
ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHA6IEFkZGVkLgogICAgICAgIChnZXRQb3Np
dGlvbkNhbGxiYWNrKToKICAgICAgICAocG9zaXRpb25DaGFuZ2VkQ2FsbGJhY2spOgogICAgICAg
IChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUp
OgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6fkdlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnN0YXJ0VXBk
YXRpbmcpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RvcFVwZGF0aW5n
KToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEVuYWJsZUhpZ2hBY2N1
cmFjeSk6CiAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpwb3NpdGlvbkNoYW5n
ZWQpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6ZXJyb3JPY2N1cmVkKToK
ICAgICAgICAqIHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuaDog
QWRkZWQuCiAgICAgICAgKFdlYkNvcmUpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZSk6CiAgICAgICAgKiBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlTGlzdGVuZXIuaDogQWRkZWQuCiAgICAgICAgKFdlYkNvcmUpOgogICAgICAgIChHZW9sb2Nh
dGlvblByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyKToKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKysrKwogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vZ2Vv
Y2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHAgICAgICAgICB8ICAxNTUgKysrKysr
KysrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlLmggIHwgICA2NiArKysrKysrKysKIC4uLi9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlTGlzdGVuZXIuaCAgIHwgICA0MCArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyOTMg
aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1
ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyLmgKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E2
ZWRkOC4uYTljOGExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA1LTI5ICBN
YXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQgZ2VvbG9jYXRpb24gcHJvdmlk
ZXIgaW4gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODc4MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQgZ2VvbG9jYXRpb24gcHJv
dmlkZXIgdG8gV2ViQ29yZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2Nh
dGlvblByb3ZpZGVyR2VvY2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0UG9zaXRpb25DYWxs
YmFjayk6CisgICAgICAgIChwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChHZW9s
b2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUpOgorICAg
ICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6On5HZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZSk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RhcnRVcGRhdGlu
Zyk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RvcFVwZGF0aW5nKToK
KyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzZXRFbmFibGVIaWdoQWNjdXJh
Y3kpOgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnBvc2l0aW9uQ2hhbmdl
ZCk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6ZXJyb3JPY2N1cmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVy
R2VvY2x1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVy
R2VvY2x1ZUxpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChH
ZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyKToKKwogMjAxMi0wNS0yOSAgU2hhd24g
U2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIG1h
a2UgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb2JqZWN0IHVzYWJsZSBieSBub24td2Via2l0IGNv
ZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYTk3ZDI0Zi4uODM2OGM2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KQEAgLTEwNyw2ICsxMDcsNyBAQCB3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwKIAkt
SSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lciBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VvY2x1ZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dseCBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDJhZmYzOWUuLmM4
MmIzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDcwMyw2ICs0NzAzLDkg
QEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFn
Q29udHJvbGxlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxl
ckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tpbmdT
dG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJv
dmlkZXJHZW9jbHVlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9j
YXRpb25Qcm92aWRlckdlb2NsdWUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9j
bHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlTGlzdGVuZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDYWlyby5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZmNmZTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuaCIKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
KworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3ZvaWQgZ2V0UG9zaXRpb25DYWxsYmFjayhHZW9jbHVlUG9zaXRpb24qIHBvc2l0
aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1ZUFjY3Vy
YWN5KiBhY2N1cmFjeSwgR0Vycm9yKiBlcnJvciwgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUq
IHByb3ZpZGVyKQoreworICAgIGlmIChlcnJvcikgeworICAgICAgICBwcm92aWRlci0+ZXJyb3JP
Y2N1cmVkKGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcm92aWRlci0+cG9zaXRpb25DaGFuZ2VkKHBvc2l0
aW9uLCBmaWVsZHMsIHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFj
Y3VyYWN5KTsKK30KKwordm9pZCBwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayhHZW9jbHVlUG9zaXRp
b24qIHBvc2l0aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1w
LCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2Vv
Y2x1ZUFjY3VyYWN5KiBhY2N1cmFjeSwgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUqIHByb3Zp
ZGVyKQoreworICAgIHByb3ZpZGVyLT5wb3NpdGlvbkNoYW5nZWQocG9zaXRpb24sIGZpZWxkcywg
dGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3kpOworfQor
CitHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUo
R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVMaXN0ZW5lciogbGlzdGVuZXIpCisgICAgOiBtX2xp
c3RlbmVyKGxpc3RlbmVyKQorICAgICwgbV9nZW9jbHVlQ2xpZW50KDApCisgICAgLCBtX2dlb2Ns
dWVQb3NpdGlvbigwKQorICAgICwgbV9sYXRpdHVkZSgwKQorICAgICwgbV9sb25naXR1ZGUoMCkK
KyAgICAsIG1fYWx0aXR1ZGUoMCkKKyAgICAsIG1fYWNjdXJhY3koMCkKKyAgICAsIG1fYWx0aXR1
ZGVBY2N1cmFjeSgwKQorICAgICwgbV90aW1lc3RhbXAoMCkKKyAgICAsIG1fZW5hYmxlSGlnaEFj
Y3VyYWN5KGZhbHNlKQorICAgICwgbV9pc1VwZGF0aW5nKGZhbHNlKQoreworICAgIEFTU0VSVCht
X2xpc3RlbmVyKTsKK30KKworR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6On5HZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZSgpCit7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2Ns
dWU6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsKKwor
ICAgIEdSZWZQdHI8R2VvY2x1ZU1hc3Rlcj4gbWFzdGVyID0gYWRvcHRHUmVmKGdlb2NsdWVfbWFz
dGVyX2dldF9kZWZhdWx0KCkpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdS
ZWZQdHI8R2VvY2x1ZU1hc3RlckNsaWVudD4gY2xpZW50ID0gYWRvcHRHUmVmKGdlb2NsdWVfbWFz
dGVyX2NyZWF0ZV9jbGllbnQobWFzdGVyLmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAg
ICBpZiAoIWNsaWVudCkgeworICAgICAgICBlcnJvck9jY3VyZWQoZXJyb3ItPm1lc3NhZ2UpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR2VvY2x1ZUFjY3VyYWN5TGV2ZWwgYWNjdXJh
Y3lMZXZlbCA9IG1fZW5hYmxlSGlnaEFjY3VyYWN5ID8gR0VPQ0xVRV9BQ0NVUkFDWV9MRVZFTF9E
RVRBSUxFRCA6IEdFT0NMVUVfQUNDVVJBQ1lfTEVWRUxfTE9DQUxJVFk7CisgICAgaWYgKCFnZW9j
bHVlX21hc3Rlcl9jbGllbnRfc2V0X3JlcXVpcmVtZW50cyhjbGllbnQuZ2V0KCksIGFjY3VyYWN5
TGV2ZWwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAg
ICAgZXJyb3JPY2N1cmVkKGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZ2VvY2x1ZVBvc2l0aW9uID0gYWRvcHRHUmVmKGdlb2NsdWVfbWFzdGVyX2NsaWVu
dF9jcmVhdGVfcG9zaXRpb24oY2xpZW50LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBp
ZiAoIW1fZ2VvY2x1ZVBvc2l0aW9uKSB7CisgICAgICAgIGVycm9yT2NjdXJlZChlcnJvci0+bWVz
c2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2dlb2NsdWVDbGllbnQgPSBj
bGllbnQ7CisgICAgZ2VvY2x1ZV9wb3NpdGlvbl9nZXRfcG9zaXRpb25fYXN5bmMobV9nZW9jbHVl
UG9zaXRpb24uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R2VvY2x1ZVBvc2l0aW9uQ2FsbGJhY2s+
KGdldFBvc2l0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JK
RUNUKG1fZ2VvY2x1ZVBvc2l0aW9uLmdldCgpKSwgInBvc2l0aW9uLWNoYW5nZWQiLAorICAgICAg
ICAgICAgICAgICAgICAgR19DQUxMQkFDSyhwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMp
OworCisgICAgbV9pc1VwZGF0aW5nID0gdHJ1ZTsKK30KKwordm9pZCBHZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZTo6c3RvcFVwZGF0aW5nKCkKK3sKKyAgICBpZiAoIW1fZ2VvY2x1ZUNsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9nZW9jbHVlUG9zaXRpb24uY2xlYXIoKTsKKyAgICBt
X2dlb2NsdWVDbGllbnQuY2xlYXIoKTsKKworICAgIG1faXNVcGRhdGluZyA9IGZhbHNlOworfQor
Cit2b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzZXRFbmFibGVIaWdoQWNjdXJhY3ko
Ym9vbCBlbmFibGUpCit7CisgICAgbV9lbmFibGVIaWdoQWNjdXJhY3kgPSBlbmFibGU7CisKKyAg
ICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIHdlIHNob3VsZCByZXBvcnQgdGhlIG5ldyBy
ZXF1aXJlbWVudHMgaW4gb3JkZXIKKyAgICAvLyB0byBjaGFuZ2UgdG8gYSBtb3JlIHN1aXRhYmxl
IHByb3ZpZGVyIGlmIG5lZWRlZC4gSWYgbm90LCByZXR1cm4uCisgICAgaWYgKCFtX2lzVXBkYXRp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBH
ZW9jbHVlQWNjdXJhY3lMZXZlbCBhY2N1cmFjeUxldmVsID0gbV9lbmFibGVIaWdoQWNjdXJhY3kg
PyBHRU9DTFVFX0FDQ1VSQUNZX0xFVkVMX0RFVEFJTEVEIDogR0VPQ0xVRV9BQ0NVUkFDWV9MRVZF
TF9MT0NBTElUWTsKKyAgICBpZiAoIWdlb2NsdWVfbWFzdGVyX2NsaWVudF9zZXRfcmVxdWlyZW1l
bnRzKG1fZ2VvY2x1ZUNsaWVudC5nZXQoKSwgYWNjdXJhY3lMZXZlbCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBHRU9DTFVFX1JFU09V
UkNFX0FMTCwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBlcnJvck9jY3VyZWQoZXJyb3It
Pm1lc3NhZ2UpOworICAgICAgICBzdG9wVXBkYXRpbmcoKTsKKyAgICB9Cit9CisKK3ZvaWQgR2Vv
bG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnBvc2l0aW9uQ2hhbmdlZChHZW9jbHVlUG9zaXRpb24q
IHBvc2l0aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGltZXN0YW1wLCBk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgR2VvY2x1
ZUFjY3VyYWN5KiBhY2N1cmFjeSkKK3sKKyAgICBpZiAoIShmaWVsZHMgJiBHRU9DTFVFX1BPU0lU
SU9OX0ZJRUxEU19MQVRJVFVERSAmJiBmaWVsZHMgJiBHRU9DTFVFX1BPU0lUSU9OX0ZJRUxEU19M
T05HSVRVREUpKSB7CisgICAgICAgIGVycm9yT2NjdXJlZCgiUG9zaXRpb24gY291bGQgbm90IGJl
IGRldGVybWluZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3RpbWVzdGFt
cCA9IHRpbWVzdGFtcDsKKyAgICBtX2xhdGl0dWRlID0gbGF0aXR1ZGU7CisgICAgbV9sb25naXR1
ZGUgPSBsb25naXR1ZGU7CisgICAgbV9hbHRpdHVkZSA9IGFsdGl0dWRlOworCisgICAgZ2VvY2x1
ZV9hY2N1cmFjeV9nZXRfZGV0YWlscyhhY2N1cmFjeSwgMCwgJm1fYWNjdXJhY3ksICZtX2FsdGl0
dWRlQWNjdXJhY3kpOworCisgICAgbV9saXN0ZW5lci0+bm90aWZ5UG9zaXRpb25DaGFuZ2VkKG1f
dGltZXN0YW1wLCBtX2xhdGl0dWRlLCBtX2xvbmdpdHVkZSwgbV9hbHRpdHVkZSwgbV9hY2N1cmFj
eSwgbV9hbHRpdHVkZUFjY3VyYWN5KTsKK30KKwordm9pZCBHZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZTo6ZXJyb3JPY2N1cmVkKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgbV9saXN0ZW5l
ci0+bm90aWZ5RXJyb3JPY3VycmVkKG1lc3NhZ2UpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdF
T0xPQ0FUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9H
ZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Vv
Y2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmRhNWI2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmgKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdlb2xv
Y2F0aW9uUHJvdmlkZXJHZW9jbHVlX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25Qcm92aWRlckdlb2Ns
dWVfaAorCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Q
cm92aWRlckdlb2NsdWVMaXN0ZW5lci5oIgorI2luY2x1ZGUgPGdlb2NsdWUvZ2VvY2x1ZS1tYXN0
ZXIuaD4KKyNpbmNsdWRlIDxnZW9jbHVlL2dlb2NsdWUtcG9zaXRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlPiB7CitwdWJsaWM6Cisg
ICAgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVM
aXN0ZW5lciopOworICAgIH5HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSgpOworCisgICAgdm9p
ZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAgICB2b2lkIHNl
dEVuYWJsZUhpZ2hBY2N1cmFjeShib29sKTsKKworICAgIHZvaWQgcG9zaXRpb25DaGFuZ2VkKEdl
b2NsdWVQb3NpdGlvbiosIEdlb2NsdWVQb3NpdGlvbkZpZWxkcywgaW50LCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlLCBHZW9jbHVlQWNjdXJhY3kqKTsKKyAgICB2b2lkIGVycm9yT2NjdXJlZChjb25z
dCBjaGFyKik7CisKK3ByaXZhdGU6CisgICAgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVMaXN0
ZW5lciogbV9saXN0ZW5lcjsKKworICAgIEdSZWZQdHI8R2VvY2x1ZU1hc3RlckNsaWVudD4gbV9n
ZW9jbHVlQ2xpZW50OworICAgIEdSZWZQdHI8R2VvY2x1ZVBvc2l0aW9uPiBtX2dlb2NsdWVQb3Np
dGlvbjsKKworICAgIGRvdWJsZSBtX2xhdGl0dWRlOworICAgIGRvdWJsZSBtX2xvbmdpdHVkZTsK
KyAgICBkb3VibGUgbV9hbHRpdHVkZTsKKyAgICBkb3VibGUgbV9hY2N1cmFjeTsKKyAgICBkb3Vi
bGUgbV9hbHRpdHVkZUFjY3VyYWN5OworICAgIGludCBtX3RpbWVzdGFtcDsKKworICAgIGJvb2wg
bV9lbmFibGVIaWdoQWNjdXJhY3k7CisgICAgYm9vbCBtX2lzVXBkYXRpbmc7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCisKKyNl
bmRpZiAvLyBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlTGlzdGVu
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRl
ckdlb2NsdWVMaXN0ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNm
NWU3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVl
L0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlTGlzdGVuZXIuaApAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25Q
cm92aWRlckdlb2NsdWVMaXN0ZW5lcl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlTGlzdGVuZXJfaAorCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSA8Z2Vv
Y2x1ZS9nZW9jbHVlLW1hc3Rlci5oPgorI2luY2x1ZGUgPGdlb2NsdWUvZ2VvY2x1ZS1wb3NpdGlv
bi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlTGlzdGVuZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlv
bkNoYW5nZWQoaW50IHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRl
LCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJh
Y3kpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RXJyb3JPY3VycmVkKGNvbnN0IGNoYXIq
IG1lc3NhZ2UpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShHRU9MT0NBVElPTikKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlTGlzdGVuZXJfaAotLSAKMS43LjEwLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145031</attachid>
            <date>2012-05-31 02:51:44 -0700</date>
            <delta_ts>2012-06-01 09:00:15 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-05-29-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>16208</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAzM2Q0MDcyZmQ5MTQ3OTI4YmJmN2ZjMDNlYWVhMmFhMmY5MjMyNTczIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDMwIE1heSAyMDEyIDAyOjIwOjEwICswMjAwClN1YmplY3Q6IFtQQVRD
SCAxLzRdIDIwMTItMDUtMjkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBbR1RLXSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQg
Z2VvbG9jYXRpb24gcHJvdmlkZXIgaW4gV2ViQ29yZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgwMAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KCiAgICAgICAgQWRkZWQgbmV3IGFuZCByZXVzYWJsZSBHZW9jbHVlLWJhc2VkIGdl
b2xvY2F0aW9uIHByb3ZpZGVyIHRvIFdlYkNvcmUuCgogICAgICAgICogR05VbWFrZWZpbGUuYW06
CiAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgogICAgICAgICogcGxhdGZvcm0vZ2VvY2x1
ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHA6IEFkZGVkLgogICAgICAgIChnZXRQb3Np
dGlvbkNhbGxiYWNrKToKICAgICAgICAocG9zaXRpb25DaGFuZ2VkQ2FsbGJhY2spOgogICAgICAg
IChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUp
OgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6fkdlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnN0YXJ0VXBk
YXRpbmcpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RvcFVwZGF0aW5n
KToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEVuYWJsZUhpZ2hBY2N1
cmFjeSk6CiAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzZXRHZW9jbHVlQ2xp
ZW50KToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEdlb2NsdWVQb3Np
dGlvbik6CiAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjp1cGRhdGVDbGllbnRS
ZXF1aXJlbWVudHMpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6cG9zaXRp
b25DaGFuZ2VkKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OmVycm9yT2Nj
dXJlZCk6CiAgICAgICAgKiBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlLmg6IEFkZGVkLgogICAgICAgIChXZWJDb3JlKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92
aWRlckdlb2NsdWUpOgogICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZUxpc3RlbmVyLmg6IEFkZGVkLgogICAgICAgIChXZWJDb3JlKToKICAgICAgICAo
R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVMaXN0ZW5lcik6Ci0tLQogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMxICsrKysKIFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDMgKwog
Li4uL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3BwICAgICAgICAgfCAgMTc0
ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblBy
b3ZpZGVyR2VvY2x1ZS5oICB8ICAgNjkgKysrKysrKysKIC4uLi9nZW9jbHVlL0dlb2xvY2F0aW9u
UHJvdmlkZXJHZW9jbHVlTGlzdGVuZXIuaCAgIHwgICAzNyArKysrKwogNiBmaWxlcyBjaGFuZ2Vk
LCAzMTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyLmgKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggM2Q0ZWM1NC4uOGRlODUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA1
LTI5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQgZ2VvbG9jYXRpb24g
cHJvdmlkZXIgaW4gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODc4MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQgZ2VvbG9jYXRp
b24gcHJvdmlkZXIgdG8gV2ViQ29yZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9H
ZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0UG9zaXRp
b25DYWxsYmFjayk6CisgICAgICAgIChwb3NpdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAgICAg
IChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUp
OgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6On5HZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZSk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RhcnRV
cGRhdGluZyk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RvcFVwZGF0
aW5nKToKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzZXRFbmFibGVIaWdo
QWNjdXJhY3kpOgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEdlb2Ns
dWVDbGllbnQpOgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEdlb2Ns
dWVQb3NpdGlvbik6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6dXBkYXRl
Q2xpZW50UmVxdWlyZW1lbnRzKToKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVl
Ojpwb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6
OmVycm9yT2NjdXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblBy
b3ZpZGVyR2VvY2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR2Vv
bG9jYXRpb25Qcm92aWRlckdlb2NsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dlb2NsdWUvR2Vv
bG9jYXRpb25Qcm92aWRlckdlb2NsdWVMaXN0ZW5lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVMaXN0ZW5lcik6CisKIDIw
MTItMDUtMzAgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XSBJbWFnZURlY29kZXJRdCBkb2Vzbid0IHN1cHBvcnQgc29tZSBkZWNv
ZGVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYTk3ZDI0Zi4uODM2OGM2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTEwNyw2ICsxMDcsNyBAQCB3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwK
IAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ayBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lciBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2VvY2x1ZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dseCBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM3ODQyYWYu
LmJiZGZiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDcwNSw2ICs0NzA1
LDkgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9E
cmFnQ29udHJvbGxlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFu
ZGxlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tp
bmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9u
UHJvdmlkZXJHZW9jbHVlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2Vv
bG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
ZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlTGlzdGVuZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDYWlyby5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjY4YjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJv
dmlkZXJHZW9jbHVlLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuaCIKKworI2lmIEVOQUJMRShHRU9MT0NBVElP
TikKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK3N0YXRpYyB2b2lkIGdldFBvc2l0aW9uQ2FsbGJhY2soR2VvY2x1ZVBvc2l0
aW9uKiBwb3NpdGlvbiwgR2VvY2x1ZVBvc2l0aW9uRmllbGRzIGZpZWxkcywgaW50IHRpbWVzdGFt
cCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIEdl
b2NsdWVBY2N1cmFjeSogYWNjdXJhY3ksIEdFcnJvciogZXJyb3IsIEdlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlKiBwcm92aWRlcikKK3sKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcHJvdmlk
ZXItPmVycm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZShl
cnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHJvdmlkZXItPnBvc2l0aW9uQ2hh
bmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFs
dGl0dWRlLCBhY2N1cmFjeSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvc2l0aW9uQ2hhbmdlZENhbGxi
YWNrKEdlb2NsdWVQb3NpdGlvbiogcG9zaXRpb24sIEdlb2NsdWVQb3NpdGlvbkZpZWxkcyBmaWVs
ZHMsIGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5LCBHZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZSogcHJvdmlkZXIpCit7CisgICAgcHJvdmlkZXItPnBvc2l0aW9uQ2hhbmdlZChw
b3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRl
LCBhY2N1cmFjeSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZVBvc2l0aW9uQ2FsbGJhY2soR2Vv
Y2x1ZU1hc3RlckNsaWVudCosIEdlb2NsdWVQb3NpdGlvbiogcG9zaXRpb24sIEdFcnJvciAqZXJy
b3IsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUqIHBy
b3ZpZGVyID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUqPihkYXRhKTsK
KyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcHJvdmlkZXItPmVycm9yT2NjdXJlZChlcnJvci0+
bWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHJvdmlkZXItPnNldEdlb2Ns
dWVQb3NpdGlvbihwb3NpdGlvbik7CisKKyAgICBnZW9jbHVlX3Bvc2l0aW9uX2dldF9wb3NpdGlv
bl9hc3luYyhwb3NpdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHZW9jbHVlUG9zaXRpb25DYWxsYmFj
az4oZ2V0UG9zaXRpb25DYWxsYmFjayksIHByb3ZpZGVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHBvc2l0aW9uLCAicG9zaXRpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0socG9zaXRpb25DaGFuZ2Vk
Q2FsbGJhY2spLCBwcm92aWRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudFNldFJlcXVpcmVt
ZW50c0NhbGxiYWNrKEdlb2NsdWVNYXN0ZXJDbGllbnQqIGNsaWVudCwgR0Vycm9yKiBlcnJvciwg
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSogcHJvdmlk
ZXIgPSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSo+KGRhdGEpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBwcm92aWRlci0+ZXJyb3JPY2N1cmVkKGVycm9yLT5tZXNz
YWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlQ2xp
ZW50Q2FsbGJhY2soR2VvY2x1ZU1hc3RlciosIEdlb2NsdWVNYXN0ZXJDbGllbnQqIGNsaWVudCwg
Y2hhciosIEdFcnJvciogZXJyb3IsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR2VvbG9jYXRpb25Q
cm92aWRlckdlb2NsdWUqIHByb3ZpZGVyID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25Qcm92aWRl
ckdlb2NsdWUqPihkYXRhKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcHJvdmlkZXItPmVy
cm9yT2NjdXJlZChlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
cHJvdmlkZXItPnNldEdlb2NsdWVDbGllbnQoY2xpZW50KTsKKyAgICBwcm92aWRlci0+dXBkYXRl
Q2xpZW50UmVxdWlyZW1lbnRzKCk7CisKKyAgICBnZW9jbHVlX21hc3Rlcl9jbGllbnRfY3JlYXRl
X3Bvc2l0aW9uX2FzeW5jKGNsaWVudCwgY3JlYXRlUG9zaXRpb25DYWxsYmFjaywgcHJvdmlkZXIp
OworfQorCitHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdl
b2NsdWUoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVMaXN0ZW5lciogbGlzdGVuZXIpCisgICAg
OiBtX2xpc3RlbmVyKGxpc3RlbmVyKQorICAgICwgbV9nZW9jbHVlQ2xpZW50KDApCisgICAgLCBt
X2dlb2NsdWVQb3NpdGlvbigwKQorICAgICwgbV9sYXRpdHVkZSgwKQorICAgICwgbV9sb25naXR1
ZGUoMCkKKyAgICAsIG1fYWx0aXR1ZGUoMCkKKyAgICAsIG1fYWNjdXJhY3koMCkKKyAgICAsIG1f
YWx0aXR1ZGVBY2N1cmFjeSgwKQorICAgICwgbV90aW1lc3RhbXAoMCkKKyAgICAsIG1fZW5hYmxl
SGlnaEFjY3VyYWN5KGZhbHNlKQorICAgICwgbV9pc1VwZGF0aW5nKGZhbHNlKQoreworICAgIEFT
U0VSVChtX2xpc3RlbmVyKTsKK30KKworR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6On5HZW9s
b2NhdGlvblByb3ZpZGVyR2VvY2x1ZSgpCit7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRl
ckdlb2NsdWU6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50
KTsKKworICAgIEdSZWZQdHI8R2VvY2x1ZU1hc3Rlcj4gbWFzdGVyID0gYWRvcHRHUmVmKGdlb2Ns
dWVfbWFzdGVyX2dldF9kZWZhdWx0KCkpOworICAgIGdlb2NsdWVfbWFzdGVyX2NyZWF0ZV9jbGll
bnRfYXN5bmMobWFzdGVyLmdldCgpLCBjcmVhdGVDbGllbnRDYWxsYmFjaywgdGhpcyk7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnN0b3BVcGRhdGluZygpCit7CisgICAg
aWYgKCFtX2dlb2NsdWVDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZ2VvY2x1ZVBv
c2l0aW9uLmNsZWFyKCk7CisgICAgbV9nZW9jbHVlQ2xpZW50LmNsZWFyKCk7CisgICAgbV9pc1Vw
ZGF0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNl
dEVuYWJsZUhpZ2hBY2N1cmFjeShib29sIGVuYWJsZSkKK3sKKyAgICBtX2VuYWJsZUhpZ2hBY2N1
cmFjeSA9IGVuYWJsZTsKKworICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgd2Ugc2hv
dWxkIHJlcG9ydCB0aGUgbmV3IHJlcXVpcmVtZW50cyBpbiBvcmRlcgorICAgIC8vIHRvIGNoYW5n
ZSB0byBhIG1vcmUgc3VpdGFibGUgcHJvdmlkZXIgaWYgbmVlZGVkLiBJZiBub3QsIHJldHVybi4K
KyAgICBpZiAoIW1faXNVcGRhdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQ2xp
ZW50UmVxdWlyZW1lbnRzKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6
OnNldEdlb2NsdWVDbGllbnQoR2VvY2x1ZU1hc3RlckNsaWVudCogZ2VvY2x1ZUNsaWVudCkKK3sK
KyAgICBtX2dlb2NsdWVDbGllbnQgPSBhZG9wdEdSZWYoZ2VvY2x1ZUNsaWVudCk7Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEdlb2NsdWVQb3NpdGlvbihHZW9jbHVl
UG9zaXRpb24qIGdlb2NsdWVQb3NpdGlvbikKK3sKKyAgICBtX2dlb2NsdWVQb3NpdGlvbiA9IGFk
b3B0R1JlZihnZW9jbHVlUG9zaXRpb24pOworICAgIG1faXNVcGRhdGluZyA9IHRydWU7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnVwZGF0ZUNsaWVudFJlcXVpcmVtZW50
cygpCit7CisgICAgR2VvY2x1ZUFjY3VyYWN5TGV2ZWwgYWNjdXJhY3lMZXZlbCA9IG1fZW5hYmxl
SGlnaEFjY3VyYWN5ID8gR0VPQ0xVRV9BQ0NVUkFDWV9MRVZFTF9ERVRBSUxFRCA6IEdFT0NMVUVf
QUNDVVJBQ1lfTEVWRUxfTE9DQUxJVFk7CisgICAgZ2VvY2x1ZV9tYXN0ZXJfY2xpZW50X3NldF9y
ZXF1aXJlbWVudHNfYXN5bmMobV9nZW9jbHVlQ2xpZW50LmdldCgpLCBhY2N1cmFjeUxldmVsLCAw
LCBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsIGNsaWVudFNldFJlcXVpcmVtZW50c0NhbGxi
YWNrLCB0aGlzKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6cG9zaXRp
b25DaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiogcG9zaXRpb24sIEdlb2NsdWVQb3NpdGlvbkZpZWxk
cyBmaWVsZHMsIGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5KQoreworICAgIGlm
ICghKGZpZWxkcyAmIEdFT0NMVUVfUE9TSVRJT05fRklFTERTX0xBVElUVURFICYmIGZpZWxkcyAm
IEdFT0NMVUVfUE9TSVRJT05fRklFTERTX0xPTkdJVFVERSkpIHsKKyAgICAgICAgZXJyb3JPY2N1
cmVkKCJQb3NpdGlvbiBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fdGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIG1fbGF0aXR1ZGUg
PSBsYXRpdHVkZTsKKyAgICBtX2xvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKyAgICBtX2FsdGl0dWRl
ID0gYWx0aXR1ZGU7CisKKyAgICBnZW9jbHVlX2FjY3VyYWN5X2dldF9kZXRhaWxzKGFjY3VyYWN5
LCAwLCAmbV9hY2N1cmFjeSwgJm1fYWx0aXR1ZGVBY2N1cmFjeSk7CisKKyAgICBtX2xpc3RlbmVy
LT5ub3RpZnlQb3NpdGlvbkNoYW5nZWQobV90aW1lc3RhbXAsIG1fbGF0aXR1ZGUsIG1fbG9uZ2l0
dWRlLCBtX2FsdGl0dWRlLCBtX2FjY3VyYWN5LCBtX2FsdGl0dWRlQWNjdXJhY3kpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjplcnJvck9jY3VyZWQoY29uc3QgY2hhciog
bWVzc2FnZSkKK3sKKyAgICBtX2xpc3RlbmVyLT5ub3RpZnlFcnJvck9jdXJyZWQobWVzc2FnZSk7
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0NWJjOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92
aWRlckdlb2NsdWUuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVfaAorI2RlZmlu
ZSBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZV9oCisKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04p
CisKKyNpbmNsdWRlICJHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyLmgiCisjaW5j
bHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLW1hc3Rlci5oPgorI2luY2x1ZGUgPGdlb2NsdWUvZ2VvY2x1
ZS1wb3NpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSB7CitwdWJs
aWM6CisgICAgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUoR2VvbG9jYXRpb25Qcm92aWRlckdl
b2NsdWVMaXN0ZW5lciopOworICAgIH5HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSgpOworCisg
ICAgdm9pZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAgICB2
b2lkIHNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sKTsKKworICAgIC8vIFRvIGJlIHVzZWQgZnJv
bSBzaWduYWwgY2FsbGJhY2tzLgorICAgIHZvaWQgc2V0R2VvY2x1ZUNsaWVudChHZW9jbHVlTWFz
dGVyQ2xpZW50Kik7CisgICAgdm9pZCBzZXRHZW9jbHVlUG9zaXRpb24oR2VvY2x1ZVBvc2l0aW9u
Kik7CisgICAgdm9pZCB1cGRhdGVDbGllbnRSZXF1aXJlbWVudHMoKTsKKyAgICB2b2lkIHBvc2l0
aW9uQ2hhbmdlZChHZW9jbHVlUG9zaXRpb24qLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMsIGludCwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgR2VvY2x1ZUFjY3VyYWN5Kik7CisgICAgdm9pZCBlcnJv
ck9jY3VyZWQoY29uc3QgY2hhciopOworCitwcml2YXRlOgorICAgIEdlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlTGlzdGVuZXIqIG1fbGlzdGVuZXI7CisKKyAgICBHUmVmUHRyPEdlb2NsdWVNYXN0
ZXJDbGllbnQ+IG1fZ2VvY2x1ZUNsaWVudDsKKyAgICBHUmVmUHRyPEdlb2NsdWVQb3NpdGlvbj4g
bV9nZW9jbHVlUG9zaXRpb247CisKKyAgICBkb3VibGUgbV9sYXRpdHVkZTsKKyAgICBkb3VibGUg
bV9sb25naXR1ZGU7CisgICAgZG91YmxlIG1fYWx0aXR1ZGU7CisgICAgZG91YmxlIG1fYWNjdXJh
Y3k7CisgICAgZG91YmxlIG1fYWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBpbnQgbV90aW1lc3RhbXA7
CisKKyAgICBib29sIG1fZW5hYmxlSGlnaEFjY3VyYWN5OworICAgIGJvb2wgbV9pc1VwZGF0aW5n
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdFT0xP
Q0FUSU9OKQorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVy
R2VvY2x1ZUxpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xv
Y2F0aW9uUHJvdmlkZXJHZW9jbHVlTGlzdGVuZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43ZWQ0MjMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyLmgKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlTGlzdGVuZXJfaAorI2RlZmluZSBHZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZUxpc3RlbmVyX2gKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxp
c3RlbmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUVycm9yT2N1cnJlZChjb25zdCBjaGFyKiBtZXNzYWdl
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
R0VPTE9DQVRJT04pCisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUxpc3Rl
bmVyX2gKLS0gCjEuNy4xMC4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145321</attachid>
            <date>2012-06-01 09:00:15 -0700</date>
            <delta_ts>2012-06-01 09:55:04 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-06-01-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>16738</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1NmFhMzUxOTFiZTBmNWZjMGYwM2IwMzU4MWVmNDFmMDU3MzE0ZjI1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDMwIE1heSAyMDEyIDAyOjIwOjEwICswMjAwClN1YmplY3Q6IFtQQVRD
SCAxLzRdIDIwMTItMDYtMDEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBbR1RLXSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQg
Z2VvbG9jYXRpb24gcHJvdmlkZXIgaW4gV2ViQ29yZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgwMAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KCiAgICAgICAgQWRkZWQgbmV3IGFuZCByZXVzYWJsZSBHZW9jbHVlLWJhc2VkIGdl
b2xvY2F0aW9uIHByb3ZpZGVyIHRvIFdlYkNvcmUuCgogICAgICAgICogR05VbWFrZWZpbGUuYW06
CiAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgogICAgICAgICogcGxhdGZvcm0vZ2VvY2x1
ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHA6IEFkZGVkLgogICAgICAgIChnZXRQb3Np
dGlvbkNhbGxiYWNrKToKICAgICAgICAocG9zaXRpb25DaGFuZ2VkQ2FsbGJhY2spOgogICAgICAg
IChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUp
OgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6fkdlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnN0YXJ0VXBk
YXRpbmcpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c3RvcFVwZGF0aW5n
KToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEVuYWJsZUhpZ2hBY2N1
cmFjeSk6CiAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzZXRHZW9jbHVlQ2xp
ZW50KToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEdlb2NsdWVQb3Np
dGlvbik6CiAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjp1cGRhdGVDbGllbnRS
ZXF1aXJlbWVudHMpOgogICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6cG9zaXRp
b25DaGFuZ2VkKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OmVycm9yT2Nj
dXJlZCk6CiAgICAgICAgKiBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlLmg6IEFkZGVkLgogICAgICAgIChXZWJDb3JlKToKICAgICAgICAoR2VvbG9jYXRpb25Qcm92
aWRlckdlb2NsdWUpOgogICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZUNsaWVudC5oOiBBZGRlZC4KICAgICAgICAoV2ViQ29yZSk6CiAgICAgICAgKEdl
b2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlQ2xpZW50KToKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKysrKwogU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4v
Z2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHAgICAgICAgICB8ICAxODIgKysr
KysrKysrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlLmggIHwgICA2OSArKysrKysrKwogLi4uL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92
aWRlckdlb2NsdWVDbGllbnQuaCAgICAgfCAgIDM3ICsrKysKIDYgZmlsZXMgY2hhbmdlZCwgMzIz
IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdl
b2NsdWUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2Ns
dWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVDbGllbnQuaAoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMDVl
ODlmLi42NGY2ZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDYtMDEgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IEFkZCBhIG5ldyBhbmQgcmV1c2FibGUgR2VvY2x1ZS1iYXNlZCBnZW9sb2NhdGlvbiBwcm92aWRl
ciBpbiBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NzgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIG5ldyBhbmQgcmV1c2FibGUgR2VvY2x1ZS1iYXNlZCBnZW9sb2NhdGlvbiBwcm92
aWRlciB0byBXZWJDb3JlLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0
aW9uUHJvdmlkZXJHZW9jbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRQb3NpdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKHBvc2l0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKEdlb2xv
Y2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSk6CisgICAg
ICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6fkdlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlKToKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzdGFydFVwZGF0aW5n
KToKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjpzdG9wVXBkYXRpbmcpOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEVuYWJsZUhpZ2hBY2N1cmFj
eSk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c2V0R2VvY2x1ZUNsaWVu
dCk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6c2V0R2VvY2x1ZVBvc2l0
aW9uKToKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlOjp1cGRhdGVDbGllbnRS
ZXF1aXJlbWVudHMpOgorICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnBvc2l0
aW9uQ2hhbmdlZCk6CisgICAgICAgIChHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6ZXJyb3JP
Y2N1cmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVDbGllbnQpOgorCiAyMDEyLTA1LTMxICBK
dWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gYSBjb2x1bW4gYW5kIGEgY29sdW1uIGdyb3VwIHJlbmRlcmVyIGlz
IGJhZGx5IGRyYXduCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE5N2QyNGYuLjgzNjhjNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDcsNiArMTA3LDcgQEAgd2ViY29yZWd0a19jcHBmbGFn
cyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsgXAogCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nbHggXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lciBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5
YTk4YmEwLi43MjU3YmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ3MDcs
NiArNDcwNyw5IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGFn
ZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9F
dmVudEhhbmRsZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmUuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9s
b2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9j
bHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUNsaWVudC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJHV29ybGQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhYzY1MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRp
b25Qcm92aWRlckdlb2NsdWUuY3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5oIgorCisjaWYgRU5BQkxFKEdFT0xP
Q0FUSU9OKQorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworc3RhdGljIHZvaWQgZ2V0UG9zaXRpb25DYWxsYmFjayhHZW9jbHVl
UG9zaXRpb24qIHBvc2l0aW9uLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMgZmllbGRzLCBpbnQgdGlt
ZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhbHRpdHVk
ZSwgR2VvY2x1ZUFjY3VyYWN5KiBhY2N1cmFjeSwgR0Vycm9yKiBlcnJvciwgR2VvbG9jYXRpb25Q
cm92aWRlckdlb2NsdWUqIHByb3ZpZGVyKQoreworICAgIGlmIChlcnJvcikgeworICAgICAgICBw
cm92aWRlci0+ZXJyb3JPY2N1cnJlZChlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3Jf
ZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHJvdmlkZXItPnBvc2l0
aW9uQ2hhbmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1
ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvc2l0aW9uQ2hhbmdl
ZENhbGxiYWNrKEdlb2NsdWVQb3NpdGlvbiogcG9zaXRpb24sIEdlb2NsdWVQb3NpdGlvbkZpZWxk
cyBmaWVsZHMsIGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJhY3kqIGFjY3VyYWN5LCBHZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZSogcHJvdmlkZXIpCit7CisgICAgcHJvdmlkZXItPnBvc2l0aW9uQ2hh
bmdlZChwb3NpdGlvbiwgZmllbGRzLCB0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFs
dGl0dWRlLCBhY2N1cmFjeSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUdlb2NsdWVQb3NpdGlv
bkNhbGxiYWNrKEdlb2NsdWVNYXN0ZXJDbGllbnQqLCBHZW9jbHVlUG9zaXRpb24qIHBvc2l0aW9u
LCBHRXJyb3IgKmVycm9yLCBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZSogcHJvdmlkZXIpCit7
CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIHByb3ZpZGVyLT5lcnJvck9jY3VycmVkKGVycm9y
LT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBwcm92aWRlci0+aW5pdGlhbGl6ZUdlb2NsdWVQb3NpdGlvbihwb3NpdGlv
bik7Cit9CisKK3N0YXRpYyB2b2lkIGdlb2NsdWVDbGllbnRTZXRSZXF1aXJlbWVudHNDYWxsYmFj
ayhHZW9jbHVlTWFzdGVyQ2xpZW50KiBjbGllbnQsIEdFcnJvciogZXJyb3IsIEdlb2xvY2F0aW9u
UHJvdmlkZXJHZW9jbHVlKiBwcm92aWRlcikKK3sKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
cHJvdmlkZXItPmVycm9yT2NjdXJyZWQoZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9y
X2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBj
cmVhdGVHZW9jbHVlQ2xpZW50Q2FsbGJhY2soR2VvY2x1ZU1hc3RlciosIEdlb2NsdWVNYXN0ZXJD
bGllbnQqIGNsaWVudCwgY2hhciosIEdFcnJvciogZXJyb3IsIEdlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlKiBwcm92aWRlcikKK3sKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcHJvdmlkZXIt
PmVycm9yT2NjdXJyZWQoZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJy
b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHByb3ZpZGVyLT5pbml0aWFsaXplR2Vv
Y2x1ZUNsaWVudChjbGllbnQpOworfQorCitHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTo6R2Vv
bG9jYXRpb25Qcm92aWRlckdlb2NsdWUoR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVDbGllbnQq
IGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZ2VvY2x1ZUNsaWVudCgw
KQorICAgICwgbV9nZW9jbHVlUG9zaXRpb24oMCkKKyAgICAsIG1fbGF0aXR1ZGUoMCkKKyAgICAs
IG1fbG9uZ2l0dWRlKDApCisgICAgLCBtX2FsdGl0dWRlKDApCisgICAgLCBtX2FjY3VyYWN5KDAp
CisgICAgLCBtX2FsdGl0dWRlQWNjdXJhY3koMCkKKyAgICAsIG1fdGltZXN0YW1wKDApCisgICAg
LCBtX2VuYWJsZUhpZ2hBY2N1cmFjeShmYWxzZSkKKyAgICAsIG1faXNVcGRhdGluZyhmYWxzZSkK
K3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworfQorCitHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1
ZTo6fkdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlKCkKK3sKK30KKwordm9pZCBHZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZTo6c3RhcnRVcGRhdGluZygpCit7CisgICAgQVNTRVJUKCFtX2dlb2Ns
dWVDbGllbnQpOworCisgICAgR1JlZlB0cjxHZW9jbHVlTWFzdGVyPiBtYXN0ZXIgPSBhZG9wdEdS
ZWYoZ2VvY2x1ZV9tYXN0ZXJfZ2V0X2RlZmF1bHQoKSk7CisgICAgZ2VvY2x1ZV9tYXN0ZXJfY3Jl
YXRlX2NsaWVudF9hc3luYyhtYXN0ZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R2VvY2x1ZUNy
ZWF0ZUNsaWVudENhbGxiYWNrPihjcmVhdGVHZW9jbHVlQ2xpZW50Q2FsbGJhY2spLCB0aGlzKTsK
KyAgICBtX2lzVXBkYXRpbmcgPSB0cnVlOworfQorCit2b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlOjpzdG9wVXBkYXRpbmcoKQoreworICAgIG1fZ2VvY2x1ZVBvc2l0aW9uLmNsZWFyKCk7
CisgICAgbV9nZW9jbHVlQ2xpZW50LmNsZWFyKCk7CisgICAgbV9pc1VwZGF0aW5nID0gZmFsc2U7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OnNldEVuYWJsZUhpZ2hBY2N1
cmFjeShib29sIGVuYWJsZSkKK3sKKyAgICBtX2VuYWJsZUhpZ2hBY2N1cmFjeSA9IGVuYWJsZTsK
KworICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgd2Ugc2hvdWxkIHJlcG9ydCB0aGUg
bmV3IHJlcXVpcmVtZW50cyBpbiBvcmRlcgorICAgIC8vIHRvIGNoYW5nZSB0byBhIG1vcmUgc3Vp
dGFibGUgcHJvdmlkZXIgaWYgbmVlZGVkLiBJZiBub3QsIHJldHVybi4KKyAgICBpZiAoIW1faXNV
cGRhdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQ2xpZW50UmVxdWlyZW1lbnRz
KCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OmluaXRpYWxpemVHZW9j
bHVlQ2xpZW50KEdlb2NsdWVNYXN0ZXJDbGllbnQqIGdlb2NsdWVDbGllbnQpCit7CisgICAgQVNT
RVJUKEdFT0NMVUVfSVNfTUFTVEVSX0NMSUVOVChnZW9jbHVlQ2xpZW50KSk7CisKKyAgICAvLyBT
dG9yZSB0aGUgR2VvY2x1ZU1hc3RlckNsaWVudCBvYmplY3QgYXMgY3JlYXRlZCBieSBHZW9DbHVl
LgorICAgIG1fZ2VvY2x1ZUNsaWVudCA9IGFkb3B0R1JlZihnZW9jbHVlQ2xpZW50KTsKKworICAg
IC8vIFNldCB0aGUgcmVxdWlyZW1lbnQgZm9yIHRoZSBjbGllbnQgYW5kIGFzayBpdCB0byBjcmVh
dGUgYSBwb3NpdGlvbiBhc3NvY2lhdGVkIHRvIGl0LgorICAgIHVwZGF0ZUNsaWVudFJlcXVpcmVt
ZW50cygpOworICAgIGdlb2NsdWVfbWFzdGVyX2NsaWVudF9jcmVhdGVfcG9zaXRpb25fYXN5bmMo
bV9nZW9jbHVlQ2xpZW50LmdldCgpLCByZWludGVycHJldF9jYXN0PENyZWF0ZVBvc2l0aW9uQ2Fs
bGJhY2s+KGNyZWF0ZUdlb2NsdWVQb3NpdGlvbkNhbGxiYWNrKSwgdGhpcyk7Cit9CisKK3ZvaWQg
R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OmluaXRpYWxpemVHZW9jbHVlUG9zaXRpb24oR2Vv
Y2x1ZVBvc2l0aW9uKiBnZW9jbHVlUG9zaXRpb24pCit7CisgICAgQVNTRVJUKEdFT0NMVUVfSVNf
UE9TSVRJT04oZ2VvY2x1ZVBvc2l0aW9uKSk7CisKKyAgICAvLyBTdG9yZXMgdGhlIEdlb2NsdWVQ
b3NpdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW9jbHVlTWFzdGVyQ2xpZW50Lgor
ICAgIG1fZ2VvY2x1ZVBvc2l0aW9uID0gYWRvcHRHUmVmKGdlb2NsdWVQb3NpdGlvbik7CisKKyAg
ICAvLyBHZXQgdGhlIGluaXRpYWwgcG9zaXRpb24gYW5kIGtlZXAgdXBkYXRlZCBvZiBmdXJ0aGVy
IGNoYW5nZXMuCisgICAgZ2VvY2x1ZV9wb3NpdGlvbl9nZXRfcG9zaXRpb25fYXN5bmMobV9nZW9j
bHVlUG9zaXRpb24uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R2VvY2x1ZVBvc2l0aW9uQ2FsbGJh
Y2s+KGdldFBvc2l0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
Z2VvY2x1ZVBvc2l0aW9uLmdldCgpLCAicG9zaXRpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0socG9z
aXRpb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZTo6dXBkYXRlQ2xpZW50UmVxdWlyZW1lbnRzKCkKK3sKKyAgICBpZiAoIW1fZ2Vv
Y2x1ZUNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2VvY2x1ZUFjY3VyYWN5TGV2ZWwg
YWNjdXJhY3lMZXZlbCA9IG1fZW5hYmxlSGlnaEFjY3VyYWN5ID8gR0VPQ0xVRV9BQ0NVUkFDWV9M
RVZFTF9ERVRBSUxFRCA6IEdFT0NMVUVfQUNDVVJBQ1lfTEVWRUxfTE9DQUxJVFk7CisgICAgZ2Vv
Y2x1ZV9tYXN0ZXJfY2xpZW50X3NldF9yZXF1aXJlbWVudHNfYXN5bmMobV9nZW9jbHVlQ2xpZW50
LmdldCgpLCBhY2N1cmFjeUxldmVsLCAwLCBmYWxzZSwgR0VPQ0xVRV9SRVNPVVJDRV9BTEwsIHJl
aW50ZXJwcmV0X2Nhc3Q8R2VvY2x1ZVNldFJlcXVpcmVtZW50c0NhbGxiYWNrPihnZW9jbHVlQ2xp
ZW50U2V0UmVxdWlyZW1lbnRzQ2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBHZW9sb2NhdGlv
blByb3ZpZGVyR2VvY2x1ZTo6cG9zaXRpb25DaGFuZ2VkKEdlb2NsdWVQb3NpdGlvbiogcG9zaXRp
b24sIEdlb2NsdWVQb3NpdGlvbkZpZWxkcyBmaWVsZHMsIGludCB0aW1lc3RhbXAsIGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBHZW9jbHVlQWNjdXJh
Y3kqIGFjY3VyYWN5KQoreworICAgIGlmICghKGZpZWxkcyAmIEdFT0NMVUVfUE9TSVRJT05fRklF
TERTX0xBVElUVURFICYmIGZpZWxkcyAmIEdFT0NMVUVfUE9TSVRJT05fRklFTERTX0xPTkdJVFVE
RSkpIHsKKyAgICAgICAgZXJyb3JPY2N1cnJlZCgiUG9zaXRpb24gY291bGQgbm90IGJlIGRldGVy
bWluZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3RpbWVzdGFtcCA9IHRp
bWVzdGFtcDsKKyAgICBtX2xhdGl0dWRlID0gbGF0aXR1ZGU7CisgICAgbV9sb25naXR1ZGUgPSBs
b25naXR1ZGU7CisgICAgbV9hbHRpdHVkZSA9IGFsdGl0dWRlOworCisgICAgZ2VvY2x1ZV9hY2N1
cmFjeV9nZXRfZGV0YWlscyhhY2N1cmFjeSwgMCwgJm1fYWNjdXJhY3ksICZtX2FsdGl0dWRlQWNj
dXJhY3kpOworCisgICAgbV9jbGllbnQtPm5vdGlmeVBvc2l0aW9uQ2hhbmdlZChtX3RpbWVzdGFt
cCwgbV9sYXRpdHVkZSwgbV9sb25naXR1ZGUsIG1fYWx0aXR1ZGUsIG1fYWNjdXJhY3ksIG1fYWx0
aXR1ZGVBY2N1cmFjeSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWU6OmVy
cm9yT2NjdXJyZWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBtX2NsaWVudC0+bm90aWZ5
RXJyb3JPY2N1cnJlZChtZXNzYWdlKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElP
TikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRp
b25Qcm92aWRlckdlb2NsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2Vv
bG9jYXRpb25Qcm92aWRlckdlb2NsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40YTc3NDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvblBy
b3ZpZGVyR2VvY2x1ZV9oCisjZGVmaW5lIEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlX2gKKwor
I2lmIEVOQUJMRShHRU9MT0NBVElPTikKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlQ2xpZW50LmgiCisjaW5jbHVkZSA8Z2VvY2x1ZS9nZW9jbHVlLW1hc3Rlci5oPgorI2lu
Y2x1ZGUgPGdlb2NsdWUvZ2VvY2x1ZS1wb3NpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblBy
b3ZpZGVyR2VvY2x1ZSB7CitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUo
R2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVDbGllbnQqKTsKKyAgICB+R2VvbG9jYXRpb25Qcm92
aWRlckdlb2NsdWUoKTsKKworICAgIHZvaWQgc3RhcnRVcGRhdGluZygpOworICAgIHZvaWQgc3Rv
cFVwZGF0aW5nKCk7CisgICAgdm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCk7CisKKyAg
ICAvLyBUbyBiZSB1c2VkIGZyb20gc2lnbmFsIGNhbGxiYWNrcy4KKyAgICB2b2lkIGluaXRpYWxp
emVHZW9jbHVlQ2xpZW50KEdlb2NsdWVNYXN0ZXJDbGllbnQqKTsKKyAgICB2b2lkIGluaXRpYWxp
emVHZW9jbHVlUG9zaXRpb24oR2VvY2x1ZVBvc2l0aW9uKik7CisgICAgdm9pZCB1cGRhdGVDbGll
bnRSZXF1aXJlbWVudHMoKTsKKyAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZChHZW9jbHVlUG9zaXRp
b24qLCBHZW9jbHVlUG9zaXRpb25GaWVsZHMsIGludCwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwg
R2VvY2x1ZUFjY3VyYWN5Kik7CisgICAgdm9pZCBlcnJvck9jY3VycmVkKGNvbnN0IGNoYXIqKTsK
KworcHJpdmF0ZToKKyAgICBHZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUNsaWVudCogbV9jbGll
bnQ7CisKKyAgICBHUmVmUHRyPEdlb2NsdWVNYXN0ZXJDbGllbnQ+IG1fZ2VvY2x1ZUNsaWVudDsK
KyAgICBHUmVmUHRyPEdlb2NsdWVQb3NpdGlvbj4gbV9nZW9jbHVlUG9zaXRpb247CisKKyAgICBk
b3VibGUgbV9sYXRpdHVkZTsKKyAgICBkb3VibGUgbV9sb25naXR1ZGU7CisgICAgZG91YmxlIG1f
YWx0aXR1ZGU7CisgICAgZG91YmxlIG1fYWNjdXJhY3k7CisgICAgZG91YmxlIG1fYWx0aXR1ZGVB
Y2N1cmFjeTsKKyAgICBpbnQgbV90aW1lc3RhbXA7CisKKyAgICBib29sIG1fZW5hYmxlSGlnaEFj
Y3VyYWN5OworICAgIGJvb2wgbV9pc1VwZGF0aW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQorCisjZW5kaWYgLy8gR2VvbG9j
YXRpb25Qcm92aWRlckdlb2NsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUNsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZUNsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjllMjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlk
ZXJHZW9jbHVlQ2xpZW50LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlQ2xpZW50
X2gKKyNkZWZpbmUgR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWVDbGllbnRfaAorCisjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xvY2F0
aW9uUHJvdmlkZXJHZW9jbHVlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGludCB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGRvdWJsZSBhbHRp
dHVkZUFjY3VyYWN5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUVycm9yT2NjdXJyZWQo
Y29uc3QgY2hhciogbWVzc2FnZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25Q
cm92aWRlckdlb2NsdWVDbGllbnRfaAotLSAKMS43LjEwLjIKCg==
</data>
<flag name="review"
          id="152417"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>