<?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>101193</bug_id>
          
          <creation_ts>2012-11-05 01:32:29 -0800</creation_ts>
          <short_desc>[EFL][WK2] Add ewk_database_manager APIs</short_desc>
          <delta_ts>2012-11-06 16:33:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61838</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jihye Kang">jye.kang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jiyeon0402.kim</cc>
    
    <cc>jye.kang</cc>
    
    <cc>kihong.kwon</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sunaeluv.kim</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>758327</commentid>
    <comment_count>0</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-05 01:32:29 -0800</bug_when>
    <thetext>Add ewk_database_manager API to manage web database on webkit2 efl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759080</commentid>
    <comment_count>1</comment_count>
      <attachid>172452</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-05 17:32:00 -0800</bug_when>
    <thetext>Created attachment 172452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759333</commentid>
    <comment_count>2</comment_count>
      <attachid>172452</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-06 00:12:54 -0800</bug_when>
    <thetext>Comment on attachment 172452
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt; +struct Ewk_Database_Origins_Async_Get_Context {

Can&apos;t we use class instead of struct ? As you know, EFL port start to use class for internal usage.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.h:69
&gt; +

Unneeded line.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager_private.h:46
&gt; +    explicit Ewk_Database_Manager(WKDatabaseManagerRef wkDatabaseManagerRef);

It looks wkDatabaseManagerRef is not meaningful. Generally, WebKit has been omitted parameter name when there is no meaning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759357</commentid>
    <comment_count>3</comment_count>
      <attachid>172452</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-06 00:55:23 -0800</bug_when>
    <thetext>Comment on attachment 172452
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt; +    Ewk_Database_Manager* databaseManager() const;

Should not be const as per WebKit coding style.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:44
&gt; +void Ewk_Database_Manager::getDatabaseOrigins(void* context, WKDatabaseManagerGetDatabaseOriginsFunction callback) const

We usually pass user data *after* the callback, not before.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt;&gt; +struct Ewk_Database_Origins_Async_Get_Context {
&gt; 
&gt; Can&apos;t we use class instead of struct ? As you know, EFL port start to use class for internal usage.

It&apos;s only a callback struct, I think it is OK to leave it as is. We still use structs for this case in the rest of the code I believe.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:81
&gt; +    Eina_List* originList = 0;

Should be declared when it is used below. This is nicer C++ style.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:29
&gt; +#include &lt;EWebKit2.h&gt;

You forgot to add ewk_database_manager.h to &lt;EWebKit2.h&gt;.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:31
&gt; +#include &lt;gtest/gtest.h&gt;

Do we really need this header?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:40
&gt; +    unsigned timeToCheck;

Bad variable name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759380</commentid>
    <comment_count>4</comment_count>
      <attachid>172452</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-11-06 01:27:45 -0800</bug_when>
    <thetext>Comment on attachment 172452
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt;&gt; +    Ewk_Database_Manager* databaseManager() const;
&gt; 
&gt; Should not be const as per WebKit coding style.

or should return const pointer, as far as I see there are only const methods in the interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759393</commentid>
    <comment_count>5</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 01:35:35 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 172452 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172452&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt; &gt; +struct Ewk_Database_Origins_Async_Get_Context {
&gt; 
&gt; Can&apos;t we use class instead of struct ? As you know, EFL port start to use class for internal usage.

Can I keep this as struct? As Christopher said, it&apos;s a callback struct and it is the same style on other codes.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.h:69
&gt; &gt; +
&gt; 
&gt; Unneeded line.

Will remove.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager_private.h:46
&gt; &gt; +    explicit Ewk_Database_Manager(WKDatabaseManagerRef wkDatabaseManagerRef);
&gt; 
&gt; It looks wkDatabaseManagerRef is not meaningful. Generally, WebKit has been omitted parameter name when there is no meaning.

I will remove wk prefix on variable/parameter names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759400</commentid>
    <comment_count>6</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 01:43:11 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 172452 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172452&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt; &gt;&gt; +    Ewk_Database_Manager* databaseManager() const;
&gt; &gt; 
&gt; &gt; Should not be const as per WebKit coding style.
&gt; 
&gt; or should return const pointer, as far as I see there are only const methods in the interface

But I might add non-const methods in database manager interface later. So I think I need to use const_cast on getter for database manager rather than making databaseManager() as const function. Is it webkit preferred style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759412</commentid>
    <comment_count>7</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 01:50:50 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 172452 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172452&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt; &gt; +    Ewk_Database_Manager* databaseManager() const;
&gt; 
&gt; Should not be const as per WebKit coding style.

Ok. Then I need to use const_cast on getter of database manager.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:44
&gt; &gt; +void Ewk_Database_Manager::getDatabaseOrigins(void* context, WKDatabaseManagerGetDatabaseOriginsFunction callback) const
&gt; 
&gt; We usually pass user data *after* the callback, not before.

I will change the parameter&apos;s order.

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt; &gt;&gt; +struct Ewk_Database_Origins_Async_Get_Context {
&gt; &gt; 
&gt; &gt; Can&apos;t we use class instead of struct ? As you know, EFL port start to use class for internal usage.
&gt; 
&gt; It&apos;s only a callback struct, I think it is OK to leave it as is. We still use structs for this case in the rest of the code I believe.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:81
&gt; &gt; +    Eina_List* originList = 0;
&gt; 
&gt; Should be declared when it is used below. This is nicer C++ style.
&gt; 

I will change to decleare and use in the same place below.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:29
&gt; &gt; +#include &lt;EWebKit2.h&gt;
&gt; 
&gt; You forgot to add ewk_database_manager.h to &lt;EWebKit2.h&gt;.
&gt;

Thanks! I&apos;ll add it to EWebKit2.h.
 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:31
&gt; &gt; +#include &lt;gtest/gtest.h&gt;
&gt; 
&gt; Do we really need this header?

I will remove it. 

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:40
&gt; &gt; +    unsigned timeToCheck;
&gt; 
&gt; Bad variable name.

I&apos;m trying to find a good name. Do you have any suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759431</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-11-06 02:08:49 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 172452 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172452&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt; &gt; &gt;&gt; +    Ewk_Database_Manager* databaseManager() const;
&gt; &gt; &gt; 
&gt; &gt; &gt; Should not be const as per WebKit coding style.
&gt; &gt; 
&gt; &gt; or should return const pointer, as far as I see there are only const methods in the interface
&gt; 
&gt; But I might add non-const methods in database manager interface later. So I think I need to use const_cast on getter for database manager rather than making databaseManager() as const function. Is it webkit preferred style?

which other methods would you need? 
if so, you will add another method: Ewk_Database_Manager* databaseManager();
and invoke it from non-const pointer to context.

In general const_cast is better, as it makes it obvious that you break constness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759447</commentid>
    <comment_count>9</comment_count>
      <attachid>172452</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-06 02:36:55 -0800</bug_when>
    <thetext>Comment on attachment 172452
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:40
&gt;&gt;&gt; +    unsigned timeToCheck;
&gt;&gt; 
&gt;&gt; Bad variable name.
&gt; 
&gt; I&apos;m trying to find a good name. Do you have any suggestion?

This is basically a timeout in seconds right? (since you&apos;re using a timer with 1 second). How about &quot;timeoutSeconds&quot; then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759478</commentid>
    <comment_count>10</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 03:14:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 172452 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172452&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt; &gt; &gt; &gt;&gt; +    Ewk_Database_Manager* databaseManager() const;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Should not be const as per WebKit coding style.
&gt; &gt; &gt; 
&gt; &gt; &gt; or should return const pointer, as far as I see there are only const methods in the interface
&gt; &gt; 
&gt; &gt; But I might add non-const methods in database manager interface later. So I think I need to use const_cast on getter for database manager rather than making databaseManager() as const function. Is it webkit preferred style?
&gt; 
&gt; which other methods would you need? 
&gt; if so, you will add another method: Ewk_Database_Manager* databaseManager();
&gt; and invoke it from non-const pointer to context.
&gt; 
&gt; In general const_cast is better, as it makes it obvious that you break constness.
some kind of clear and setting methods. 
So I need to use const cast. Thanks for the advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759480</commentid>
    <comment_count>11</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 03:19:00 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 172452 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172452&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:40
&gt; &gt;&gt;&gt; +    unsigned timeToCheck;
&gt; &gt;&gt; 
&gt; &gt;&gt; Bad variable name.
&gt; &gt; 
&gt; &gt; I&apos;m trying to find a good name. Do you have any suggestion?
&gt; 
&gt; This is basically a timeout in seconds right? (since you&apos;re using a timer with 1 second). How about &quot;timeoutSeconds&quot; then?
Yes. It is basically a timeout in seconds and it is reduced every seconds. Thanks for the suggestion. I will use &quot;timeoutSeconds&quot;. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759528</commentid>
    <comment_count>12</comment_count>
      <attachid>172550</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 04:38:34 -0800</bug_when>
    <thetext>Created attachment 172550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759544</commentid>
    <comment_count>13</comment_count>
      <attachid>172550</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-06 04:55:53 -0800</bug_when>
    <thetext>Comment on attachment 172550
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:190
&gt; + * @param context context object to query.

Do not use . at the end of line. We haven&apos;t been used . at @ field.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:192
&gt; + * @return Ewk_Database_Manager object instance or @c NULL in case of failure.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt; +struct Ewk_Database_Origins_Async_Get_Context {

If this struct is used for callback, don&apos;t you need to add this to below ?

http://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h#L34

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.h:48
&gt; + * @brief Callback type for use with ewk_database_manager_origins_get().

ditto ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager_private.h:46
&gt; +    explicit Ewk_Database_Manager(WKDatabaseManagerRef databaseManagerRef);

It looks databseManagerRef is not meaningful. I think Data type is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759552</commentid>
    <comment_count>14</comment_count>
      <attachid>172550</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-06 05:04:51 -0800</bug_when>
    <thetext>Comment on attachment 172550
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt;&gt; +struct Ewk_Database_Origins_Async_Get_Context {
&gt; 
&gt; If this struct is used for callback, don&apos;t you need to add this to below ?
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h#L34

EwkViewCallbacks.h is only for smart callbacks (and only for the view). Ewk_Database_Origins_Async_Get_Context is merely internal user data for a WK API callback. I think it is correct as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759560</commentid>
    <comment_count>15</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 05:30:43 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 172550 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172550&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:190
&gt; &gt; + * @param context context object to query.
&gt; 
&gt; Do not use . at the end of line. We haven&apos;t been used . at @ field.

I will follow the policy.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:192
&gt; &gt; + * @return Ewk_Database_Manager object instance or @c NULL in case of failure.
&gt; 
&gt; ditto.

I will follow the policy.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp:67
&gt; &gt; +struct Ewk_Database_Origins_Async_Get_Context {
&gt; 
&gt; If this struct is used for callback, don&apos;t you need to add this to below ?
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h#L34

This struct is used for storing data for callback function, static getDatabaseOriginsCallback() which is needed to get asynchronous data from ewk_database_manager_origins_get(). Because it is not a structure for ewk view callback, I think I don&apos;t need to add this to EwkViewCallbacks.h.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager.h:48
&gt; &gt; + * @brief Callback type for use with ewk_database_manager_origins_get().
&gt; 
&gt; ditto ?

I will follow the policy.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_database_manager_private.h:46
&gt; &gt; +    explicit Ewk_Database_Manager(WKDatabaseManagerRef databaseManagerRef);
&gt; 
&gt; It looks databseManagerRef is not meaningful. I think Data type is enough.

I will remove databaseManagerRef. And let only data type exists on the param.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759613</commentid>
    <comment_count>16</comment_count>
      <attachid>172571</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-06 06:29:53 -0800</bug_when>
    <thetext>Created attachment 172571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760194</commentid>
    <comment_count>17</comment_count>
      <attachid>172571</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 16:33:20 -0800</bug_when>
    <thetext>Comment on attachment 172571
Patch

Clearing flags on attachment: 172571

Committed r133692: &lt;http://trac.webkit.org/changeset/133692&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760196</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 16:33:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172452</attachid>
            <date>2012-11-05 17:32:00 -0800</date>
            <delta_ts>2012-11-06 04:38:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101193-20121106103013.patch</filename>
            <type>text/plain</type>
            <size>23611</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMmEwZTBjZmZmY2YzYjlh
OGZiNWMxY2U2OWIzYTc5OTE4MmRkNmEwOS4uNjU1MzA2N2Q2YmE4ODE2ODlkN2UyODczODJhZTE0
MWEzYTdiMTk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTA1ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX2RhdGFiYXNlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMTkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGV3a19kYXRhYmFzZV9tYW5hZ2VyIHRvIG1hbmFnZSB3ZWIg
ZGF0YWJhc2UgYW5kCisgICAgICAgIGV3a19kYXRhYmFzZV9tYW5hYWdlcl9vcmlnaW5zX2dldCB0
byBnZXQgb3JpZ2lucyBsaXN0IG9mIHdlYiBzdG9yYWdlLgorICAgICAgICBBZGQgdW5pdCB0ZXN0
cyBmb3IgZXdrX2RhdGFiYXNlX21hbmFnZXIgQVBJcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a19Db250ZXh0OjpFd2tfQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6
ZGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKGV3a19jb250ZXh0X2RhdGFiYXNlX21hbmFnZXJf
Z2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKEV3
a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFu
YWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OkV3a19EYXRh
YmFzZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19EYXRhYmFzZV9NYW5hZ2VyOjpnZXREYXRhYmFz
ZU9yaWdpbnMpOgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxp
c3QpOgorICAgICAgICAoRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgor
ICAgICAgICAoRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQ6OkV3a19EYXRh
YmFzZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKGdldERhdGFiYXNlT3Jp
Z2luc0NhbGxiYWNrKToKKyAgICAgICAgKGV3a19kYXRhYmFzZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlcl9w
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXIpOgorICAgICAg
ICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwOgorICAgICAgICAoVEVTVF9GKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0YSk6CisgICAgICAgIChPcmlnaW5EYXRh
OjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldERhdGFiYXNlT3JpZ2luc0NhbGxiYWNrKToKKyAg
ICAgICAgKHRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0xMS0wNSAg
S3l1bmdUYWUgS2ltICA8a3RmLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJd
IEZpeCBidWlsZCB3YXJuaW5nIGluIFBhZ2VDbGllbnRMZWdhY3lJbXBsLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCAxNDBlMzNhZGEwZjk4ZjE0NjBlZWRiNTFmNjZhMDJhNmNkN2Ez
M2ZlLi4wZDc0YTQ0OTQ5ZTQwNjg2MmM3MDNiMjFjNjYwYWVkZDcwOGM4M2M2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtNTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29sb3JfcGlja2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb29raWVfbWFuYWdlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2Vf
bWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcAog
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19lcnJvci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKQEAgLTI1NCw2ICsyNTUsNyBAQCBTRVQgKEVXZWJL
aXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb2xvcl9waWNrZXIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuaCIKKyAg
ICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRh
YmFzZV9tYW5hZ2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZXJyb3IuaCIKICAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgi
CkBAIC0zNjEsNiArMzYzLDcgQEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0
X2V3azJfY29udGV4dAogICAgIHRlc3RfZXdrMl9jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzCiAg
ICAgdGVzdF9ld2syX2Nvb2tpZV9tYW5hZ2VyCisgICAgdGVzdF9ld2syX2RhdGFiYXNlX21hbmFn
ZXIKICAgICB0ZXN0X2V3azJfZG93bmxvYWRfam9iCiAgICAgdGVzdF9ld2syX2VpbmFfc2hhcmVk
X3N0cmluZwogICAgIHRlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggNjQyMDk5NDBmNjUx
MTNiOTIyMmJlYWNlNDFkYzIwYjQxNDNlMjhhOS4uMGU0MjY3YTljM2M2NGFiYmQ3NmUyODZmZGI2
YjI5ZjRkMTFiNmY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldlYlNvdXBSZXF1
ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2RhdGFi
YXNlX21hbmFnZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19zdG9yYWdl
X21hbmFnZXJfcHJpdmF0ZS5oIgpAQCAtNjMsNiArNjQsNyBAQCBzdGF0aWMgaW5saW5lIENvbnRl
eHRNYXAmIGNvbnRleHRNYXAoKQogCiBFd2tfQ29udGV4dDo6RXdrX0NvbnRleHQoV0tDb250ZXh0
UmVmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZGF0YWJhc2VN
YW5hZ2VyKEV3a19EYXRhYmFzZV9NYW5hZ2VyOjpjcmVhdGUoV0tDb250ZXh0R2V0RGF0YWJhc2VN
YW5hZ2VyKG1fY29udGV4dC5nZXQoKSkpKQogICAgICwgbV9zdG9yYWdlTWFuYWdlcihFd2tfU3Rv
cmFnZV9NYW5hZ2VyOjpjcmVhdGUoV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlciht
X2NvbnRleHQuZ2V0KCkpKSkKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCiAgICAgLCBtX2Jh
dHRlcnlQcm92aWRlcihCYXR0ZXJ5UHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KSkKQEAgLTE0NSw2
ICsxNDcsMTEgQEAgRXdrX0Nvb2tpZV9NYW5hZ2VyKiBFd2tfQ29udGV4dDo6Y29va2llTWFuYWdl
cigpCiAgICAgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsKIH0KIAorRXdrX0RhdGFiYXNl
X01hbmFnZXIqIEV3a19Db250ZXh0OjpkYXRhYmFzZU1hbmFnZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RhdGFiYXNlTWFuYWdlci5nZXQoKTsKK30KKwogdm9pZCBFd2tfQ29udGV4dDo6ZW5z
dXJlRmF2aWNvbkRhdGFiYXNlKCkKIHsKICAgICBpZiAobV9mYXZpY29uRGF0YWJhc2UpCkBAIC0y
MzQsNiArMjQxLDEzIEBAIEV3a19Db29raWVfTWFuYWdlciogZXdrX2NvbnRleHRfY29va2llX21h
bmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0CiAgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8RXdrX0NvbnRleHQqPihld2tDb250ZXh0KS0+Y29va2llTWFuYWdlcigpOwogfQogCitF
d2tfRGF0YWJhc2VfTWFuYWdlciogZXdrX2NvbnRleHRfZGF0YWJhc2VfbWFuYWdlcl9nZXQoY29u
c3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOworCisgICAgcmV0dXJuIGV3a0NvbnRleHQtPmRhdGFi
YXNlTWFuYWdlcigpOworfQorCiBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFz
ZV9kaXJlY3Rvcnlfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBjb25zdCBjaGFyKiBkaXJl
Y3RvcnlQYXRoKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250
ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuaAppbmRleCAxNGJhMDUwMWFkNDViM2JiM2UxYmNmMzgzYTc3YjliY2VlMjdhZmViLi41
NjRiMmUxNTg1NzY2NzlhN2U3Yzg4M2IwNjI3YzE4ODhlNDgzYTNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM4LDYgKzM4LDcgQEAK
ICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyLmgi
CisjaW5jbHVkZSAiZXdrX2RhdGFiYXNlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZmF2aWNv
bl9kYXRhYmFzZS5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKICNpbmNsdWRl
ICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCkBAIC0xODQsNiArMTg1LDE1IEBAIEVBUEkgRXdrX0Nv
bnRleHQgKmV3a19jb250ZXh0X25ld193aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0IGNo
YXIgKnBhdGgpOwogRUFQSSBFd2tfQ29va2llX01hbmFnZXIgKmV3a19jb250ZXh0X2Nvb2tpZV9t
YW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGV4dCk7CiAKIC8qKgorICogR2V0cyB0
aGUgZGF0YWJhc2UgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgorICoKKyAq
IEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4g
RXdrX0RhdGFiYXNlX01hbmFnZXIgb2JqZWN0IGluc3RhbmNlIG9yIEBjIE5VTEwgaW4gY2FzZSBv
ZiBmYWlsdXJlLgorICovCitFQVBJIEV3a19EYXRhYmFzZV9NYW5hZ2VyICpld2tfY29udGV4dF9k
YXRhYmFzZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGV4dCk7CisKKy8qKgog
ICogU2V0cyB0aGUgZmF2aWNvbiBkYXRhYmFzZSBkaXJlY3RvcnkgZm9yIHRoaXMgQGEgY29udGV4
dC4KICAqCiAgKiBTZXRzIHRoZSBkaXJlY3RvcnkgcGF0aCB0byBiZSB1c2VkIHRvIHN0b3JlIHRo
ZSBmYXZpY29ucyBkYXRhYmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IDE1ZjE4YjM3NDk0OTZkNmEzZDA5
MGFlOWYxMzNlMjY4MDg0Njc1MGIuLjgyMzc1MDk5OTYxMDZiMWFkZjc3YzkwYmYyMDEyMTAzOTM0
YmVhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTU1LDYgKzU1LDggQEAgcHVibGljOgogCiAgICAgRXdr
X0Nvb2tpZV9NYW5hZ2VyKiBjb29raWVNYW5hZ2VyKCk7CiAKKyAgICBFd2tfRGF0YWJhc2VfTWFu
YWdlciogZGF0YWJhc2VNYW5hZ2VyKCkgY29uc3Q7CisKICAgICBib29sIHNldEZhdmljb25EYXRh
YmFzZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CiAgICAg
RXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSgpOwogCkBAIC04OCw2ICs5MCw3
IEBAIHByaXZhdGU6CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRleHQ7CiAK
ICAgICBPd25QdHI8RXdrX0Nvb2tpZV9NYW5hZ2VyPiBtX2Nvb2tpZU1hbmFnZXI7CisgICAgT3du
UHRyPEV3a19EYXRhYmFzZV9NYW5hZ2VyPiBtX2RhdGFiYXNlTWFuYWdlcjsKICAgICBPd25QdHI8
RXdrX0Zhdmljb25fRGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOwogICAgIE93blB0cjxFd2tf
U3RvcmFnZV9NYW5hZ2VyPiBtX3N0b3JhZ2VNYW5hZ2VyOwogI2lmIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
YXRhYmFzZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19kYXRhYmFzZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzM2MDVlYzJkOTc5NDAwZGQ1ZTE4
NzhmNWU3Njg4YTQzMzE4YmVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2RhdGFiYXNlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImV3a19kYXRhYmFzZV9tYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3Qu
aCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tEYXRhYmFzZU1hbmFnZXIuaCIK
KyNpbmNsdWRlICJld2tfZGF0YWJhc2VfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdr
X2Vycm9yX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCisjaW5j
bHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRXdrX0RhdGFiYXNlX01hbmFn
ZXI6OkV3a19EYXRhYmFzZV9NYW5hZ2VyKFdLRGF0YWJhc2VNYW5hZ2VyUmVmIHdrRGF0YWJhc2VN
YW5hZ2VyUmVmKQorICAgIDogbV93a0RhdGFiYXNlTWFuYWdlcih3a0RhdGFiYXNlTWFuYWdlclJl
ZikKK3sgfQorCit2b2lkIEV3a19EYXRhYmFzZV9NYW5hZ2VyOjpnZXREYXRhYmFzZU9yaWdpbnMo
dm9pZCogY29udGV4dCwgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZU9yaWdpbnNGdW5jdGlv
biBjYWxsYmFjaykgY29uc3QKK3sKKyAgICBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3Jp
Z2lucyhtX3drRGF0YWJhc2VNYW5hZ2VyLmdldCgpLCBjb250ZXh0LCBjYWxsYmFjayk7Cit9CisK
K0VpbmFfTGlzdCogRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJh
eVJlZiBvcmlnaW5zKSBjb25zdAoreworICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IDA7Cisg
ICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IFdLQXJyYXlHZXRTaXplKG9yaWdpbnMpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBXS1NlY3VyaXR5
T3JpZ2luUmVmIHdrT3JpZ2luUmVmID0gc3RhdGljX2Nhc3Q8V0tTZWN1cml0eU9yaWdpblJlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KG9yaWdpbnMsIGkpKTsKKyAgICAgICAgUmVmUHRyPEV3a19T
ZWN1cml0eV9PcmlnaW4+IG9yaWdpbiA9IG1fd3JhcHBlckNhY2hlLmdldCh3a09yaWdpblJlZik7
CisgICAgICAgIGlmICghb3JpZ2luKSB7CisgICAgICAgICAgICBvcmlnaW4gPSBFd2tfU2VjdXJp
dHlfT3JpZ2luOjpjcmVhdGUod2tPcmlnaW5SZWYpOworICAgICAgICAgICAgbV93cmFwcGVyQ2Fj
aGUuc2V0KHdrT3JpZ2luUmVmLCBvcmlnaW4pOworICAgICAgICB9CisgICAgICAgIG9yaWdpbkxp
c3QgPSBlaW5hX2xpc3RfYXBwZW5kKG9yaWdpbkxpc3QsIG9yaWdpbi5yZWxlYXNlKCkubGVha1Jl
ZigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luTGlzdDsKK30KKworc3RydWN0IEV3a19E
YXRhYmFzZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0IHsKKyAgICBjb25zdCBFd2tfRGF0YWJh
c2VfTWFuYWdlciogbWFuYWdlcjsKKyAgICBFd2tfRGF0YWJhc2VfT3JpZ2luc19HZXRfQ2IgY2Fs
bGJhY2s7CisgICAgdm9pZCogdXNlckRhdGE7CisKKyAgICBFd2tfRGF0YWJhc2VfT3JpZ2luc19B
c3luY19HZXRfQ29udGV4dChjb25zdCBFd2tfRGF0YWJhc2VfTWFuYWdlciogbWFuYWdlciwgRXdr
X0RhdGFiYXNlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKKyAgICAg
ICAgOiBtYW5hZ2VyKG1hbmFnZXIpCisgICAgICAgICwgY2FsbGJhY2soY2FsbGJhY2spCisgICAg
ICAgICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgeyB9Cit9OworCitzdGF0aWMgdm9pZCBnZXRE
YXRhYmFzZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYgd2tF
cnJvciwgdm9pZCogY29udGV4dCkKK3sKKyAgICBFaW5hX0xpc3QqIG9yaWdpbkxpc3QgPSAwOwor
ICAgIE93blB0cjxFd2tfRGF0YWJhc2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCo+IHdlYkRh
dGFiYXNlQ29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEV3a19EYXRhYmFzZV9PcmlnaW5z
X0FzeW5jX0dldF9Db250ZXh0Kj4oY29udGV4dCkpOworCisgICAgb3JpZ2luTGlzdCA9IHdlYkRh
dGFiYXNlQ29udGV4dC0+bWFuYWdlci0+Y3JlYXRlT3JpZ2luTGlzdChvcmlnaW5zKTsKKworICAg
IE93blB0cjxFd2tfRXJyb3I+IGV3a0Vycm9yID0gRXdrX0Vycm9yOjpjcmVhdGUod2tFcnJvcik7
CisgICAgd2ViRGF0YWJhc2VDb250ZXh0LT5jYWxsYmFjayhvcmlnaW5MaXN0LCBld2tFcnJvci5n
ZXQoKSwgd2ViRGF0YWJhc2VDb250ZXh0LT51c2VyRGF0YSk7Cit9CisKK0VpbmFfQm9vbCBld2tf
ZGF0YWJhc2VfbWFuYWdlcl9vcmlnaW5zX2dldChjb25zdCBFd2tfRGF0YWJhc2VfTWFuYWdlciog
ZXdrRGF0YWJhc2VNYW5hZ2VyLCBFd2tfRGF0YWJhc2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ss
IHZvaWQqIHVzZXJEYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChl
d2tEYXRhYmFzZU1hbmFnZXIsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsKKworICAgIEV3a19EYXRhYmFzZV9PcmlnaW5zX0FzeW5j
X0dldF9Db250ZXh0KiBjb250ZXh0ID0gbmV3IEV3a19EYXRhYmFzZV9PcmlnaW5zX0FzeW5jX0dl
dF9Db250ZXh0KGV3a0RhdGFiYXNlTWFuYWdlciwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBl
d2tEYXRhYmFzZU1hbmFnZXItPmdldERhdGFiYXNlT3JpZ2lucyhjb250ZXh0LCBnZXREYXRhYmFz
ZU9yaWdpbnNDYWxsYmFjayk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRhYmFzZV9tYW5hZ2VyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjEzNGY0NjhkYzc0MzI2NWE5MDI1NzMxOWY5MDFiYmNlMzIwNTFjZDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJh
c2VfbWFuYWdlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLyoqCisgKiBAZmlsZSAgIGV3a19kYXRhYmFzZV9tYW5hZ2VyLmgKKyAqIEBicmll
ZiAgRGVzY3JpYmVzIHRoZSBFd2sgRGF0YWJhc2UgTWFuYWdlciBBUEkuCisgKgorICogRXdrIERh
dGFiYXNlIE1hbmFnZXIgbWFuYWdlcyB3ZWIgZGF0YWJhc2UuCisgKi8KKworI2lmbmRlZiBld2tf
ZGF0YWJhc2VfbWFuYWdlcl9oCisjZGVmaW5lIGV3a19kYXRhYmFzZV9tYW5hZ2VyX2gKKworI2lu
Y2x1ZGUgImV3a19lcnJvci5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3Ig
RXdrX0RhdGFiYXNlX01hbmFnZXIuICovCit0eXBlZGVmIHN0cnVjdCBFd2tfRGF0YWJhc2VfTWFu
YWdlciBFd2tfRGF0YWJhc2VfTWFuYWdlcjsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfRGF0YWJh
c2VfT3JpZ2luc19HZXRfQ2IgRXdrX0RhdGFiYXNlX09yaWdpbnNfR2V0X0NiCisgKiBAYnJpZWYg
Q2FsbGJhY2sgdHlwZSBmb3IgdXNlIHdpdGggZXdrX2RhdGFiYXNlX21hbmFnZXJfb3JpZ2luc19n
ZXQoKS4KKyAqCisgKiBAcGFyYW0gb3JpZ2lucyBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBF
d2tfU2VjdXJpdHlfT3JpZ2luIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciwK
KyAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNo
b3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVzZSBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKCkK
KyAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJlZSB0aGUgaXRlbXMKKyAqLwordHlwZWRl
ZiB2b2lkICgqRXdrX0RhdGFiYXNlX09yaWdpbnNfR2V0X0NiKShFaW5hX0xpc3QgKm9yaWdpbnMs
IEV3a19FcnJvciAqZXJyb3IsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogR2V0cyBsaXN0
IG9mIG9yaWdpbnMgdXNpbmcgd2ViIGRhdGFiYXNlIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIFRo
aXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgY29udGV4dCBzdHJ1Y3R1cmUgbWFkZSBm
cm9tIGNhbGxiYWNrIGFuZCB1c2VyX2RhdGEuCisgKgorICogQHBhcmFtIG1hbmFnZXIgRXdrX0Rh
dGFiYXNlX01hbmFnZXIgb2JqZWN0CisgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJhY2sgdG8gZ2V0
IGRhdGFiYXNlIG9yaWdpbnMKKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRhIHdpbGwgYmUg
cGFzc2VkIHdoZW4gcmVzdWx0X2NhbGxiYWNrIGlzIGNhbGxlZCwKKyAqICAgIC1pLmUuLCB1c2Vy
IGRhdGEgd2lsbCBiZSBrZXB0IHVudGlsIGNhbGxiYWNrIGlzIGNhbGxlZAorICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICov
CitFQVBJIEVpbmFfQm9vbCBld2tfZGF0YWJhc2VfbWFuYWdlcl9vcmlnaW5zX2dldChjb25zdCBF
d2tfRGF0YWJhc2VfTWFuYWdlciAqbWFuYWdlciwgRXdrX0RhdGFiYXNlX09yaWdpbnNfR2V0X0Ni
IGNhbGxiYWNrLCB2b2lkICp1c2VyX2RhdGEpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmCisjZW5kaWYgLy8gZXdrX2RhdGFiYXNlX21hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2RhdGFiYXNlX21hbmFn
ZXJfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwNDdkOWFlZDg4Y2MwNWYzMjQ0ZmQyNzFkZTE0Njdm
YjllZGZlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19kYXRhYmFzZV9tYW5h
Z2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfZGF0YWJhc2VfbWFuYWdlcl9wcml2YXRlX2gKKwor
I2luY2x1ZGUgIldLRGF0YWJhc2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIK
KyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK2NsYXNzIEV3a19E
YXRhYmFzZV9NYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxFd2tfRGF0
YWJhc2VfTWFuYWdlcj4gY3JlYXRlKFdLRGF0YWJhc2VNYW5hZ2VyUmVmIHdrRGF0YWJhc2VNYW5h
Z2VyUmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tfRGF0YWJhc2Vf
TWFuYWdlcih3a0RhdGFiYXNlTWFuYWdlclJlZikpOworICAgIH0KKworICAgIEVpbmFfTGlzdCog
Y3JlYXRlT3JpZ2luTGlzdChXS0FycmF5UmVmIHdrTGlzdCkgY29uc3Q7CisgICAgdm9pZCBnZXRE
YXRhYmFzZU9yaWdpbnModm9pZCogY29udGV4dCwgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFz
ZU9yaWdpbnNGdW5jdGlvbiBjYWxsYmFjaykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgRXdrX0RhdGFiYXNlX01hbmFnZXIoV0tEYXRhYmFzZU1hbmFnZXJSZWYgd2tEYXRhYmFzZU1h
bmFnZXJSZWYpOworCisgICAgV0tSZXRhaW5QdHI8V0tEYXRhYmFzZU1hbmFnZXJSZWY+IG1fd2tE
YXRhYmFzZU1hbmFnZXI7CisgICAgbXV0YWJsZSBIYXNoTWFwPFdLU2VjdXJpdHlPcmlnaW5SZWYs
IFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiA+IG1fd3JhcHBlckNhY2hlOworfTsKKyNlbmRp
ZiAvLyBld2tfZGF0YWJhc2VfbWFuYWdlcl9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNw
cAppbmRleCAxZDQ0YWNiZmNkYTM3ZGI5ZDllOTQ4NTA3ZTc2YjM2NDljNGZhOWI0Li4yNzQzZjI1
NjE2NTkzNGQ1MzQxODhlMTYyMzRmM2Q5MzJmZDNiMjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQu
Y3BwCkBAIC01Myw2ICs1MywxNCBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRl
eHRfY29va2llX21hbmFnZXJfZ2V0KQogICAgIEFTU0VSVF9FUShjb29raWVNYW5hZ2VyLCBld2tf
Y29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQoY29udGV4dCkpOwogfQogCitURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfZGF0YWJhc2VfbWFuYWdlcl9nZXQpCit7CisgICAgRXdr
X0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOworICAg
IEV3a19EYXRhYmFzZV9NYW5hZ2VyKiBkYXRhYmFzZU1hbmFnZXIgPSBld2tfY29udGV4dF9kYXRh
YmFzZV9tYW5hZ2VyX2dldChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJVRShkYXRhYmFzZU1hbmFn
ZXIpOworICAgIEFTU0VSVF9FUShkYXRhYmFzZU1hbmFnZXIsIGV3a19jb250ZXh0X2RhdGFiYXNl
X21hbmFnZXJfZ2V0KGNvbnRleHQpKTsKK30KKwogVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3
a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KQogewogICAgIEV3a19Db250ZXh0KiBjb250
ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kYXRhYmFzZV9tYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml9kYXRhYmFzZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjU3MjFhM2MwYzIzZGY4MjNiZjEx
MzM4YmNlY2RlZGZlMmJkMjViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2RhdGFiYXNlX21hbmFnZXIuY3BwCkBAIC0w
LDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRl
IDxFY29yZS5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBF
V0syVW5pdFRlc3Q7CisKK3N0cnVjdCBPcmlnaW5EYXRhIHsKKyAgICBFaW5hX0xpc3QqIG9yaWdp
bkxpc3Q7CisgICAgRXdrX0RhdGFiYXNlX01hbmFnZXIqIG1hbmFnZXI7CisgICAgYm9vbCBkaWRS
ZWNlaXZlT3JpZ2luc0NhbGxiYWNrOworICAgIGJvb2wgaXNTeW5jaHJvbml6ZWQ7CisgICAgdW5z
aWduZWQgdGltZVRvQ2hlY2s7CisKKyAgICBPcmlnaW5EYXRhKCkKKyAgICAgICAgOiBvcmlnaW5M
aXN0KDApCisgICAgICAgICwgbWFuYWdlcigwKQorICAgICAgICAsIGRpZFJlY2VpdmVPcmlnaW5z
Q2FsbGJhY2soZmFsc2UpCisgICAgICAgICwgaXNTeW5jaHJvbml6ZWQoZmFsc2UpCisgICAgICAg
ICwgdGltZVRvQ2hlY2soMTApCisgICAgeyB9Cit9OworCitzdGF0aWMgdm9pZCBnZXREYXRhYmFz
ZU9yaWdpbnNDYWxsYmFjayhFaW5hX0xpc3QqIG9yaWdpbnMsIEV3a19FcnJvciogZXJyb3IsIHZv
aWQqIHVzZXJEYXRhKQoreworICAgIEFTU0VSVF9GQUxTRShlcnJvcik7CisKKyAgICBPcmlnaW5E
YXRhKiBvcmlnaW5EYXRhID0gc3RhdGljX2Nhc3Q8T3JpZ2luRGF0YSo+KHVzZXJEYXRhKTsKKyAg
ICBvcmlnaW5EYXRhLT5kaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrID0gdHJ1ZTsKKworICAgIEVp
bmFfTGlzdCogbDsKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElTVF9GT1JFQUNIKG9yaWdp
bnMsIGwsIGRhdGEpIHsKKyAgICAgICAgb3JpZ2luRGF0YS0+b3JpZ2luTGlzdCA9IGVpbmFfbGlz
dF9hcHBlbmQob3JpZ2luRGF0YS0+b3JpZ2luTGlzdCwgZGF0YSk7CisgICAgICAgIEV3a19TZWN1
cml0eV9PcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PEV3a19TZWN1cml0eV9PcmlnaW4qPihk
YXRhKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9n
ZXQob3JpZ2luKSwgImh0dHAiKQorICAgICAgICAgICAgJiYgIXN0cmNtcChld2tfc2VjdXJpdHlf
b3JpZ2luX2hvc3RfZ2V0KG9yaWdpbiksICJ3d3cuZGF0YWJhc2V0ZXN0LmNvbSIpCisgICAgICAg
ICAgICAmJiAhZXdrX3NlY3VyaXR5X29yaWdpbl9wb3J0X2dldChvcmlnaW4pKSB7CisgICAgICAg
ICAgICAgICAgb3JpZ2luRGF0YS0+aXNTeW5jaHJvbml6ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp
YyBib29sIHRpbWVyQ2FsbGJhY2sodm9pZCogdXNlckRhdGEpCit7CisgICAgT3JpZ2luRGF0YSog
b3JpZ2luRGF0YSA9IHN0YXRpY19jYXN0PE9yaWdpbkRhdGEqPih1c2VyRGF0YSk7CisKKyAgICBp
ZiAob3JpZ2luRGF0YS0+aXNTeW5jaHJvbml6ZWQgfHwgIS0tKG9yaWdpbkRhdGEtPnRpbWVUb0No
ZWNrKSkgeworICAgICAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgICAgICByZXR1cm4g
RUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworICAgIH0KKworICAgIGlmIChvcmlnaW5EYXRhLT5kaWRS
ZWNlaXZlT3JpZ2luc0NhbGxiYWNrKSB7CisgICAgICAgIG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVP
cmlnaW5zQ2FsbGJhY2sgPSBmYWxzZTsKKyAgICAgICAgZXdrX2RhdGFiYXNlX21hbmFnZXJfb3Jp
Z2luc19nZXQob3JpZ2luRGF0YS0+bWFuYWdlciwgZ2V0RGF0YWJhc2VPcmlnaW5zQ2FsbGJhY2ss
IG9yaWdpbkRhdGEpOworICAgIH0KKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19SRU5FVzsK
K30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19kYXRhYmFzZV9tYW5hZ2VyX29yaWdp
bnNfZ2V0KQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworICAgIGNvbnN0
IGNoYXIqIGRhdGFiYXNlSFRNTCA9CisgICAgICAgICI8aHRtbD48aGVhZD48dGl0bGU+b3JpZ2lu
YWwgdGl0bGU8L3RpdGxlPjwvaGVhZD4iCisgICAgICAgICI8Ym9keT4iCisgICAgICAgICI8c2Ny
aXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IgorICAgICAgICAiIHZhciBkYiA9IG9wZW5EYXRh
YmFzZShcIkRCVGVzdFwiLCBcIjEuMFwiLCBcIkhUTUw1IERhdGFiYXNlIGV4YW1wbGVcIiwgMjAw
MDAwKTsiCisgICAgICAgICI8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisK
KyAgICBBU1NFUlRfVFJVRShld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIGRhdGFiYXNl
SFRNTCwgImh0dHA6Ly93d3cuZGF0YWJhc2V0ZXN0LmNvbSIsIDApKTsKKyAgICBBU1NFUlRfVFJV
RSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7CisKKyAgICBPcmlnaW5EYXRhIG9yaWdpbkRhdGE7
CisgICAgb3JpZ2luRGF0YS5tYW5hZ2VyID0gZXdrX2NvbnRleHRfZGF0YWJhc2VfbWFuYWdlcl9n
ZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQodmlldykpOworICAgIEFTU0VSVF9UUlVFKGV3a19kYXRh
YmFzZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KG9yaWdpbkRhdGEubWFuYWdlciwgZ2V0RGF0YWJhc2VP
cmlnaW5zQ2FsbGJhY2ssICZvcmlnaW5EYXRhKSk7CisgICAgRWNvcmVfVGltZXIqIGRhdGFiYXNl
X3RpbWVyID0gZWNvcmVfdGltZXJfYWRkKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8RWNvcmVfVGFza19D
Yj4odGltZXJDYWxsYmFjayksICZvcmlnaW5EYXRhKTsKKworICAgIGVjb3JlX21haW5fbG9vcF9i
ZWdpbigpOworICAgIGlmIChkYXRhYmFzZV90aW1lcikKKyAgICAgICAgZWNvcmVfdGltZXJfZGVs
KGRhdGFiYXNlX3RpbWVyKTsKKworICAgIEFTU0VSVF9UUlVFKG9yaWdpbkRhdGEuaXNTeW5jaHJv
bml6ZWQpOworICAgIEFTU0VSVF9MRSgxLCBlaW5hX2xpc3RfY291bnQob3JpZ2luRGF0YS5vcmln
aW5MaXN0KSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172550</attachid>
            <date>2012-11-06 04:38:34 -0800</date>
            <delta_ts>2012-11-06 06:29:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101193-20121106213647.patch</filename>
            <type>text/plain</type>
            <size>24126</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjZhYmI3OWYwZWZiNmU2
ZGYyYTU2ZDY2MWFjNWJjMWU4NTE4MjliYS4uZDFhOTgyNmE5MTJiMjkxODM4MDZhY2I3NDBiZWQz
YWM1ZTFhMjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTExLTA2ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX2RhdGFiYXNlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMTkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGV3a19kYXRhYmFzZV9tYW5hZ2VyIHRvIG1hbmFnZSB3ZWIg
ZGF0YWJhc2UgYW5kCisgICAgICAgIGV3a19kYXRhYmFzZV9tYW5hYWdlcl9vcmlnaW5zX2dldCB0
byBnZXQgb3JpZ2lucyBsaXN0IG9mIHdlYiBzdG9yYWdlLgorICAgICAgICBBZGQgdW5pdCB0ZXN0
cyBmb3IgZXdrX2RhdGFiYXNlX21hbmFnZXIgQVBJcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a19Db250ZXh0OjpFd2tfQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6
ZGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKGV3a19jb250ZXh0X2RhdGFiYXNlX21hbmFnZXJf
Z2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKEV3
a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFu
YWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OkV3a19EYXRh
YmFzZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19EYXRhYmFzZV9NYW5hZ2VyOjpnZXREYXRhYmFz
ZU9yaWdpbnMpOgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxp
c3QpOgorICAgICAgICAoRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgor
ICAgICAgICAoRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQ6OkV3a19EYXRh
YmFzZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKGdldERhdGFiYXNlT3Jp
Z2luc0NhbGxiYWNrKToKKyAgICAgICAgKGV3a19kYXRhYmFzZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlcl9w
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXIpOgorICAgICAg
ICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwOgorICAgICAgICAoVEVTVF9GKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0YSk6CisgICAgICAgIChPcmlnaW5EYXRh
OjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldERhdGFiYXNlT3JpZ2luc0NhbGxiYWNrKToKKyAg
ICAgICAgKHRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0xMS0wNSAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIE5lZWQgYSB3YXkgdG8gc2Vu
ZCBhbmQgcmVjZWl2ZSBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBXS1dlYlByb2Nlc3NQbHVnSW4gb2Jq
ZWN0IGFuZCB0aGUgY2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDE0MGUzM2Fk
YTBmOThmMTQ2MGVlZGI1MWY2NmEwMmE2Y2Q3YTMzZmUuLjBkNzRhNDQ5NDllNDA2ODYyYzcwM2Iy
MWM2NjBhZWRkNzA4YzgzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01MCw2ICs1
MCw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb2xvcl9waWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAorICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRhYmFzZV9tYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Vy
cm9yLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcApA
QCAtMjU0LDYgKzI1NSw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbG9yX3BpY2tlci5oIgog
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb29raWVfbWFuYWdlci5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2RhdGFiYXNlX21hbmFnZXIuaCIKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2Iu
aCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19lcnJvci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaCIKQEAgLTM2MSw2ICszNjMsNyBAQCBTRVQoRVdL
MlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9jb250ZXh0CiAgICAgdGVzdF9ld2sy
X2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3MKICAgICB0ZXN0X2V3azJfY29va2llX21hbmFnZXIK
KyAgICB0ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9kb3dubG9hZF9q
b2IKICAgICB0ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nCiAgICAgdGVzdF9ld2syX2Zhdmlj
b25fZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
CmluZGV4IDc3NmU1MmMzNTAyMDY5MDRjZTZjOWNhNGYzNjA0YTAwNmRmZmZiOTUuLjA3Y2ExMjkz
NTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2EyMDljZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImV3
a19jb2xvcl9waWNrZXIuaCIKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3
a19jb29raWVfbWFuYWdlci5oIgorI2luY2x1ZGUgImV3a19kYXRhYmFzZV9tYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgogI2luY2x1ZGUgImV3a19lcnJvci5oIgogI2lu
Y2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggNjQyMDk5NDBmNjUxMTNiOTIyMmJl
YWNlNDFkYzIwYjQxNDNlMjhhOS4uN2MyMDg2ODQyOGM4ZDEzZmIxMGFlZmYxY2EwYzAzOGNjMGU0
NWIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdl
clByb3h5LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2RhdGFiYXNlX21hbmFn
ZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIK
ICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19zdG9yYWdlX21hbmFnZXJf
cHJpdmF0ZS5oIgpAQCAtNjMsNiArNjQsNyBAQCBzdGF0aWMgaW5saW5lIENvbnRleHRNYXAmIGNv
bnRleHRNYXAoKQogCiBFd2tfQ29udGV4dDo6RXdrX0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZGF0YWJhc2VNYW5hZ2VyKEV3
a19EYXRhYmFzZV9NYW5hZ2VyOjpjcmVhdGUoV0tDb250ZXh0R2V0RGF0YWJhc2VNYW5hZ2VyKG1f
Y29udGV4dC5nZXQoKSkpKQogICAgICwgbV9zdG9yYWdlTWFuYWdlcihFd2tfU3RvcmFnZV9NYW5h
Z2VyOjpjcmVhdGUoV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihtX2NvbnRleHQu
Z2V0KCkpKSkKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCiAgICAgLCBtX2JhdHRlcnlQcm92
aWRlcihCYXR0ZXJ5UHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KSkKQEAgLTE0NSw2ICsxNDcsMTEg
QEAgRXdrX0Nvb2tpZV9NYW5hZ2VyKiBFd2tfQ29udGV4dDo6Y29va2llTWFuYWdlcigpCiAgICAg
cmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsKIH0KIAorRXdrX0RhdGFiYXNlX01hbmFnZXIq
IEV3a19Db250ZXh0OjpkYXRhYmFzZU1hbmFnZXIoKQoreworICAgIHJldHVybiBtX2RhdGFiYXNl
TWFuYWdlci5nZXQoKTsKK30KKwogdm9pZCBFd2tfQ29udGV4dDo6ZW5zdXJlRmF2aWNvbkRhdGFi
YXNlKCkKIHsKICAgICBpZiAobV9mYXZpY29uRGF0YWJhc2UpCkBAIC0yMzQsNiArMjQxLDEzIEBA
IEV3a19Db29raWVfTWFuYWdlciogZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0
IEV3a19Db250ZXh0KiBld2tDb250ZXh0CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RXdrX0NvbnRl
eHQqPihld2tDb250ZXh0KS0+Y29va2llTWFuYWdlcigpOwogfQogCitFd2tfRGF0YWJhc2VfTWFu
YWdlciogZXdrX2NvbnRleHRfZGF0YWJhc2VfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQq
IGV3a0NvbnRleHQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0Nv
bnRleHQsIDApOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RXdrX0NvbnRleHQqPihld2tDb250
ZXh0KS0+ZGF0YWJhc2VNYW5hZ2VyKCk7Cit9CisKIEVpbmFfQm9vbCBld2tfY29udGV4dF9mYXZp
Y29uX2RhdGFiYXNlX2RpcmVjdG9yeV9zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIGNvbnN0
IGNoYXIqIGRpcmVjdG9yeVBhdGgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV3a0NvbnRleHQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5oCmluZGV4IDE0YmEwNTAxYWQ0NWIzYmIzZTFiY2YzODNhNzdiOWJj
ZWUyN2FmZWIuLjU2NGIyZTE1ODU3NjY3OWE3ZTdjODgzYjA2MjdjMTg4OGU0ODNhM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaApAQCAtMzgs
NiArMzgsNyBAQAogI2RlZmluZSBld2tfY29udGV4dF9oCiAKICNpbmNsdWRlICJld2tfY29va2ll
X21hbmFnZXIuaCIKKyNpbmNsdWRlICJld2tfZGF0YWJhc2VfbWFuYWdlci5oIgogI2luY2x1ZGUg
ImV3a19mYXZpY29uX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5o
IgogI2luY2x1ZGUgImV3a19zdG9yYWdlX21hbmFnZXIuaCIKQEAgLTE4NCw2ICsxODUsMTUgQEAg
RUFQSSBFd2tfQ29udGV4dCAqZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5qZWN0ZWRfYnVuZGxlX3Bh
dGgoY29uc3QgY2hhciAqcGF0aCk7CiBFQVBJIEV3a19Db29raWVfTWFuYWdlciAqZXdrX2NvbnRl
eHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKIAogLyoq
CisgKiBHZXRzIHRoZSBkYXRhYmFzZSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRl
eHQuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gcXVlcnkuCisgKgor
ICogQHJldHVybiBFd2tfRGF0YWJhc2VfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ugb3IgQGMgTlVM
TCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX0RhdGFiYXNlX01hbmFnZXIgKmV3
a19jb250ZXh0X2RhdGFiYXNlX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0
KTsKKworLyoqCiAgKiBTZXRzIHRoZSBmYXZpY29uIGRhdGFiYXNlIGRpcmVjdG9yeSBmb3IgdGhp
cyBAYSBjb250ZXh0LgogICoKICAqIFNldHMgdGhlIGRpcmVjdG9yeSBwYXRoIHRvIGJlIHVzZWQg
dG8gc3RvcmUgdGhlIGZhdmljb25zIGRhdGFiYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggMTVmMThiMzc0
OTQ5NmQ2YTNkMDkwYWU5ZjEzM2UyNjgwODQ2NzUwYi4uY2NiYzM4NThiMWYzMTNjMjZjZGNmZDIw
YjFlNmI5N2UxN2FlY2Q5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6
CiAKICAgICBFd2tfQ29va2llX01hbmFnZXIqIGNvb2tpZU1hbmFnZXIoKTsKIAorICAgIEV3a19E
YXRhYmFzZV9NYW5hZ2VyKiBkYXRhYmFzZU1hbmFnZXIoKTsKKwogICAgIGJvb2wgc2V0RmF2aWNv
bkRhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsK
ICAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogZmF2aWNvbkRhdGFiYXNlKCk7CiAKQEAgLTg4LDYg
KzkwLDcgQEAgcHJpdmF0ZToKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4
dDsKIAogICAgIE93blB0cjxFd2tfQ29va2llX01hbmFnZXI+IG1fY29va2llTWFuYWdlcjsKKyAg
ICBPd25QdHI8RXdrX0RhdGFiYXNlX01hbmFnZXI+IG1fZGF0YWJhc2VNYW5hZ2VyOwogICAgIE93
blB0cjxFd2tfRmF2aWNvbl9EYXRhYmFzZT4gbV9mYXZpY29uRGF0YWJhc2U7CiAgICAgT3duUHRy
PEV3a19TdG9yYWdlX01hbmFnZXI+IG1fc3RvcmFnZU1hbmFnZXI7CiAjaWYgRU5BQkxFKEJBVFRF
UllfU1RBVFVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2RhdGFiYXNlX21hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2RhdGFiYXNlX21hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkYzEzYjQ5NGEyZjQ4YmQy
MzMxODZjYWIzMzRiOTExYzMxNjRmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlci5jcHAKQEAgLTAsMCArMSw5
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiZXdrX2RhdGFiYXNlX21hbmFnZXIuaCIKKworI2luY2x1ZGUgIldLQVBJ
Q2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0RhdGFiYXNlTWFuYWdl
ci5oIgorI2luY2x1ZGUgImV3a19kYXRhYmFzZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJld2tfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIK
KyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tfRGF0YWJhc2Vf
TWFuYWdlcjo6RXdrX0RhdGFiYXNlX01hbmFnZXIoV0tEYXRhYmFzZU1hbmFnZXJSZWYgZGF0YWJh
c2VNYW5hZ2VyUmVmKQorICAgIDogbV9kYXRhYmFzZU1hbmFnZXIoZGF0YWJhc2VNYW5hZ2VyUmVm
KQoreyB9CisKK3ZvaWQgRXdrX0RhdGFiYXNlX01hbmFnZXI6OmdldERhdGFiYXNlT3JpZ2lucyhX
S0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrLCB2b2lk
KiBjb250ZXh0KSBjb25zdAoreworICAgIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmln
aW5zKG1fZGF0YWJhc2VNYW5hZ2VyLmdldCgpLCBjb250ZXh0LCBjYWxsYmFjayk7Cit9CisKK0Vp
bmFfTGlzdCogRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJl
ZiBvcmlnaW5zKSBjb25zdAoreworICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IDA7CisgICAg
Y29uc3Qgc2l6ZV90IGxlbmd0aCA9IFdLQXJyYXlHZXRTaXplKG9yaWdpbnMpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBXS1NlY3VyaXR5T3Jp
Z2luUmVmIHdrT3JpZ2luUmVmID0gc3RhdGljX2Nhc3Q8V0tTZWN1cml0eU9yaWdpblJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KG9yaWdpbnMsIGkpKTsKKyAgICAgICAgUmVmUHRyPEV3a19TZWN1
cml0eV9PcmlnaW4+IG9yaWdpbiA9IG1fd3JhcHBlckNhY2hlLmdldCh3a09yaWdpblJlZik7Cisg
ICAgICAgIGlmICghb3JpZ2luKSB7CisgICAgICAgICAgICBvcmlnaW4gPSBFd2tfU2VjdXJpdHlf
T3JpZ2luOjpjcmVhdGUod2tPcmlnaW5SZWYpOworICAgICAgICAgICAgbV93cmFwcGVyQ2FjaGUu
c2V0KHdrT3JpZ2luUmVmLCBvcmlnaW4pOworICAgICAgICB9CisgICAgICAgIG9yaWdpbkxpc3Qg
PSBlaW5hX2xpc3RfYXBwZW5kKG9yaWdpbkxpc3QsIG9yaWdpbi5yZWxlYXNlKCkubGVha1JlZigp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luTGlzdDsKK30KKworc3RydWN0IEV3a19EYXRh
YmFzZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0IHsKKyAgICBjb25zdCBFd2tfRGF0YWJhc2Vf
TWFuYWdlciogbWFuYWdlcjsKKyAgICBFd2tfRGF0YWJhc2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJh
Y2s7CisgICAgdm9pZCogdXNlckRhdGE7CisKKyAgICBFd2tfRGF0YWJhc2VfT3JpZ2luc19Bc3lu
Y19HZXRfQ29udGV4dChjb25zdCBFd2tfRGF0YWJhc2VfTWFuYWdlciogbWFuYWdlciwgRXdrX0Rh
dGFiYXNlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKKyAgICAgICAg
OiBtYW5hZ2VyKG1hbmFnZXIpCisgICAgICAgICwgY2FsbGJhY2soY2FsbGJhY2spCisgICAgICAg
ICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgeyB9Cit9OworCitzdGF0aWMgdm9pZCBnZXREYXRh
YmFzZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYgd2tFcnJv
ciwgdm9pZCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8RXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5
bmNfR2V0X0NvbnRleHQqPiB3ZWJEYXRhYmFzZUNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2Fz
dDxFd2tfRGF0YWJhc2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCo+KGNvbnRleHQpKTsKKyAg
ICBFaW5hX0xpc3QqIG9yaWdpbkxpc3QgPSB3ZWJEYXRhYmFzZUNvbnRleHQtPm1hbmFnZXItPmNy
ZWF0ZU9yaWdpbkxpc3Qob3JpZ2lucyk7CisgICAgT3duUHRyPEV3a19FcnJvcj4gZXdrRXJyb3Ig
PSBFd2tfRXJyb3I6OmNyZWF0ZSh3a0Vycm9yKTsKKyAgICB3ZWJEYXRhYmFzZUNvbnRleHQtPmNh
bGxiYWNrKG9yaWdpbkxpc3QsIGV3a0Vycm9yLmdldCgpLCB3ZWJEYXRhYmFzZUNvbnRleHQtPnVz
ZXJEYXRhKTsKK30KKworRWluYV9Cb29sIGV3a19kYXRhYmFzZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
KGNvbnN0IEV3a19EYXRhYmFzZV9NYW5hZ2VyKiBld2tEYXRhYmFzZU1hbmFnZXIsIEV3a19EYXRh
YmFzZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0RhdGFiYXNlTWFuYWdlciwgZmFsc2UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOworCisg
ICAgRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQqIGNvbnRleHQgPSBuZXcg
RXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQoZXdrRGF0YWJhc2VNYW5hZ2Vy
LCBjYWxsYmFjaywgdXNlckRhdGEpOworICAgIGV3a0RhdGFiYXNlTWFuYWdlci0+Z2V0RGF0YWJh
c2VPcmlnaW5zKGdldERhdGFiYXNlT3JpZ2luc0NhbGxiYWNrLCBjb250ZXh0KTsKKworICAgIHJl
dHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2RhdGFiYXNlX21hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19kYXRhYmFzZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNkMDk2MzM5NDY3MDQ0OGQ3
Nzk2N2E2ZWM5Zjg1ZDFhMTQxZmIyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRhYmFzZV9tYW5hZ2VyLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgZXdr
X2RhdGFiYXNlX21hbmFnZXIuaAorICogQGJyaWVmICBEZXNjcmliZXMgdGhlIEV3ayBEYXRhYmFz
ZSBNYW5hZ2VyIEFQSS4KKyAqCisgKiBFd2sgRGF0YWJhc2UgTWFuYWdlciBtYW5hZ2VzIHdlYiBk
YXRhYmFzZS4KKyAqLworCisjaWZuZGVmIGV3a19kYXRhYmFzZV9tYW5hZ2VyX2gKKyNkZWZpbmUg
ZXdrX2RhdGFiYXNlX21hbmFnZXJfaAorCisjaW5jbHVkZSAiZXdrX2Vycm9yLmgiCisjaW5jbHVk
ZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisK
Ky8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRGF0YWJhc2VfTWFuYWdlci4gKi8KK3R5
cGVkZWYgc3RydWN0IEV3a19EYXRhYmFzZV9NYW5hZ2VyIEV3a19EYXRhYmFzZV9NYW5hZ2VyOwor
CisvKioKKyAqIEB0eXBlZGVmIEV3a19EYXRhYmFzZV9PcmlnaW5zX0dldF9DYiBFd2tfRGF0YWJh
c2VfT3JpZ2luc19HZXRfQ2IKKyAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBl
d2tfZGF0YWJhc2VfbWFuYWdlcl9vcmlnaW5zX2dldCgpLgorICoKKyAqIEBwYXJhbSBvcmlnaW5z
IEBjIEVpbmFfTGlzdCBjb250YWluaW5nIEBjIEV3a19TZWN1cml0eV9PcmlnaW4gZWxlbWVudHMg
b3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLAorICogICAgICAgICAgICAgICAgICAgICAgICB0
aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHVzZS4gVXNl
IGV3a19zZWN1cml0eV9vcmlnaW5fdW5yZWYoKQorICogICAgICAgICAgICAgICAgICAgICAgICB0
byBmcmVlIHRoZSBpdGVtcworICovCit0eXBlZGVmIHZvaWQgKCpFd2tfRGF0YWJhc2VfT3JpZ2lu
c19HZXRfQ2IpKEVpbmFfTGlzdCAqb3JpZ2lucywgRXdrX0Vycm9yICplcnJvciwgdm9pZCAqdXNl
cl9kYXRhKTsKKworLyoqCisgKiBHZXRzIGxpc3Qgb2Ygb3JpZ2lucyB1c2luZyB3ZWIgZGF0YWJh
c2UgYXN5bmNocm9ub3VzbHkuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5
IGZvciBjb250ZXh0IHN0cnVjdHVyZSBtYWRlIGZyb20gY2FsbGJhY2sgYW5kIHVzZXJfZGF0YS4K
KyAqCisgKiBAcGFyYW0gbWFuYWdlciBFd2tfRGF0YWJhc2VfTWFuYWdlciBvYmplY3QKKyAqIEBw
YXJhbSBjYWxsYmFjayBjYWxsYmFjayB0byBnZXQgZGF0YWJhc2Ugb3JpZ2lucworICogQHBhcmFt
IHVzZXJfZGF0YSB1c2VyX2RhdGEgd2lsbCBiZSBwYXNzZWQgd2hlbiByZXN1bHRfY2FsbGJhY2sg
aXMgY2FsbGVkLAorICogICAgLWkuZS4sIHVzZXIgZGF0YSB3aWxsIGJlIGtlcHQgdW50aWwgY2Fs
bGJhY2sgaXMgY2FsbGVkCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vzcywg
QGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19kYXRhYmFz
ZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19EYXRhYmFzZV9NYW5hZ2VyICptYW5hZ2Vy
LCBFd2tfRGF0YWJhc2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2RhdGFiYXNl
X21hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjOWNi
MjRhMWExMThkM2ExZjNkMjc4MjkzNDVkZWFhYjgyM2FmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlcl9wcml2
YXRlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIGV3a19kYXRhYmFzZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfZGF0
YWJhc2VfbWFuYWdlcl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldLRGF0YWJhc2VNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2lu
X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK2NsYXNzIEV3a19EYXRhYmFzZV9NYW5hZ2VyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxFd2tfRGF0YWJhc2VfTWFuYWdlcj4gY3JlYXRlKFdLRGF0YWJh
c2VNYW5hZ2VyUmVmIGRhdGFiYXNlTWFuYWdlclJlZikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRXdrX0RhdGFiYXNlX01hbmFnZXIoZGF0YWJhc2VNYW5hZ2VyUmVmKSk7Cisg
ICAgfQorCisgICAgRWluYV9MaXN0KiBjcmVhdGVPcmlnaW5MaXN0KFdLQXJyYXlSZWYgd2tMaXN0
KSBjb25zdDsKKyAgICB2b2lkIGdldERhdGFiYXNlT3JpZ2lucyhXS0RhdGFiYXNlTWFuYWdlckdl
dERhdGFiYXNlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBFd2tfRGF0YWJhc2VfTWFuYWdlcihXS0RhdGFiYXNl
TWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXJSZWYpOworCisgICAgV0tSZXRhaW5QdHI8V0tEYXRh
YmFzZU1hbmFnZXJSZWY+IG1fZGF0YWJhc2VNYW5hZ2VyOworICAgIG11dGFibGUgSGFzaE1hcDxX
S1NlY3VyaXR5T3JpZ2luUmVmLCBSZWZQdHI8RXdrX1NlY3VyaXR5X09yaWdpbj4gPiBtX3dyYXBw
ZXJDYWNoZTsKK307CisjZW5kaWYgLy8gZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90
ZXN0X2V3azJfY29udGV4dC5jcHAKaW5kZXggMWQ0NGFjYmZjZGEzN2RiOWQ5ZTk0ODUwN2U3NmIz
NjQ5YzRmYTliNC4uMjc0M2YyNTYxNjU5MzRkNTM0MTg4ZTE2MjM0ZjNkOTMyZmQzYjI5MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9jb250ZXh0LmNwcApAQCAtNTMsNiArNTMsMTQgQEAgVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldCkKICAgICBBU1NFUlRfRVEo
Y29va2llTWFuYWdlciwgZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnRleHQpKTsK
IH0KIAorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2RhdGFiYXNlX21hbmFn
ZXJfZ2V0KQoreworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9n
ZXQod2ViVmlldygpKTsKKyAgICBFd2tfRGF0YWJhc2VfTWFuYWdlciogZGF0YWJhc2VNYW5hZ2Vy
ID0gZXdrX2NvbnRleHRfZGF0YWJhc2VfbWFuYWdlcl9nZXQoY29udGV4dCk7CisgICAgQVNTRVJU
X1RSVUUoZGF0YWJhc2VNYW5hZ2VyKTsKKyAgICBBU1NFUlRfRVEoZGF0YWJhc2VNYW5hZ2VyLCBl
d2tfY29udGV4dF9kYXRhYmFzZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7Cit9CisKIFRFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCkKIHsKICAg
ICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfZGF0YWJhc2VfbWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ5
YjRiMDc5Y2FmOTgxOWFiOGFiMWY1OGI5MmViMjgyNGU3MjZkNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kYXRhYmFz
ZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVX
ZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0
VGVzdDsKKworc3RydWN0IE9yaWdpbkRhdGEgeworICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdDsK
KyAgICBFd2tfRGF0YWJhc2VfTWFuYWdlciogbWFuYWdlcjsKKyAgICBib29sIGRpZFJlY2VpdmVP
cmlnaW5zQ2FsbGJhY2s7CisgICAgYm9vbCBpc1N5bmNocm9uaXplZDsKKyAgICB1bnNpZ25lZCB0
aW1lb3V0U2Vjb25kczsKKworICAgIE9yaWdpbkRhdGEoKQorICAgICAgICA6IG9yaWdpbkxpc3Qo
MCkKKyAgICAgICAgLCBtYW5hZ2VyKDApCisgICAgICAgICwgZGlkUmVjZWl2ZU9yaWdpbnNDYWxs
YmFjayhmYWxzZSkKKyAgICAgICAgLCBpc1N5bmNocm9uaXplZChmYWxzZSkKKyAgICAgICAgLCB0
aW1lb3V0U2Vjb25kcygxMCkKKyAgICB7IH0KK307CisKK3N0YXRpYyB2b2lkIGdldERhdGFiYXNl
T3JpZ2luc0NhbGxiYWNrKEVpbmFfTGlzdCogb3JpZ2lucywgRXdrX0Vycm9yKiBlcnJvciwgdm9p
ZCogdXNlckRhdGEpCit7CisgICAgQVNTRVJUX0ZBTFNFKGVycm9yKTsKKworICAgIE9yaWdpbkRh
dGEqIG9yaWdpbkRhdGEgPSBzdGF0aWNfY2FzdDxPcmlnaW5EYXRhKj4odXNlckRhdGEpOworICAg
IG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2sgPSB0cnVlOworCisgICAgRWlu
YV9MaXN0KiBsOworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0gob3JpZ2lu
cywgbCwgZGF0YSkgeworICAgICAgICBvcmlnaW5EYXRhLT5vcmlnaW5MaXN0ID0gZWluYV9saXN0
X2FwcGVuZChvcmlnaW5EYXRhLT5vcmlnaW5MaXN0LCBkYXRhKTsKKyAgICAgICAgRXdrX1NlY3Vy
aXR5X09yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8RXdrX1NlY3VyaXR5X09yaWdpbio+KGRh
dGEpOworICAgICAgICBpZiAoIXN0cmNtcChld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dl
dChvcmlnaW4pLCAiaHR0cCIpCisgICAgICAgICAgICAmJiAhc3RyY21wKGV3a19zZWN1cml0eV9v
cmlnaW5faG9zdF9nZXQob3JpZ2luKSwgInd3dy5kYXRhYmFzZXRlc3QuY29tIikKKyAgICAgICAg
ICAgICYmICFld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KG9yaWdpbikpIHsKKyAgICAgICAg
ICAgICAgICBvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj
IGJvb2wgdGltZXJDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBPcmlnaW5EYXRhKiBv
cmlnaW5EYXRhID0gc3RhdGljX2Nhc3Q8T3JpZ2luRGF0YSo+KHVzZXJEYXRhKTsKKworICAgIGlm
IChvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCB8fCAhLS0ob3JpZ2luRGF0YS0+dGltZW91dFNl
Y29uZHMpKSB7CisgICAgICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7CisgICAgICAgIHJldHVy
biBFQ09SRV9DQUxMQkFDS19DQU5DRUw7CisgICAgfQorCisgICAgaWYgKG9yaWdpbkRhdGEtPmRp
ZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2spIHsKKyAgICAgICAgb3JpZ2luRGF0YS0+ZGlkUmVjZWl2
ZU9yaWdpbnNDYWxsYmFjayA9IGZhbHNlOworICAgICAgICBld2tfZGF0YWJhc2VfbWFuYWdlcl9v
cmlnaW5zX2dldChvcmlnaW5EYXRhLT5tYW5hZ2VyLCBnZXREYXRhYmFzZU9yaWdpbnNDYWxsYmFj
aywgb3JpZ2luRGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVX
OworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2RhdGFiYXNlX21hbmFnZXJfb3Jp
Z2luc19nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSB3ZWJWaWV3KCk7CisgICAgY29u
c3QgY2hhciogZGF0YWJhc2VIVE1MID0KKyAgICAgICAgIjxodG1sPjxoZWFkPjx0aXRsZT5vcmln
aW5hbCB0aXRsZTwvdGl0bGU+PC9oZWFkPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxz
Y3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4iCisgICAgICAgICIgdmFyIGRiID0gb3BlbkRh
dGFiYXNlKFwiREJUZXN0XCIsIFwiMS4wXCIsIFwiSFRNTDUgRGF0YWJhc2UgZXhhbXBsZVwiLCAy
MDAwMDApOyIKKyAgICAgICAgIjwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsK
KworICAgIEFTU0VSVF9UUlVFKGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQodmlldywgZGF0YWJh
c2VIVE1MLCAiaHR0cDovL3d3dy5kYXRhYmFzZXRlc3QuY29tIiwgMCkpOworICAgIEFTU0VSVF9U
UlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKKworICAgIE9yaWdpbkRhdGEgb3JpZ2luRGF0
YTsKKyAgICBvcmlnaW5EYXRhLm1hbmFnZXIgPSBld2tfY29udGV4dF9kYXRhYmFzZV9tYW5hZ2Vy
X2dldChld2tfdmlld19jb250ZXh0X2dldCh2aWV3KSk7CisgICAgQVNTRVJUX1RSVUUoZXdrX2Rh
dGFiYXNlX21hbmFnZXJfb3JpZ2luc19nZXQob3JpZ2luRGF0YS5tYW5hZ2VyLCBnZXREYXRhYmFz
ZU9yaWdpbnNDYWxsYmFjaywgJm9yaWdpbkRhdGEpKTsKKyAgICBFY29yZV9UaW1lciogZGF0YWJh
c2VfdGltZXIgPSBlY29yZV90aW1lcl9hZGQoMSwgcmVpbnRlcnByZXRfY2FzdDxFY29yZV9UYXNr
X0NiPih0aW1lckNhbGxiYWNrKSwgJm9yaWdpbkRhdGEpOworCisgICAgZWNvcmVfbWFpbl9sb29w
X2JlZ2luKCk7CisgICAgaWYgKGRhdGFiYXNlX3RpbWVyKQorICAgICAgICBlY29yZV90aW1lcl9k
ZWwoZGF0YWJhc2VfdGltZXIpOworCisgICAgQVNTRVJUX1RSVUUob3JpZ2luRGF0YS5pc1N5bmNo
cm9uaXplZCk7CisgICAgQVNTRVJUX0xFKDEsIGVpbmFfbGlzdF9jb3VudChvcmlnaW5EYXRhLm9y
aWdpbkxpc3QpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172571</attachid>
            <date>2012-11-06 06:29:53 -0800</date>
            <delta_ts>2012-11-06 16:33:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101193-20121106232806.patch</filename>
            <type>text/plain</type>
            <size>24087</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzgwYTA0YzViOTNkYzdj
MmRkMGE3NGE1N2MwMjU2NmNlYzU0MGQzYi4uOTVkZGEwMzM2NmQzM2MzYmE5MWI5OTBlOTc3YjJk
M2YwODg0NTQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTA2ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX2RhdGFiYXNlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMTkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGV3a19kYXRhYmFzZV9tYW5hZ2VyIHRvIG1hbmFnZSB3ZWIg
ZGF0YWJhc2UgYW5kCisgICAgICAgIGV3a19kYXRhYmFzZV9tYW5hYWdlcl9vcmlnaW5zX2dldCB0
byBnZXQgb3JpZ2lucyBsaXN0IG9mIHdlYiBzdG9yYWdlLgorICAgICAgICBBZGQgdW5pdCB0ZXN0
cyBmb3IgZXdrX2RhdGFiYXNlX21hbmFnZXIgQVBJcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a19Db250ZXh0OjpFd2tfQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6
ZGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKGV3a19jb250ZXh0X2RhdGFiYXNlX21hbmFnZXJf
Z2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKEV3
a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFu
YWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OkV3a19EYXRh
YmFzZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19EYXRhYmFzZV9NYW5hZ2VyOjpnZXREYXRhYmFz
ZU9yaWdpbnMpOgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxp
c3QpOgorICAgICAgICAoRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgor
ICAgICAgICAoRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQ6OkV3a19EYXRh
YmFzZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKGdldERhdGFiYXNlT3Jp
Z2luc0NhbGxiYWNrKToKKyAgICAgICAgKGV3a19kYXRhYmFzZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdlcl9w
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX0RhdGFiYXNlX01hbmFnZXIpOgorICAgICAg
ICAoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwOgorICAgICAgICAoVEVTVF9GKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0YSk6CisgICAgICAgIChPcmlnaW5EYXRh
OjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldERhdGFiYXNlT3JpZ2luc0NhbGxiYWNrKToKKyAg
ICAgICAgKHRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0xMS0wNiAg
TWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAg
ICAgICBbRUZMXVtXSzJdIE1ha2UgRXdrX0NvbnRleHQgRXdrX09iamVjdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCAxNDBlMzNhZGEwZjk4ZjE0NjBlZWRiNTFmNjZhMDJhNmNkN2EzM2Zl
Li4wZDc0YTQ0OTQ5ZTQwNjg2MmM3MDNiMjFjNjYwYWVkZDcwOGM4M2M2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtNTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29sb3JfcGlja2VyLmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b29raWVfbWFuYWdlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFu
YWdlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19lcnJvci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKQEAgLTI1NCw2ICsyNTUsNyBAQCBTRVQgKEVXZWJLaXQy
X0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb2xvcl9waWNrZXIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuaCIKKyAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRhYmFz
ZV9tYW5hZ2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZXJyb3IuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgiCkBA
IC0zNjEsNiArMzYzLDcgQEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3
azJfY29udGV4dAogICAgIHRlc3RfZXdrMl9jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzCiAgICAg
dGVzdF9ld2syX2Nvb2tpZV9tYW5hZ2VyCisgICAgdGVzdF9ld2syX2RhdGFiYXNlX21hbmFnZXIK
ICAgICB0ZXN0X2V3azJfZG93bmxvYWRfam9iCiAgICAgdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0
cmluZwogICAgIHRlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3NzZlNTJjMzUwMjA2OTA0Y2U2YzljYTRm
MzYwNGEwMDZkZmZmYjk1Li4wN2NhMTI5MzUwZjRlZGI3ZTNkYjRiZjkyYWQ3MGI4YzNhMjA5Y2U0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJld2tfY29sb3JfcGlja2VyLmgiCiAjaW5jbHVkZSAiZXdr
X2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIuaCIKKyNpbmNsdWRlICJl
d2tfZGF0YWJhc2VfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKICNp
bmNsdWRlICJld2tfZXJyb3IuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZS5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmlu
ZGV4IDM5MmU3ZDM5ZDE3ZDg2YWRjZDEzMjRmMWMwMzczOTM3MDQ3M2RiNTQuLjJkYmYzNzg1N2M2
OTdjMDVhNWI4ZTllYmVhNjYwZjNjMjI3MjIyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgImV3a19kYXRhYmFzZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZmF2
aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKICNpbmNs
dWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaCIKQEAgLTYzLDYgKzY0LDcgQEAgc3Rh
dGljIGlubGluZSBDb250ZXh0TWFwJiBjb250ZXh0TWFwKCkKIAogRXdrQ29udGV4dDo6RXdrQ29u
dGV4dChXS0NvbnRleHRSZWYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV9kYXRhYmFzZU1hbmFnZXIoRXdrX0RhdGFiYXNlX01hbmFnZXI6OmNyZWF0ZShXS0NvbnRl
eHRHZXREYXRhYmFzZU1hbmFnZXIobV9jb250ZXh0LmdldCgpKSkpCiAgICAgLCBtX3N0b3JhZ2VN
YW5hZ2VyKEV3a19TdG9yYWdlX01hbmFnZXI6OmNyZWF0ZShXS0NvbnRleHRHZXRLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyKG1fY29udGV4dC5nZXQoKSkpKQogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRV
UykKICAgICAsIG1fYmF0dGVyeVByb3ZpZGVyKEJhdHRlcnlQcm92aWRlcjo6Y3JlYXRlKGNvbnRl
eHQpKQpAQCAtMTQ1LDYgKzE0NywxMSBAQCBFd2tfQ29va2llX01hbmFnZXIqIEV3a0NvbnRleHQ6
OmNvb2tpZU1hbmFnZXIoKQogICAgIHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7CiB9CiAK
K0V3a19EYXRhYmFzZV9NYW5hZ2VyKiBFd2tDb250ZXh0OjpkYXRhYmFzZU1hbmFnZXIoKQorewor
ICAgIHJldHVybiBtX2RhdGFiYXNlTWFuYWdlci5nZXQoKTsKK30KKwogdm9pZCBFd2tDb250ZXh0
OjplbnN1cmVGYXZpY29uRGF0YWJhc2UoKQogewogICAgIGlmIChtX2Zhdmljb25EYXRhYmFzZSkK
QEAgLTIxOCw2ICsyMjUsMTMgQEAgRXdrX0Nvb2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29r
aWVfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQKICAgICByZXR1cm4g
Y29uc3RfY2FzdDxFd2tDb250ZXh0Kj4oaW1wbCktPmNvb2tpZU1hbmFnZXIoKTsKIH0KIAorRXdr
X0RhdGFiYXNlX01hbmFnZXIqIGV3a19jb250ZXh0X2RhdGFiYXNlX21hbmFnZXJfZ2V0KGNvbnN0
IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVU
VVJOKGNvbnN0IEV3a0NvbnRleHQsIGV3a0NvbnRleHQsIGltcGwsIDApOworCisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8RXdrQ29udGV4dCo+KGltcGwpLT5kYXRhYmFzZU1hbmFnZXIoKTsKK30KKwog
RWluYV9Cb29sIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5X3NldChFd2tf
Q29udGV4dCogZXdrQ29udGV4dCwgY29uc3QgY2hhciogZGlyZWN0b3J5UGF0aCkKIHsKICAgICBF
V0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihFd2tDb250ZXh0LCBld2tDb250ZXh0LCBpbXBsLCBm
YWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
aAppbmRleCAwOTNhYjgzYmRjNWJmOGMzY2I1NGZmMTliNmQxZGY1M2YxOGJlMDdmLi40YThlOTU2
NTU2N2UyMTZhODAwMWNlNTlhNzdmZDgwY2ZiZTMwMzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZp
bmUgZXdrX2NvbnRleHRfaAogCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCisjaW5j
bHVkZSAiZXdrX2RhdGFiYXNlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRh
YmFzZS5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKICNpbmNsdWRlICJld2tf
c3RvcmFnZV9tYW5hZ2VyLmgiCkBAIC0xNzAsNiArMTcxLDE1IEBAIEVBUEkgRXdrX0NvbnRleHQg
KmV3a19jb250ZXh0X25ld193aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0IGNoYXIgKnBh
dGgpOwogRUFQSSBFd2tfQ29va2llX01hbmFnZXIgKmV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2Vy
X2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGV4dCk7CiAKIC8qKgorICogR2V0cyB0aGUgZGF0
YWJhc2UgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgorICoKKyAqIEBwYXJh
bSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiBFd2tfRGF0
YWJhc2VfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGZhaWx1
cmUKKyAqLworRUFQSSBFd2tfRGF0YWJhc2VfTWFuYWdlciAqZXdrX2NvbnRleHRfZGF0YWJhc2Vf
bWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOworCisvKioKICAqIFNldHMg
dGhlIGZhdmljb24gZGF0YWJhc2UgZGlyZWN0b3J5IGZvciB0aGlzIEBhIGNvbnRleHQuCiAgKgog
ICogU2V0cyB0aGUgZGlyZWN0b3J5IHBhdGggdG8gYmUgdXNlZCB0byBzdG9yZSB0aGUgZmF2aWNv
bnMgZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X3ByaXZhdGUuaAppbmRleCBlNjI0YWI5ZDJkZmNkOTUwNzgyMGEzMDk0NGM5
OGI3MTQ4YWU4YTIzLi5iZGMwNTcwYmZkMWMwYWI3MjUzNWJmZDA2Yjg3NmFlNjFiMzkwNGNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9w
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIEV3a19Db29raWVf
TWFuYWdlciogY29va2llTWFuYWdlcigpOwogCisgICAgRXdrX0RhdGFiYXNlX01hbmFnZXIqIGRh
dGFiYXNlTWFuYWdlcigpOworCiAgICAgYm9vbCBzZXRGYXZpY29uRGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwogICAgIEV3a19GYXZpY29uX0Rh
dGFiYXNlKiBmYXZpY29uRGF0YWJhc2UoKTsKIApAQCAtOTEsNiArOTMsNyBAQCBwcml2YXRlOgog
ICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0OwogCiAgICAgT3duUHRyPEV3
a19Db29raWVfTWFuYWdlcj4gbV9jb29raWVNYW5hZ2VyOworICAgIE93blB0cjxFd2tfRGF0YWJh
c2VfTWFuYWdlcj4gbV9kYXRhYmFzZU1hbmFnZXI7CiAgICAgT3duUHRyPEV3a19GYXZpY29uX0Rh
dGFiYXNlPiBtX2Zhdmljb25EYXRhYmFzZTsKICAgICBPd25QdHI8RXdrX1N0b3JhZ2VfTWFuYWdl
cj4gbV9zdG9yYWdlTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFu
YWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRjMTNiNDk0YTJmNDhiZDIzMzE4NmNhYjMzNGI5MTFjMzE2
NGY2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kYXRhYmFzZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tf
ZGF0YWJhc2VfbWFuYWdlci5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAi
V0tBcnJheS5oIgorI2luY2x1ZGUgIldLRGF0YWJhc2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdr
X2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19lcnJvcl9wcml2YXRl
LmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbi5oIgorI2luY2x1ZGUgImV3a19zZWN1
cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19EYXRhYmFzZV9NYW5hZ2VyOjpFd2tfRGF0YWJh
c2VfTWFuYWdlcihXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXJSZWYpCisgICAg
OiBtX2RhdGFiYXNlTWFuYWdlcihkYXRhYmFzZU1hbmFnZXJSZWYpCit7IH0KKwordm9pZCBFd2tf
RGF0YWJhc2VfTWFuYWdlcjo6Z2V0RGF0YWJhc2VPcmlnaW5zKFdLRGF0YWJhc2VNYW5hZ2VyR2V0
RGF0YWJhc2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZU9yaWdpbnMobV9kYXRhYmFzZU1hbmFn
ZXIuZ2V0KCksIGNvbnRleHQsIGNhbGxiYWNrKTsKK30KKworRWluYV9MaXN0KiBFd2tfRGF0YWJh
c2VfTWFuYWdlcjo6Y3JlYXRlT3JpZ2luTGlzdChXS0FycmF5UmVmIG9yaWdpbnMpIGNvbnN0Cit7
CisgICAgRWluYV9MaXN0KiBvcmlnaW5MaXN0ID0gMDsKKyAgICBjb25zdCBzaXplX3QgbGVuZ3Ro
ID0gV0tBcnJheUdldFNpemUob3JpZ2lucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFdLU2VjdXJpdHlPcmlnaW5SZWYgd2tPcmlnaW5SZWYg
PSBzdGF0aWNfY2FzdDxXS1NlY3VyaXR5T3JpZ2luUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgo
b3JpZ2lucywgaSkpOworICAgICAgICBSZWZQdHI8RXdrX1NlY3VyaXR5X09yaWdpbj4gb3JpZ2lu
ID0gbV93cmFwcGVyQ2FjaGUuZ2V0KHdrT3JpZ2luUmVmKTsKKyAgICAgICAgaWYgKCFvcmlnaW4p
IHsKKyAgICAgICAgICAgIG9yaWdpbiA9IEV3a19TZWN1cml0eV9PcmlnaW46OmNyZWF0ZSh3a09y
aWdpblJlZik7CisgICAgICAgICAgICBtX3dyYXBwZXJDYWNoZS5zZXQod2tPcmlnaW5SZWYsIG9y
aWdpbik7CisgICAgICAgIH0KKyAgICAgICAgb3JpZ2luTGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQo
b3JpZ2luTGlzdCwgb3JpZ2luLnJlbGVhc2UoKS5sZWFrUmVmKCkpOworICAgIH0KKworICAgIHJl
dHVybiBvcmlnaW5MaXN0OworfQorCitzdHJ1Y3QgRXdrX0RhdGFiYXNlX09yaWdpbnNfQXN5bmNf
R2V0X0NvbnRleHQgeworICAgIGNvbnN0IEV3a19EYXRhYmFzZV9NYW5hZ2VyKiBtYW5hZ2VyOwor
ICAgIEV3a19EYXRhYmFzZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2Vy
RGF0YTsKKworICAgIEV3a19EYXRhYmFzZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KGNvbnN0
IEV3a19EYXRhYmFzZV9NYW5hZ2VyKiBtYW5hZ2VyLCBFd2tfRGF0YWJhc2VfT3JpZ2luc19HZXRf
Q2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorICAgICAgICA6IG1hbmFnZXIobWFuYWdlcikK
KyAgICAgICAgLCBjYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgLCB1c2VyRGF0YSh1c2VyRGF0
YSkKKyAgICB7IH0KK307CisKK3N0YXRpYyB2b2lkIGdldERhdGFiYXNlT3JpZ2luc0NhbGxiYWNr
KFdLQXJyYXlSZWYgb3JpZ2lucywgV0tFcnJvclJlZiB3a0Vycm9yLCB2b2lkKiBjb250ZXh0KQor
eworICAgIE93blB0cjxFd2tfRGF0YWJhc2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCo+IHdl
YkRhdGFiYXNlQ29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEV3a19EYXRhYmFzZV9Pcmln
aW5zX0FzeW5jX0dldF9Db250ZXh0Kj4oY29udGV4dCkpOworICAgIEVpbmFfTGlzdCogb3JpZ2lu
TGlzdCA9IHdlYkRhdGFiYXNlQ29udGV4dC0+bWFuYWdlci0+Y3JlYXRlT3JpZ2luTGlzdChvcmln
aW5zKTsKKyAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3a19FcnJvcjo6Y3JlYXRl
KHdrRXJyb3IpOworICAgIHdlYkRhdGFiYXNlQ29udGV4dC0+Y2FsbGJhY2sob3JpZ2luTGlzdCwg
ZXdrRXJyb3IuZ2V0KCksIHdlYkRhdGFiYXNlQ29udGV4dC0+dXNlckRhdGEpOworfQorCitFaW5h
X0Jvb2wgZXdrX2RhdGFiYXNlX21hbmFnZXJfb3JpZ2luc19nZXQoY29uc3QgRXdrX0RhdGFiYXNl
X01hbmFnZXIqIGV3a0RhdGFiYXNlTWFuYWdlciwgRXdrX0RhdGFiYXNlX09yaWdpbnNfR2V0X0Ni
IGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrRGF0YWJhc2VNYW5hZ2VyLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGNhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBFd2tfRGF0YWJhc2VfT3Jp
Z2luc19Bc3luY19HZXRfQ29udGV4dCogY29udGV4dCA9IG5ldyBFd2tfRGF0YWJhc2VfT3JpZ2lu
c19Bc3luY19HZXRfQ29udGV4dChld2tEYXRhYmFzZU1hbmFnZXIsIGNhbGxiYWNrLCB1c2VyRGF0
YSk7CisgICAgZXdrRGF0YWJhc2VNYW5hZ2VyLT5nZXREYXRhYmFzZU9yaWdpbnMoZ2V0RGF0YWJh
c2VPcmlnaW5zQ2FsbGJhY2ssIGNvbnRleHQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZGF0YWJhc2VfbWFu
YWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2RhdGFiYXNlX21h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kYzgyMzZjNWJlOWQ5NDIwODU2YmYwYWQ3MTkwYzMxMWUzYTE0
YTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2RhdGFiYXNlX21hbmFnZXIuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICBld2tfZGF0YWJhc2VfbWFuYWdlci5o
CisgKiBAYnJpZWYgIERlc2NyaWJlcyB0aGUgRXdrIERhdGFiYXNlIE1hbmFnZXIgQVBJLgorICoK
KyAqIEV3ayBEYXRhYmFzZSBNYW5hZ2VyIG1hbmFnZXMgd2ViIGRhdGFiYXNlLgorICovCisKKyNp
Zm5kZWYgZXdrX2RhdGFiYXNlX21hbmFnZXJfaAorI2RlZmluZSBld2tfZGF0YWJhc2VfbWFuYWdl
cl9oCisKKyNpbmNsdWRlICJld2tfZXJyb3IuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBl
IG5hbWUgZm9yIEV3a19EYXRhYmFzZV9NYW5hZ2VyLiAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrX0Rh
dGFiYXNlX01hbmFnZXIgRXdrX0RhdGFiYXNlX01hbmFnZXI7CisKKy8qKgorICogQHR5cGVkZWYg
RXdrX0RhdGFiYXNlX09yaWdpbnNfR2V0X0NiIEV3a19EYXRhYmFzZV9PcmlnaW5zX0dldF9DYgor
ICogQGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3aXRoIGV3a19kYXRhYmFzZV9tYW5hZ2Vy
X29yaWdpbnNfZ2V0KCkKKyAqCisgKiBAcGFyYW0gb3JpZ2lucyBAYyBFaW5hX0xpc3QgY29udGFp
bmluZyBAYyBFd2tfU2VjdXJpdHlfT3JpZ2luIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBv
ZiBlcnJvciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRz
IGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVzZSBld2tfc2VjdXJpdHlfb3JpZ2lu
X3VucmVmKCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJlZSB0aGUgaXRlbXMKKyAq
LwordHlwZWRlZiB2b2lkICgqRXdrX0RhdGFiYXNlX09yaWdpbnNfR2V0X0NiKShFaW5hX0xpc3Qg
Km9yaWdpbnMsIEV3a19FcnJvciAqZXJyb3IsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICog
R2V0cyBsaXN0IG9mIG9yaWdpbnMgdXNpbmcgd2ViIGRhdGFiYXNlIGFzeW5jaHJvbm91c2x5Lgor
ICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgY29udGV4dCBzdHJ1Y3R1
cmUgbWFkZSBmcm9tIGNhbGxiYWNrIGFuZCB1c2VyX2RhdGEuCisgKgorICogQHBhcmFtIG1hbmFn
ZXIgRXdrX0RhdGFiYXNlX01hbmFnZXIgb2JqZWN0CisgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJh
Y2sgdG8gZ2V0IGRhdGFiYXNlIG9yaWdpbnMKKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRh
IHdpbGwgYmUgcGFzc2VkIHdoZW4gcmVzdWx0X2NhbGxiYWNrIGlzIGNhbGxlZCwKKyAqICAgIC1p
LmUuLCB1c2VyIGRhdGEgd2lsbCBiZSBrZXB0IHVudGlsIGNhbGxiYWNrIGlzIGNhbGxlZAorICoK
KyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFp
bHVyZQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZGF0YWJhc2VfbWFuYWdlcl9vcmlnaW5zX2dl
dChjb25zdCBFd2tfRGF0YWJhc2VfTWFuYWdlciAqbWFuYWdlciwgRXdrX0RhdGFiYXNlX09yaWdp
bnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkICp1c2VyX2RhdGEpOworCisjaWZkZWYgX19jcGx1c3Bs
dXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a19kYXRhYmFzZV9tYW5hZ2VyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRhYmFzZV9tYW5hZ2Vy
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kYXRhYmFz
ZV9tYW5hZ2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjRhNjYxNjQzMmQ1MmJkNjYxYjBmOTYx
ZDhiYTIyMzQ2ZjcwOGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfZGF0YWJh
c2VfbWFuYWdlcl9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0
ZV9oCisKKyNpbmNsdWRlICJXS0RhdGFiYXNlTWFuYWdlci5oIgorI2luY2x1ZGUgIldLUmV0YWlu
UHRyLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitjbGFz
cyBFd2tfRGF0YWJhc2VfTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
RXdrX0RhdGFiYXNlX01hbmFnZXI+IGNyZWF0ZShXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFz
ZU1hbmFnZXJSZWYpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV3a19EYXRh
YmFzZV9NYW5hZ2VyKGRhdGFiYXNlTWFuYWdlclJlZikpOworICAgIH0KKworICAgIEVpbmFfTGlz
dCogY3JlYXRlT3JpZ2luTGlzdChXS0FycmF5UmVmIHdrTGlzdCkgY29uc3Q7CisgICAgdm9pZCBn
ZXREYXRhYmFzZU9yaWdpbnMoV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZU9yaWdpbnNGdW5j
dGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgRXdrX0RhdGFiYXNlX01hbmFnZXIoV0tEYXRhYmFzZU1hbmFnZXJSZWYpOworCisgICAg
V0tSZXRhaW5QdHI8V0tEYXRhYmFzZU1hbmFnZXJSZWY+IG1fZGF0YWJhc2VNYW5hZ2VyOworICAg
IG11dGFibGUgSGFzaE1hcDxXS1NlY3VyaXR5T3JpZ2luUmVmLCBSZWZQdHI8RXdrX1NlY3VyaXR5
X09yaWdpbj4gPiBtX3dyYXBwZXJDYWNoZTsKK307CisjZW5kaWYgLy8gZXdrX2RhdGFiYXNlX21h
bmFnZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKaW5kZXggMzQ3ZGQwNTMxZmU0
NWY0NzU0NDE2MjFiMzdkM2Y4Y2Q4ZmM1YTdjYi4uYjAyYThkMjZlOGViZmE3Y2NkMGY0MDQ4NGI1
ZmY4MGFlNTVlODdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcApAQCAtNTMsNiArNTMsMTQg
QEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dl
dCkKICAgICBBU1NFUlRfRVEoY29va2llTWFuYWdlciwgZXdrX2NvbnRleHRfY29va2llX21hbmFn
ZXJfZ2V0KGNvbnRleHQpKTsKIH0KIAorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250
ZXh0X2RhdGFiYXNlX21hbmFnZXJfZ2V0KQoreworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0g
ZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKTsKKyAgICBFd2tfRGF0YWJhc2VfTWFuYWdl
ciogZGF0YWJhc2VNYW5hZ2VyID0gZXdrX2NvbnRleHRfZGF0YWJhc2VfbWFuYWdlcl9nZXQoY29u
dGV4dCk7CisgICAgQVNTRVJUX1RSVUUoZGF0YWJhc2VNYW5hZ2VyKTsKKyAgICBBU1NFUlRfRVEo
ZGF0YWJhc2VNYW5hZ2VyLCBld2tfY29udGV4dF9kYXRhYmFzZV9tYW5hZ2VyX2dldChjb250ZXh0
KSk7Cit9CisKIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2Rh
dGFiYXNlX2dldCkKIHsKICAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRl
eHRfZ2V0KHdlYlZpZXcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZGF0YWJhc2VfbWFuYWdlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGQ5YjRiMDc5Y2FmOTgxOWFiOGFiMWY1OGI5MmViMjgyNGU3MjZkNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9kYXRhYmFzZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFz
ZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworc3RydWN0IE9yaWdpbkRhdGEgeworICAgIEVpbmFf
TGlzdCogb3JpZ2luTGlzdDsKKyAgICBFd2tfRGF0YWJhc2VfTWFuYWdlciogbWFuYWdlcjsKKyAg
ICBib29sIGRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2s7CisgICAgYm9vbCBpc1N5bmNocm9uaXpl
ZDsKKyAgICB1bnNpZ25lZCB0aW1lb3V0U2Vjb25kczsKKworICAgIE9yaWdpbkRhdGEoKQorICAg
ICAgICA6IG9yaWdpbkxpc3QoMCkKKyAgICAgICAgLCBtYW5hZ2VyKDApCisgICAgICAgICwgZGlk
UmVjZWl2ZU9yaWdpbnNDYWxsYmFjayhmYWxzZSkKKyAgICAgICAgLCBpc1N5bmNocm9uaXplZChm
YWxzZSkKKyAgICAgICAgLCB0aW1lb3V0U2Vjb25kcygxMCkKKyAgICB7IH0KK307CisKK3N0YXRp
YyB2b2lkIGdldERhdGFiYXNlT3JpZ2luc0NhbGxiYWNrKEVpbmFfTGlzdCogb3JpZ2lucywgRXdr
X0Vycm9yKiBlcnJvciwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQVNTRVJUX0ZBTFNFKGVycm9y
KTsKKworICAgIE9yaWdpbkRhdGEqIG9yaWdpbkRhdGEgPSBzdGF0aWNfY2FzdDxPcmlnaW5EYXRh
Kj4odXNlckRhdGEpOworICAgIG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2sg
PSB0cnVlOworCisgICAgRWluYV9MaXN0KiBsOworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9M
SVNUX0ZPUkVBQ0gob3JpZ2lucywgbCwgZGF0YSkgeworICAgICAgICBvcmlnaW5EYXRhLT5vcmln
aW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5EYXRhLT5vcmlnaW5MaXN0LCBkYXRhKTsK
KyAgICAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8RXdrX1Nl
Y3VyaXR5X09yaWdpbio+KGRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChld2tfc2VjdXJpdHlf
b3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4pLCAiaHR0cCIpCisgICAgICAgICAgICAmJiAhc3Ry
Y21wKGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQob3JpZ2luKSwgInd3dy5kYXRhYmFzZXRl
c3QuY29tIikKKyAgICAgICAgICAgICYmICFld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KG9y
aWdpbikpIHsKKyAgICAgICAgICAgICAgICBvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworc3RhdGljIGJvb2wgdGltZXJDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBPcmlnaW5EYXRhKiBvcmlnaW5EYXRhID0gc3RhdGljX2Nhc3Q8T3JpZ2luRGF0YSo+KHVz
ZXJEYXRhKTsKKworICAgIGlmIChvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCB8fCAhLS0ob3Jp
Z2luRGF0YS0+dGltZW91dFNlY29uZHMpKSB7CisgICAgICAgIGVjb3JlX21haW5fbG9vcF9xdWl0
KCk7CisgICAgICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7CisgICAgfQorCisgICAg
aWYgKG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2spIHsKKyAgICAgICAgb3Jp
Z2luRGF0YS0+ZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjayA9IGZhbHNlOworICAgICAgICBld2tf
ZGF0YWJhc2VfbWFuYWdlcl9vcmlnaW5zX2dldChvcmlnaW5EYXRhLT5tYW5hZ2VyLCBnZXREYXRh
YmFzZU9yaWdpbnNDYWxsYmFjaywgb3JpZ2luRGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIEVD
T1JFX0NBTExCQUNLX1JFTkVXOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Rh
dGFiYXNlX21hbmFnZXJfb3JpZ2luc19nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSB3
ZWJWaWV3KCk7CisgICAgY29uc3QgY2hhciogZGF0YWJhc2VIVE1MID0KKyAgICAgICAgIjxodG1s
PjxoZWFkPjx0aXRsZT5vcmlnaW5hbCB0aXRsZTwvdGl0bGU+PC9oZWFkPiIKKyAgICAgICAgIjxi
b2R5PiIKKyAgICAgICAgIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4iCisgICAgICAg
ICIgdmFyIGRiID0gb3BlbkRhdGFiYXNlKFwiREJUZXN0XCIsIFwiMS4wXCIsIFwiSFRNTDUgRGF0
YWJhc2UgZXhhbXBsZVwiLCAyMDAwMDApOyIKKyAgICAgICAgIjwvc2NyaXB0PiIKKyAgICAgICAg
IjwvYm9keT48L2h0bWw+IjsKKworICAgIEFTU0VSVF9UUlVFKGV3a192aWV3X2h0bWxfc3RyaW5n
X2xvYWQodmlldywgZGF0YWJhc2VIVE1MLCAiaHR0cDovL3d3dy5kYXRhYmFzZXRlc3QuY29tIiwg
MCkpOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKKworICAgIE9y
aWdpbkRhdGEgb3JpZ2luRGF0YTsKKyAgICBvcmlnaW5EYXRhLm1hbmFnZXIgPSBld2tfY29udGV4
dF9kYXRhYmFzZV9tYW5hZ2VyX2dldChld2tfdmlld19jb250ZXh0X2dldCh2aWV3KSk7CisgICAg
QVNTRVJUX1RSVUUoZXdrX2RhdGFiYXNlX21hbmFnZXJfb3JpZ2luc19nZXQob3JpZ2luRGF0YS5t
YW5hZ2VyLCBnZXREYXRhYmFzZU9yaWdpbnNDYWxsYmFjaywgJm9yaWdpbkRhdGEpKTsKKyAgICBF
Y29yZV9UaW1lciogZGF0YWJhc2VfdGltZXIgPSBlY29yZV90aW1lcl9hZGQoMSwgcmVpbnRlcnBy
ZXRfY2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckNhbGxiYWNrKSwgJm9yaWdpbkRhdGEpOworCisg
ICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisgICAgaWYgKGRhdGFiYXNlX3RpbWVyKQorICAg
ICAgICBlY29yZV90aW1lcl9kZWwoZGF0YWJhc2VfdGltZXIpOworCisgICAgQVNTRVJUX1RSVUUo
b3JpZ2luRGF0YS5pc1N5bmNocm9uaXplZCk7CisgICAgQVNTRVJUX0xFKDEsIGVpbmFfbGlzdF9j
b3VudChvcmlnaW5EYXRhLm9yaWdpbkxpc3QpKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>