<?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>88678</bug_id>
          
          <creation_ts>2012-06-08 11:55:52 -0700</creation_ts>
          <short_desc>IndexedDB: Add chromium webkit API for metadata snapshots</short_desc>
          <delta_ts>2012-06-19 14:20:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>88467</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>644910</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-08 11:55:52 -0700</bug_when>
    <thetext>IndexedDB: Add new type (and chromium webkit API) for metadata snapshot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644911</commentid>
    <comment_count>1</comment_count>
      <attachid>146621</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-08 11:57:07 -0700</bug_when>
    <thetext>Created attachment 146621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644914</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-08 11:58:34 -0700</bug_when>
    <thetext>Needs an xcode project update to add Modules/indexeddb/IDBMetadata.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644916</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 12:02:47 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645746</commentid>
    <comment_count>4</comment_count>
      <attachid>146621</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-06-10 23:05:32 -0700</bug_when>
    <thetext>Comment on attachment 146621
Patch

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

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:68
&gt; +class WebIDBObjectStoreMetadata {

nit: one file per top-level class, sorry :(

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:93
&gt; +    WEBKIT_EXPORT WebIDBIndexMetadata(const WebIDBIndexMetadata&amp;);

nit: the usual pattern is to export an assign method instead, and just inline
the constructor as a call to assign.

is there a reason to hide the default constructor and destructor?  it seems a
bit odd to hide those using WEBKIT_IMPLEMENTATION.  what are you trying to 
achieve by doing that?  normally WEBKIT_IMPLEMENTATION is only used to hide
methods that use WebCore types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646996</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-12 09:19:05 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 146621 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146621&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebIDBMetadata.h:68
&gt; &gt; +class WebIDBObjectStoreMetadata {
&gt; 
&gt; nit: one file per top-level class, sorry :(

Since the usage of these types are relatively scoped, any opinions on this approach:

struct WebIDBMetadata {
    struct ObjectStoreMetadata;
    struct IndexMetadata;

    WebString name;
    WebString version;
    WebVector&lt;ObjectStoreMetadata&gt; objectStores;

    struct ObjectStoreMetadata {
        WebString name;
        WebIDBKeyPath keyPath;
        bool autoIncrement;
        WebVector&lt;IndexMetadata&gt; indexes;
    };

    struct IndexMetadata {
        WebString name;
        WebIDBKeyPath keyPath;
        bool unique;
        bool multiEntry;
    };
};

&quot;WebIDBMetadata::ObjectStoreMetadata&quot; is a bit of a mouthful though.

&gt; &gt; Source/WebKit/chromium/public/WebIDBMetadata.h:93
&gt; &gt; +    WEBKIT_EXPORT WebIDBIndexMetadata(const WebIDBIndexMetadata&amp;);
&gt; 
&gt; nit: the usual pattern is to export an assign method instead, and just inline
&gt; the constructor as a call to assign.
&gt; 
&gt; is there a reason to hide the default constructor and destructor?  it seems a
&gt; bit odd to hide those using WEBKIT_IMPLEMENTATION.  what are you trying to 
&gt; achieve by doing that?  normally WEBKIT_IMPLEMENTATION is only used to hide
&gt; methods that use WebCore types.

No good reason - just cargo-cult structuring. I&apos;ve dramatically simplified it in an upcoming iteration - basically to just the above plus default constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647020</commentid>
    <comment_count>6</comment_count>
      <attachid>147103</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-12 09:55:21 -0700</bug_when>
    <thetext>Created attachment 147103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647024</commentid>
    <comment_count>7</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-12 09:58:57 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; &quot;WebIDBMetadata::ObjectStoreMetadata&quot; is a bit of a mouthful though.
&gt; 
... so simplified further to WebIDBMetadata::ObjectStore since the context is provided.

This is the minimum to get the Chromium side landed (http://codereview.chromium.org/10533057/) but doesn&apos;t include the WebCore type. That could be added here, in the final patch (https://bugs.webkit.org/show_bug.cgi?id=88467), or in another intermediate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647146</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-12 11:52:24 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=88467 updated with the &quot;final&quot; patch - it includes the WebIDBMetadata.cpp implementation which are minimal methods for converting between WebKit and WebCore values.

I can move that (and the WebCore type) to this patch if that&apos;s a better split.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647156</commentid>
    <comment_count>9</comment_count>
      <attachid>147103</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-06-12 11:57:01 -0700</bug_when>
    <thetext>Comment on attachment 147103
Patch

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

&gt; Source/WebKit/chromium/src/WebIDBKeyPath.cpp:67
&gt; +    return *this;

LGTM - I&apos;m personally not a huge fan of operator=() in general, but especially when the implementation includes memory allocation, but it seems consistent with related stuff I&apos;ve seen here.

(I actually wonder if in the future, m_private could just be a local copy of the entire IDBKey rather than a pointer to a tiny new&apos;ed object?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647158</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-12 12:00:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 147103 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147103&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebIDBKeyPath.cpp:67
&gt; &gt; +    return *this;
&gt; 
&gt; LGTM - I&apos;m personally not a huge fan of operator=() in general, but especially when the implementation includes memory allocation, but it seems consistent with related stuff I&apos;ve seen here.
&gt; 
&gt; (I actually wonder if in the future, m_private could just be a local copy of the entire IDBKey rather than a pointer to a tiny new&apos;ed object?)

In the future I don&apos;t want this exposed at all. :) But yeah - I think my WebIDBKeyPath impl uses the worst parts from other WebXXX classes, and could use a do-over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649903</commentid>
    <comment_count>11</comment_count>
      <attachid>147103</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-06-14 22:56:38 -0700</bug_when>
    <thetext>Comment on attachment 147103
Patch

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

&gt; Source/WebKit/chromium/public/WebIDBKeyPath.h:48
&gt;      WEBKIT_EXPORT WebIDBKeyPath(const WebIDBKeyPath&amp;);

nit: the normal pattern is to implement copy constructor and assignment operator
inline in terms of an assign function.  they don&apos;t need to be exported then.
see WebNode.h for example.

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:31
&gt; +#include &quot;platform/WebPrivateOwnPtr.h&quot;

nit: looks like you don&apos;t need this header.

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:35
&gt; +namespace WebCore {

looks like you don&apos;t need these forward declarations

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:50
&gt; +    WebIDBMetadata()

nit: no need to write this constructor

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:58
&gt; +        WebVector&lt;Index&gt; indexes;

nit: indexes -&gt; indices?

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:60
&gt; +            : name(WebString())

nit: no need for explicit constructor here

&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:71
&gt; +            : name(WebString())

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650366</commentid>
    <comment_count>12</comment_count>
      <attachid>147103</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-15 11:35:14 -0700</bug_when>
    <thetext>Comment on attachment 147103
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebIDBKeyPath.h:48
&gt;&gt;      WEBKIT_EXPORT WebIDBKeyPath(const WebIDBKeyPath&amp;);
&gt; 
&gt; nit: the normal pattern is to implement copy constructor and assignment operator
&gt; inline in terms of an assign function.  they don&apos;t need to be exported then.
&gt; see WebNode.h for example.

Awesome, thanks for the pointer. Corrected.

&gt;&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:31
&gt;&gt; +#include &quot;platform/WebPrivateOwnPtr.h&quot;
&gt; 
&gt; nit: looks like you don&apos;t need this header.

Oops, yes. Simplified but left these behind. Done.

&gt;&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:35
&gt;&gt; +namespace WebCore {
&gt; 
&gt; looks like you don&apos;t need these forward declarations

Ditto. Removed.

&gt;&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:50
&gt;&gt; +    WebIDBMetadata()
&gt; 
&gt; nit: no need to write this constructor

Removed.

&gt;&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:58
&gt;&gt; +        WebVector&lt;Index&gt; indexes;
&gt; 
&gt; nit: indexes -&gt; indices?

I waffled on that myself. The interwebz say both are considered correct English at this point. The IDB spec uses &quot;indexes&quot; in prose (neither in the API itself - just &quot;indexNames&quot;) and we use &quot;indexes&quot; elsewhere in WebKit so that&apos;s what I&apos;ve gone with.

&gt;&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:60
&gt;&gt; +            : name(WebString())
&gt; 
&gt; nit: no need for explicit constructor here

Removed.

&gt;&gt; Source/WebKit/chromium/public/WebIDBMetadata.h:71
&gt;&gt; +            : name(WebString())
&gt; 
&gt; ditto

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650373</commentid>
    <comment_count>13</comment_count>
      <attachid>147866</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-15 11:46:55 -0700</bug_when>
    <thetext>Created attachment 147866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651667</commentid>
    <comment_count>14</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-18 13:35:14 -0700</bug_when>
    <thetext>fishd@ or anyone - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652800</commentid>
    <comment_count>15</comment_count>
      <attachid>147866</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-19 14:19:58 -0700</bug_when>
    <thetext>Comment on attachment 147866
Patch

Clearing flags on attachment: 147866

Committed r120753: &lt;http://trac.webkit.org/changeset/120753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652801</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-19 14:20:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146621</attachid>
            <date>2012-06-08 11:57:07 -0700</date>
            <delta_ts>2012-06-12 09:55:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88678-20120608115706.patch</filename>
            <type>text/plain</type>
            <size>21321</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFlMzY5ZWZiODM1NjQ5
NzZmYjAwNDU4NDc2ZTkzYWIyMWMxY2FmYS4uMTM1YTE5NmJmZDk5MTVjZWE2ODhmYzgwNmQxZjJh
YjI3YzA3MGZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTA4ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBBZGQg
bmV3IHR5cGUgKGFuZCBjaHJvbWl1bSB3ZWJraXQgQVBJKSBmb3IgbWV0YWRhdGEgc25hcHNob3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4Njc4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gdGVzdHMg
LSBub3QgeWV0IHVzZWQuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzg4NDY3CisKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSk6CisgICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRl
eE1ldGFkYXRhOjpJREJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQkluZGV4TWV0YWRhdGEp
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKwogMjAxMi0wNi0wOCAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiByMTE5ODAyOiBSZW1v
dmUgdW5uZWNlc3NhcnkgQVNTRVJUKCFtX2RlbGV0aW9uSGFzQmVndW4pIGZyb20gRG9jdW1lbnQu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxZTdhMTlkZDgwMzc3NzZmYzU3OWI2Yjc3
Y2VjMjEzNWQ0YjA0MzllLi43N2MzZmMyMDk4NWFjNjQwZGFkYzRjNTlkM2JlYWIyZTI3ZDhlOTBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA2LTA4
ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERC
OiBBZGQgbmV3IHR5cGUgKGFuZCBjaHJvbWl1bSB3ZWJraXQgQVBJKSBmb3IgbWV0YWRhdGEgc25h
cHNob3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4
Njc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6bWV0YWRhdGEpOgorICAgICAgICAqIHB1YmxpYy9XZWJJ
REJNZXRhZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSk6CisgICAgICAgIChXZWJJREJJbmRleE1ldGFkYXRhKToKKyAgICAg
ICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlTWV0YWRhdGE6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQkRhdGFiYXNlTWV0YWRhdGE6OldlYklEQkRhdGFiYXNlTWV0YWRhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZU1ldGFkYXRhOjp+V2ViSURCRGF0YWJh
c2VNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlTWV0YWRhdGE6Om5h
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZU1ldGFkYXRhOjp2ZXJzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VNZXRhZGF0YTo6b2JqZWN0U3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VNZXRhZGF0YTo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VNZXRhZGF0YTo6b3BlcmF0b3IgY29uc3QgV2Vi
Q29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6fldlYklEQk9iamVjdFN0b3JlTWV0YWRhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpuYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6a2V5UGF0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlTWV0YWRhdGE6OmF1dG9JbmNyZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRhOjppbmRleGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6b3BlcmF0b3IgY29uc3Qg
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJJbmRleE1ldGFkYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJJbmRleE1l
dGFkYXRhOjpXZWJJREJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5k
ZXhNZXRhZGF0YTo6fldlYklEQkluZGV4TWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJJbmRleE1ldGFkYXRhOjpuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXhNZXRh
ZGF0YTo6a2V5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkluZGV4TWV0YWRhdGE6OnVu
aXF1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkluZGV4TWV0YWRhdGE6Om11bHRpRW50cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJJbmRleE1ldGFkYXRhOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJREJJbmRleE1ldGFkYXRhOjpvcGVyYXRvciBjb25zdCBXZWJDb3Jl
OjpJREJJbmRleE1ldGFkYXRhJik6CisKIDIwMTItMDYtMDggIFBldGVyIEJldmVybG9vICA8cGV0
ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmUtZW5hYmxlIFNIQVJFRF9X
T1JLRVJTIGZvciBBbmRyb2lkIHVudGlsIGEgYnVpbGQgZml4IGhhcyBiZWVuIHJlc29sdmVkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2NiZWY3M2JjZTVkMDMxZjFhYjQ3ZWQzMWJhOGEyM2JkODE2NjhmNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgK
QEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQk1ldGFkYXRhX2gKKyNkZWZpbmUgSURCTWV0
YWRhdGFfaAorCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKK3N0cnVjdCBJREJJbmRl
eE1ldGFkYXRhOworCitzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CisgICAgSURCRGF0YWJh
c2VNZXRhZGF0YSgpIHsgfQorICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCisgICAgICAgIDogbmFtZShuYW1lKQorICAgICAg
ICAsIHZlcnNpb24odmVyc2lvbikgeyB9CisgICAgU3RyaW5nIG5hbWU7CisgICAgU3RyaW5nIHZl
cnNpb247CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhPiBPYmplY3RTdG9yZU1hcDsKKyAgICBPYmplY3RTdG9yZU1hcCBvYmplY3RTdG9yZXM7Cit9
OworCitzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CisgICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSgpIHsgfQorICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAg
ICAgIDogbmFtZShuYW1lKQorICAgICAgICAsIGtleVBhdGgoa2V5UGF0aCkKKyAgICAgICAgLCBh
dXRvSW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpIHsgfQorICAgIFN0cmluZyBuYW1lOworICAgIElE
QktleVBhdGgga2V5UGF0aDsKKyAgICBib29sIGF1dG9JbmNyZW1lbnQ7CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBJREJJbmRleE1ldGFkYXRhPiBJbmRleE1hcDsKKyAgICBJbmRleE1h
cCBpbmRleGVzOworfTsKKworc3RydWN0IElEQkluZGV4TWV0YWRhdGEgeworICAgIElEQkluZGV4
TWV0YWRhdGEoKSB7IH0KKyAgICBJREJJbmRleE1ldGFkYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkK
KyAgICAgICAgOiBuYW1lKG5hbWUpCisgICAgICAgICwga2V5UGF0aChrZXlQYXRoKQorICAgICAg
ICAsIHVuaXF1ZSh1bmlxdWUpCisgICAgICAgICwgbXVsdGlFbnRyeShtdWx0aUVudHJ5KSB7IH0K
KyAgICBTdHJpbmcgbmFtZTsKKyAgICBJREJLZXlQYXRoIGtleVBhdGg7CisgICAgYm9vbCB1bmlx
dWU7CisgICAgYm9vbCBtdWx0aUVudHJ5OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFjaW5nX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCBiM2U2NjI3ZWNkMjQ0ZjRkN2M3Mzc0ZTJjNGQ2ODc0ODc1YTM0NDlmLi4zYTExMTcwMWM1
NzAzYjhjODZiNmYxZmI0ZDQ0ZTZiMzkxNGJmODM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNDg0
LDYgKzE0ODQsNyBAQAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJD
b2RpbmcuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRh
dGEuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
JywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oJywKICAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggOTkyMDRiODg2YWI3ZWMxY2Y0ZDI0
YTU5M2NjZGNkMDI3ZDU0OTkwMS4uYTM5ZWFlNmNmZTM0OTc4MGJkYjMxNTA0M2M0NGEzM2JjM2I0
MWEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTgxLDYgKzE4MSw3IEBACiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJLZXkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJJREJLZXlQYXRoLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSURCS2V5
UmFuZ2UuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJNZXRhZGF0YS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYklEQk9iamVjdFN0b3JlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oJywKQEAgLTU1OCw2ICs1NTksNyBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViSURCS2V5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJJREJLZXlQYXRoLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJREJLZXlSYW5nZS5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSURCTWV0YWRhdGEuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
SURCVHJhbnNhY3Rpb25JbXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCRGF0YWJhc2UuaAppbmRleCBiMzk4NTM0MTY1NTQzYTE5N2E2MTc5N2Q1NDc0OWRh
ODVlM2EzNTZlLi5lOGU2NDk3Yjc1OGM2MDYyNmIwMTAyZDk2NmFkZGI3ZmYyZmNlMzI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIldlYkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJX
ZWJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiV2ViSURCTWV0YWRhdGEuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2ICs0
NSwxMSBAQCBjbGFzcyBXZWJJREJEYXRhYmFzZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vi
SURCRGF0YWJhc2UoKSB7IH0KIAorICAgIHZpcnR1YWwgV2ViSURCRGF0YWJhc2VNZXRhZGF0YSBt
ZXRhZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBXZWJJREJEYXRhYmFzZU1ldGFkYXRhOjpjcmVhdGUoKTsKKyAg
ICB9CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgbmFtZSgpIGNvbnN0CiAgICAgewogICAgICAgICBX
RUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJNZXRhZGF0YS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCTWV0YWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWEwNmZlZjU3Y2IwNDY4ZDVhZGRk
Zjk4MWIyZThmYWMyNzIyYWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCTWV0YWRhdGEuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViSURCTWV0YWRhdGFfaAorI2RlZmluZSBXZWJJREJNZXRhZGF0YV9oCisKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRl
T3duUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBJREJEYXRh
YmFzZU1ldGFkYXRhOworc3RydWN0IElEQkluZGV4TWV0YWRhdGE7CitzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYklEQklu
ZGV4TWV0YWRhdGE7CitjbGFzcyBXZWJJREJLZXlQYXRoOworY2xhc3MgV2ViSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTsKKworY2xhc3MgV2ViSURCRGF0YWJhc2VNZXRhZGF0YSB7CitwdWJsaWM6Cisg
ICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViSURCRGF0YWJhc2VNZXRhZGF0YSBjcmVhdGUoKTsK
KyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJJREJEYXRhYmFzZU1ldGFkYXRhIGNyZWF0ZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmVyc2lvbiwgY29uc3QgV2Vi
VmVjdG9yPFdlYklEQk9iamVjdFN0b3JlTWV0YWRhdGE+JiBvYmplY3Rfc3RvcmVzKTsKKyAgICBX
RUJLSVRfRVhQT1JUIFdlYklEQkRhdGFiYXNlTWV0YWRhdGEoY29uc3QgV2ViSURCRGF0YWJhc2VN
ZXRhZGF0YSYpOworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgbmFtZSgpIGNvbnN0Owor
ICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKyAgICBXRUJLSVRf
RVhQT1JUIFdlYlZlY3RvcjxXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBvYmplY3RTdG9yZXMo
KSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYklEQkRhdGFiYXNl
TWV0YWRhdGEoKTsKKyAgICBXZWJJREJEYXRhYmFzZU1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklE
QkRhdGFiYXNlTWV0YWRhdGEmKTsKKyAgICB+V2ViSURCRGF0YWJhc2VNZXRhZGF0YSgpOworICAg
IFdlYklEQkRhdGFiYXNlTWV0YWRhdGEmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJREJEYXRh
YmFzZU1ldGFkYXRhJik7CisgICAgb3BlcmF0b3IgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSYoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVPd25Q
dHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gbV9wcml2YXRlOworfTsKKworY2xhc3Mg
V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CitwdWJsaWM6CisgICAgV0VCS0lUX0VYUE9SVCBz
dGF0aWMgV2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBjcmVhdGUoY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBjb25zdCBXZWJW
ZWN0b3I8V2ViSURCSW5kZXhNZXRhZGF0YT4mIGluZGV4ZXMpOworICAgIFdFQktJVF9FWFBPUlQg
V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YShjb25zdCBXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRh
Jik7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgV0VC
S0lUX0VYUE9SVCBXZWJJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQ
T1JUIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViVmVj
dG9yPFdlYklEQkluZGV4TWV0YWRhdGE+IGluZGV4ZXMoKSBjb25zdDsKKworI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorICAgIFdlYklEQk9iamVjdFN0b3JlTWV0YWRhdGEoKTsKKyAgICBXZWJJ
REJPYmplY3RTdG9yZU1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRh
dGEmKTsKKyAgICB+V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YSgpOworICAgIFdlYklEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1l
dGFkYXRhJik7CisgICAgb3BlcmF0b3IgY29uc3QgV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVPd25QdHI8
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gbV9wcml2YXRlOworfTsKKworY2xhc3Mg
V2ViSURCSW5kZXhNZXRhZGF0YSB7CitwdWJsaWM6CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMg
V2ViSURCSW5kZXhNZXRhZGF0YSBjcmVhdGUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgV0VCS0lU
X0VYUE9SVCBXZWJJREJJbmRleE1ldGFkYXRhKGNvbnN0IFdlYklEQkluZGV4TWV0YWRhdGEmKTsK
KworICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICBXRUJLSVRf
RVhQT1JUIFdlYklEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQg
Ym9vbCB1bmlxdWUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgbXVsdGlFbnRyeSgp
IGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViSURCSW5kZXhNZXRh
ZGF0YSgpOworICAgIFdlYklEQkluZGV4TWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCSW5kZXhN
ZXRhZGF0YSYpOworICAgIH5XZWJJREJJbmRleE1ldGFkYXRhKCk7CisgICAgV2ViSURCSW5kZXhN
ZXRhZGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OklEQkluZGV4TWV0YWRhdGEmKTsKKyAg
ICBvcGVyYXRvciBjb25zdCBXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhJigpIGNvbnN0OworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpJREJJbmRleE1l
dGFkYXRhPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYklEQktleVBhdGhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCTWV0YWRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
TWV0YWRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExOTY0ZWUwMjk0MjFhMDkwNmE0YmY3NzA0YmMxYTQ0
OTUwOTFkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJNZXRhZGF0YS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSURCTWV0YWRhdGEuaCIKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJXZWJJREJL
ZXlQYXRoLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViVmVjdG9yLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViSURCRGF0YWJhc2VNZXRhZGF0YSBXZWJJREJEYXRhYmFzZU1ldGFk
YXRhOjpjcmVhdGUoKQoreworICAgIHJldHVybiBXZWJJREJEYXRhYmFzZU1ldGFkYXRhKElEQkRh
dGFiYXNlTWV0YWRhdGEoKSk7Cit9CisKK1dlYklEQkRhdGFiYXNlTWV0YWRhdGEgV2ViSURCRGF0
YWJhc2VNZXRhZGF0YTo6Y3JlYXRlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiB2ZXJzaW9uLCBjb25zdCBXZWJWZWN0b3I8V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4m
IG9iamVjdFN0b3JlcykKK3sKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUs
IHZlcnNpb24pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVzLnNpemUo
KTsgKytpKQorICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tp
XS5uYW1lKCksIG9iamVjdFN0b3Jlc1tpXSk7CisgICAgcmV0dXJuIFdlYklEQkRhdGFiYXNlTWV0
YWRhdGEobWV0YWRhdGEpOworfQorCitXZWJJREJEYXRhYmFzZU1ldGFkYXRhOjpXZWJJREJEYXRh
YmFzZU1ldGFkYXRhKCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgSURCRGF0YWJhc2VNZXRhZGF0YSgp
KQoreworfQorCitXZWJJREJEYXRhYmFzZU1ldGFkYXRhOjpXZWJJREJEYXRhYmFzZU1ldGFkYXRh
KGNvbnN0IFdlYklEQkRhdGFiYXNlTWV0YWRhdGEmIG90aGVyKQorICAgIDogbV9wcml2YXRlKG5l
dyBJREJEYXRhYmFzZU1ldGFkYXRhKG90aGVyKSkKK3sKK30KKworV2ViSURCRGF0YWJhc2VNZXRh
ZGF0YTo6fldlYklEQkRhdGFiYXNlTWV0YWRhdGEoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgw
KTsKK30KKworV2ViU3RyaW5nIFdlYklEQkRhdGFiYXNlTWV0YWRhdGE6Om5hbWUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWU7Cit9CisKK1dlYlN0cmluZyBXZWJJREJEYXRh
YmFzZU1ldGFkYXRhOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT52
ZXJzaW9uOworfQorCitXZWJWZWN0b3I8V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gV2ViSURC
RGF0YWJhc2VNZXRhZGF0YTo6b2JqZWN0U3RvcmVzKCkgY29uc3QKK3sKKyAgICBzaXplX3QgY291
bnQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcHJpdmF0ZS0+b2JqZWN0U3RvcmVzLnNpemUoKSk7
CisgICAgV2ViVmVjdG9yPFdlYklEQk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0b3Jlcyhj
b3VudCk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6
T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9wcml2YXRlLT5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCisg
ICAgICAgIG9iamVjdFN0b3Jlc1tpKytdID0gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gb2JqZWN0
U3RvcmVzOworfQorCitXZWJJREJEYXRhYmFzZU1ldGFkYXRhOjpXZWJJREJEYXRhYmFzZU1ldGFk
YXRhKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIDog
bV9wcml2YXRlKG5ldyBJREJEYXRhYmFzZU1ldGFkYXRhKG1ldGFkYXRhKSkKK3sKK30KKworV2Vi
SURCRGF0YWJhc2VNZXRhZGF0YSYgV2ViSURCRGF0YWJhc2VNZXRhZGF0YTo6b3BlcmF0b3I9KGNv
bnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIG1fcHJp
dmF0ZS5yZXNldChuZXcgSURCRGF0YWJhc2VNZXRhZGF0YShtZXRhZGF0YSkpOworICAgIHJldHVy
biAqdGhpczsKK30KKworV2ViSURCRGF0YWJhc2VNZXRhZGF0YTo6b3BlcmF0b3IgY29uc3QgV2Vi
Q29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYoKSBjb25zdAoreworICAgIHJldHVybiAqKG1fcHJp
dmF0ZS5nZXQoKSk7Cit9CisKK1dlYklEQk9iamVjdFN0b3JlTWV0YWRhdGEgV2ViSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6Y3JlYXRlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURC
S2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBjb25zdCBXZWJWZWN0b3I8V2Vi
SURCSW5kZXhNZXRhZGF0YT4mIGluZGV4ZXMpCit7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBtZXRhZGF0YShuYW1lLCBXZWJJREJLZXlQYXRoKGtleVBhdGgpLCBhdXRvSW5jcmVtZW50KTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1ldGFkYXRhLmluZGV4ZXMuc2V0KGluZGV4ZXNbaV0ubmFtZSgpLCBpbmRleGVzW2ldKTsKKyAg
ICByZXR1cm4gV2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YShtZXRhZGF0YSk7Cit9CisKK1dlYklE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OldlYklEQk9iamVjdFN0b3JlTWV0YWRhdGEoKQorICAgIDog
bV9wcml2YXRlKG5ldyBJREJPYmplY3RTdG9yZU1ldGFkYXRhKCkpCit7Cit9CisKK1dlYklEQk9i
amVjdFN0b3JlTWV0YWRhdGE6OldlYklEQk9iamVjdFN0b3JlTWV0YWRhdGEoY29uc3QgV2ViSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb3RoZXIpCisgICAgOiBtX3ByaXZhdGUobmV3IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEob3RoZXIpKQoreworfQorCitXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRh
Ojp+V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDAp
OworfQorCitXZWJTdHJpbmcgV2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6bmFtZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZTsKK30KKworV2ViSURCS2V5UGF0aCBXZWJJ
REJPYmplY3RTdG9yZU1ldGFkYXRhOjprZXlQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2Vi
SURCS2V5UGF0aChtX3ByaXZhdGUtPmtleVBhdGgpOworfQorCitib29sIFdlYklEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OmF1dG9JbmNyZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmF1dG9JbmNyZW1lbnQ7Cit9CisKK1dlYlZlY3RvcjxXZWJJREJJbmRleE1ldGFkYXRhPiBX
ZWJJREJPYmplY3RTdG9yZU1ldGFkYXRhOjppbmRleGVzKCkgY29uc3QKK3sKKyAgICBzaXplX3Qg
Y291bnQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcHJpdmF0ZS0+aW5kZXhlcy5zaXplKCkpOwor
ICAgIFdlYlZlY3RvcjxXZWJJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzKGNvdW50KTsKKyAgICBz
aXplX3QgaSA9IDA7CisgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9w
cml2YXRlLT5pbmRleGVzLmVuZCgpOyArK2l0KQorICAgICAgICBpbmRleGVzW2krK10gPSBpdC0+
c2Vjb25kOworICAgIHJldHVybiBpbmRleGVzOworfQorCitXZWJJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpXZWJJREJPYmplY3RTdG9yZU1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIDogbV9wcml2YXRlKG5ldyBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhKG1ldGFkYXRhKSkKK3sKK30KKworV2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
V2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6b3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YShtZXRhZGF0YSkpOworICAgIHJldHVybiAqdGhpczsKK30K
KworV2ViSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6b3BlcmF0b3IgY29uc3QgV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYoKSBjb25zdAoreworICAgIHJldHVybiAqKG1fcHJpdmF0ZS5n
ZXQoKSk7Cit9CisKK1dlYklEQkluZGV4TWV0YWRhdGEgV2ViSURCSW5kZXhNZXRhZGF0YTo6Y3Jl
YXRlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYga2V5UGF0aCwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKK3sKKyAgICByZXR1cm4gSURCSW5kZXhNZXRh
ZGF0YShuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOworfQorCitXZWJJREJJbmRl
eE1ldGFkYXRhOjpXZWJJREJJbmRleE1ldGFkYXRhKCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgSURC
SW5kZXhNZXRhZGF0YSgpKQoreworfQorCitXZWJJREJJbmRleE1ldGFkYXRhOjpXZWJJREJJbmRl
eE1ldGFkYXRhKGNvbnN0IFdlYklEQkluZGV4TWV0YWRhdGEmIG90aGVyKQorICAgIDogbV9wcml2
YXRlKG5ldyBJREJJbmRleE1ldGFkYXRhKG90aGVyKSkKK3sKK30KKworV2ViSURCSW5kZXhNZXRh
ZGF0YTo6fldlYklEQkluZGV4TWV0YWRhdGEoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsK
K30KKworV2ViU3RyaW5nIFdlYklEQkluZGV4TWV0YWRhdGE6Om5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPm5hbWU7Cit9CisKK1dlYklEQktleVBhdGggV2ViSURCSW5kZXhN
ZXRhZGF0YTo6a2V5UGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYklEQktleVBhdGgobV9w
cml2YXRlLT5rZXlQYXRoKTsKK30KKworYm9vbCBXZWJJREJJbmRleE1ldGFkYXRhOjp1bmlxdWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnVuaXF1ZTsKK30KKworYm9vbCBXZWJJ
REJJbmRleE1ldGFkYXRhOjptdWx0aUVudHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tdWx0aUVudHJ5OworfQorCisKK1dlYklEQkluZGV4TWV0YWRhdGE6OldlYklEQkluZGV4
TWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAg
OiBtX3ByaXZhdGUobmV3IElEQkluZGV4TWV0YWRhdGEobWV0YWRhdGEpKQoreworfQorCitXZWJJ
REJJbmRleE1ldGFkYXRhJiBXZWJJREJJbmRleE1ldGFkYXRhOjpvcGVyYXRvcj0oY29uc3QgV2Vi
Q29yZTo6SURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgbV9wcml2YXRlLnJlc2V0
KG5ldyBJREJJbmRleE1ldGFkYXRhKG1ldGFkYXRhKSk7CisgICAgcmV0dXJuICp0aGlzOworfQor
CitXZWJJREJJbmRleE1ldGFkYXRhOjpvcGVyYXRvciBjb25zdCBXZWJDb3JlOjpJREJJbmRleE1l
dGFkYXRhJigpIGNvbnN0Cit7CisgICAgcmV0dXJuICoobV9wcml2YXRlLmdldCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147103</attachid>
            <date>2012-06-12 09:55:21 -0700</date>
            <delta_ts>2012-06-15 11:46:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88678-20120612095520.patch</filename>
            <type>text/plain</type>
            <size>6862</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGYwMjFhMWVlNzg5NWU1MzllY2I4NjNlOTA1Y2EwMWZjMWQ1YzUxZjEuLjhiZDczYjRkZmU2MWVm
MWVhODJlODlkZDFkZjE3NjI5NjFhODc2ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTItMDYtMTIgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEFkZCBuZXcgdHlwZSAoYW5kIGNocm9taXVtIHdl
YmtpdCBBUEkpIGZvciBtZXRhZGF0YSBzbmFwc2hvdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg2NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dl
YklEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlOjptZXRhZGF0
YSk6CisgICAgICAgICogcHVibGljL1dlYklEQktleVBhdGguaDogQWRkIG9wZXJhdG9yPSAoZm9y
IHRyZWF0aW5nIGxpa2UgUE9EKQorICAgICAgICAoV2ViSURCS2V5UGF0aCk6CisgICAgICAgICog
cHVibGljL1dlYklEQk1ldGFkYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViSURCTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAgICAgICAoT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJNZXRhZGF0YTo6T2JqZWN0U3RvcmU6Ok9iamVjdFN0
b3JlKToKKyAgICAgICAgKEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6
OkluZGV4OjpJbmRleCk6CisgICAgICAgICogc3JjL1dlYklEQktleVBhdGguY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJLZXlQYXRoOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0KToK
KwogMjAxMi0wNi0wOSAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzLmJ1Z0BnbWFpbC5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIG1lc3NhZ2UgbG9vcCBpbnN0cnVtZW50YXRp
b24gdG8gcHVibGljIEFQSSBhbmQgdGltZWxpbmUgYWdlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCA5OTIwNGI4ODZhYjdlYzFjZjRkMjRhNTkzY2NkY2QwMjdkNTQ5OTAxLi4xMzE5
ZGQyNmExMDc2OTRlODFkNzcyOTQ4OTI5YzAxNzAzMTkzODhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC0xODEsNiArMTgxLDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklEQktleS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklEQktleVBhdGguaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJLZXlSYW5nZS5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklEQk1ldGFkYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
SURCT2JqZWN0U3RvcmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJUcmFuc2Fj
dGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURC
RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNl
LmgKaW5kZXggYjM5ODUzNDE2NTU0M2ExOTdhNjE3OTdkNTQ3NDlkYTg1ZTNhMzU2ZS4uYTAwMWMy
ZTkyMjE4ZTgzM2VmNzM5ZWIyZGM3OTMwZDRmY2VhOGRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJXZWJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIldlYklEQk1ldGFkYXRhLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29t
bW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDQsNiArNDUsMTEgQEAgY2xhc3MgV2Vi
SURCRGF0YWJhc2UgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYklEQkRhdGFiYXNlKCkgeyB9
CiAKKyAgICB2aXJ0dWFsIFdlYklEQk1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdlYklE
Qk1ldGFkYXRhKCk7CisgICAgfQogICAgIHZpcnR1YWwgV2ViU3RyaW5nIG5hbWUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCS2V5UGF0aC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCS2V5UGF0aC5oCmluZGV4IGJlYjFmYTIyZDhkMDkx
YzIwZWQxZTU1Y2MyYjMwNzcxMGI5ZGRmNjQuLjYxMjUzNDQ1YmQwMzU3NmIwZTUxMDI2MzUwNjU1
NDJlMzAzNGViMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJL
ZXlQYXRoLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgc3Rh
dGljIFdlYklEQktleVBhdGggY3JlYXRlTnVsbCgpOwogICAgIFdFQktJVF9FWFBPUlQgV2ViSURC
S2V5UGF0aChjb25zdCBXZWJJREJLZXlQYXRoJik7CiAgICAgV0VCS0lUX0VYUE9SVCB+V2ViSURC
S2V5UGF0aCgpOworICAgIFdFQktJVF9FWFBPUlQgV2ViSURCS2V5UGF0aCYgb3BlcmF0b3I9KGNv
bnN0IFdlYklEQktleVBhdGgmKTsKIAogICAgIGVudW0gVHlwZSB7CiAgICAgICAgIE51bGxUeXBl
ID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk1l
dGFkYXRhLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJNZXRhZGF0YS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc1ZjlmNDg2NDI4NWNkZmY0NzgwYzE3NmU4YjZkZmRhN2Y5ZDNlOGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJNZXRh
ZGF0YS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYklEQk1ldGFkYXRhX2gK
KyNkZWZpbmUgV2ViSURCTWV0YWRhdGFfaAorCisjaW5jbHVkZSAiV2ViSURCS2V5UGF0aC5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBy
aXZhdGVPd25QdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IElE
QkRhdGFiYXNlTWV0YWRhdGE7CitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKK3N0cnVjdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdl
YklEQk1ldGFkYXRhIHsKKyAgICBzdHJ1Y3QgSW5kZXg7CisgICAgc3RydWN0IE9iamVjdFN0b3Jl
OworCisgICAgV2ViU3RyaW5nIG5hbWU7CisgICAgV2ViU3RyaW5nIHZlcnNpb247CisgICAgV2Vi
VmVjdG9yPE9iamVjdFN0b3JlPiBvYmplY3RTdG9yZXM7CisgICAgV2ViSURCTWV0YWRhdGEoKQor
ICAgICAgICA6IG5hbWUoV2ViU3RyaW5nKCkpCisgICAgICAgICwgdmVyc2lvbihXZWJTdHJpbmco
KSkgeyB9CisKKyAgICBzdHJ1Y3QgT2JqZWN0U3RvcmUgeworICAgICAgICBXZWJTdHJpbmcgbmFt
ZTsKKyAgICAgICAgV2ViSURCS2V5UGF0aCBrZXlQYXRoOworICAgICAgICBib29sIGF1dG9JbmNy
ZW1lbnQ7CisgICAgICAgIFdlYlZlY3RvcjxJbmRleD4gaW5kZXhlczsKKyAgICAgICAgT2JqZWN0
U3RvcmUoKQorICAgICAgICAgICAgOiBuYW1lKFdlYlN0cmluZygpKQorICAgICAgICAgICAgLCBr
ZXlQYXRoKFdlYklEQktleVBhdGg6OmNyZWF0ZU51bGwoKSkKKyAgICAgICAgICAgICwgYXV0b0lu
Y3JlbWVudChmYWxzZSkgeyB9CisgICAgfTsKKworICAgIHN0cnVjdCBJbmRleCB7CisgICAgICAg
IFdlYlN0cmluZyBuYW1lOworICAgICAgICBXZWJJREJLZXlQYXRoIGtleVBhdGg7CisgICAgICAg
IGJvb2wgdW5pcXVlOworICAgICAgICBib29sIG11bHRpRW50cnk7CisgICAgICAgIEluZGV4KCkK
KyAgICAgICAgICAgIDogbmFtZShXZWJTdHJpbmcoKSkKKyAgICAgICAgICAgICwga2V5UGF0aChX
ZWJJREJLZXlQYXRoOjpjcmVhdGVOdWxsKCkpCisgICAgICAgICAgICAsIHVuaXF1ZShmYWxzZSkK
KyAgICAgICAgICAgICwgbXVsdGlFbnRyeShmYWxzZSkgeyB9CisgICAgfTsKK307CisKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJJREJNZXRhZGF0YV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJLZXlQYXRoLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQktleVBhdGguY3BwCmluZGV4IDE3YzE1OGYzNGU0
ODhkOTBlMzE3M2NkYzM4NDYxZDFhZjJhM2I3OTcuLjZlY2YxZGQwNWM1Zjg1NzNkOTQzNmY5NTJj
OGFlNmNmZDU4MzQwMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQktl
eVBhdGguY3BwCkBAIC02MCw2ICs2MCwxMyBAQCBXZWJJREJLZXlQYXRoIFdlYklEQktleVBhdGg6
OmNyZWF0ZU51bGwoKQogICAgIHJldHVybiBXZWJJREJLZXlQYXRoKElEQktleVBhdGgoKSk7CiB9
CiAKK1dlYklEQktleVBhdGgmIFdlYklEQktleVBhdGg6Om9wZXJhdG9yPShjb25zdCBXZWJJREJL
ZXlQYXRoJiBvdGhlcikKK3sKKyAgICBBU1NFUlQob3RoZXIubV9wcml2YXRlLmdldCgpKTsKKyAg
ICBtX3ByaXZhdGUucmVzZXQobmV3IElEQktleVBhdGgob3RoZXIpKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKIGJvb2wgV2ViSURCS2V5UGF0aDo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fcHJpdmF0ZS5nZXQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147866</attachid>
            <date>2012-06-15 11:46:55 -0700</date>
            <delta_ts>2012-06-19 14:19:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88678-20120615114655.patch</filename>
            <type>text/plain</type>
            <size>8027</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDg2MDZjNGZmMDg4YjdmOTFjM2QwNzQyNzgwZjE3MDFlODNjNjM4ZmMuLjM2M2QwN2I4Nzc5ZDJi
YmE5NDU1NDIyYmQ1NTgzYmVkZTY1Yzc1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTItMDYtMTUgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEFkZCBuZXcgdHlwZSAoYW5kIGNocm9taXVtIHdl
YmtpdCBBUEkpIGZvciBtZXRhZGF0YSBzbmFwc2hvdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg2NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dl
YklEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlOjptZXRhZGF0
YSk6CisgICAgICAgICogcHVibGljL1dlYklEQktleVBhdGguaDoKKyAgICAgICAgKFdlYklEQktl
eVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJLZXlQYXRoOjpXZWJJREJLZXlQYXRoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSURCS2V5UGF0aDo6fldlYklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJLZXlQYXRoOjpvcGVyYXRvcj0pOiBVc2VkIGJ5IENocm9taXVtIGJh
Y2tlbmQuCisgICAgICAgICogcHVibGljL1dlYklEQk1ldGFkYXRhLmg6IEFkZGVkIG5ldyB0eXBl
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYklEQk1ldGFkYXRhKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAgKE9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6Ok9iamVjdFN0b3JlOjpP
YmplY3RTdG9yZSk6CisgICAgICAgIChJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk1l
dGFkYXRhOjpJbmRleDo6SW5kZXgpOgorICAgICAgICAqIHNyYy9XZWJJREJLZXlQYXRoLmNwcDog
Q29uZm9ybSB0byBub3JtYWwgV2ViWFhYIHBhdGVybi4KKyAgICAgICAgKFdlYktpdDo6V2ViSURC
S2V5UGF0aDo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YklEQktleVBhdGg6OnJlc2V0KToKKwogMjAxMi0wNi0xNSAgSGlyb25vcmkgQm9ubyAgPGhib25v
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBbGxvdyBwbGF0Zm9ybXMgdG8gY2hvb3NlIHdoZXRo
ZXIgdG8gcmVtb3ZlIG1hcmtlcnMgb24gZWRpdGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IDI3NmM1YTQ1ZWZhZTAwOGIyMWY3NGRiNDFhMzRkZjQwMzY2ODc3ZjcuLjU2MTg2MTNh
YWI1Y2MyNzJiZTYwZDRmZGEzMzVkODg0MjE0YjBjOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTE4MSw2ICsxODEsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSURC
S2V5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSURCS2V5UGF0aC5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYklEQktleVJhbmdlLmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViSURCTWV0YWRhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklEQlRyYW5zYWN0aW9u
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3Mu
aCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRh
YmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaApp
bmRleCBiMzk4NTM0MTY1NTQzYTE5N2E2MTc5N2Q1NDc0OWRhODVlM2EzNTZlLi5hMDAxYzJlOTIy
MThlODMzZWY3MzllYjJkYzc5MzBkNGZjZWE4ZGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIldlYkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJXZWJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiV2ViSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24u
aCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2ICs0NSwxMSBAQCBjbGFzcyBXZWJJREJE
YXRhYmFzZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViSURCRGF0YWJhc2UoKSB7IH0KIAor
ICAgIHZpcnR1YWwgV2ViSURCTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViSURCTWV0
YWRhdGEoKTsKKyAgICB9CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgbmFtZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJLZXlQYXRoLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJLZXlQYXRoLmgKaW5kZXggYmViMWZhMjJkOGQwOTFjMjBl
ZDFlNTVjYzJiMzA3NzEwYjlkZGY2NC4uOWJjODFlYzY1MzgyNTRkY2E0YjlhNGJkYjA0NDFjYjNk
MmJmZjUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURC
S2V5UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQktleVBh
dGguaApAQCAtMzEsMTEgKzMxLDYgQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIK
ICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKIAotbmFtZXNwYWNlIFdURiB7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNzIFZlY3RvcjsKLWNs
YXNzIFN0cmluZzsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBJREJLZXlQYXRoOyB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDUsOCArNDAsMTcgQEAgcHVibGljOgogICAgIFdF
QktJVF9FWFBPUlQgc3RhdGljIFdlYklEQktleVBhdGggY3JlYXRlKGNvbnN0IFdlYlN0cmluZyYp
OwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYklEQktleVBhdGggY3JlYXRlKGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViSURCS2V5
UGF0aCBjcmVhdGVOdWxsKCk7Ci0gICAgV0VCS0lUX0VYUE9SVCBXZWJJREJLZXlQYXRoKGNvbnN0
IFdlYklEQktleVBhdGgmKTsKLSAgICBXRUJLSVRfRVhQT1JUIH5XZWJJREJLZXlQYXRoKCk7CisK
KyAgICBXZWJJREJLZXlQYXRoKGNvbnN0IFdlYklEQktleVBhdGgmIGtleVBhdGgpIHsgYXNzaWdu
KGtleVBhdGgpOyB9CisgICAgdmlydHVhbCB+V2ViSURCS2V5UGF0aCgpIHsgcmVzZXQoKTsgfQor
ICAgIFdlYklEQktleVBhdGgmIG9wZXJhdG9yPShjb25zdCBXZWJJREJLZXlQYXRoJiBrZXlQYXRo
KQorICAgIHsKKyAgICAgICAgYXNzaWduKGtleVBhdGgpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJJREJLZXlQYXRoJik7CiAKICAgICBlbnVtIFR5cGUg
ewogICAgICAgICBOdWxsVHlwZSA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJNZXRhZGF0YS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCTWV0YWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTBkOWZhY2Y4YTcxYTIzZGM2Mjk4OTJh
ZjNiYzM2ZTUxMWY0YTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCTWV0YWRhdGEuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJJREJNZXRhZGF0YV9oCisjZGVmaW5lIFdlYklEQk1ldGFkYXRhX2gKKworI2luY2x1ZGUg
IldlYklEQktleVBhdGguaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJJREJNZXRhZGF0YSB7CisgICAg
c3RydWN0IEluZGV4OworICAgIHN0cnVjdCBPYmplY3RTdG9yZTsKKworICAgIFdlYlN0cmluZyBu
YW1lOworICAgIFdlYlN0cmluZyB2ZXJzaW9uOworICAgIFdlYlZlY3RvcjxPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmVzOworICAgIFdlYklEQk1ldGFkYXRhKCkgeyB9CisKKyAgICBzdHJ1Y3QgT2Jq
ZWN0U3RvcmUgeworICAgICAgICBXZWJTdHJpbmcgbmFtZTsKKyAgICAgICAgV2ViSURCS2V5UGF0
aCBrZXlQYXRoOworICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQ7CisgICAgICAgIFdlYlZlY3Rv
cjxJbmRleD4gaW5kZXhlczsKKyAgICAgICAgT2JqZWN0U3RvcmUoKQorICAgICAgICAgICAgOiBr
ZXlQYXRoKFdlYklEQktleVBhdGg6OmNyZWF0ZU51bGwoKSkKKyAgICAgICAgICAgICwgYXV0b0lu
Y3JlbWVudChmYWxzZSkgeyB9CisgICAgfTsKKworICAgIHN0cnVjdCBJbmRleCB7CisgICAgICAg
IFdlYlN0cmluZyBuYW1lOworICAgICAgICBXZWJJREJLZXlQYXRoIGtleVBhdGg7CisgICAgICAg
IGJvb2wgdW5pcXVlOworICAgICAgICBib29sIG11bHRpRW50cnk7CisgICAgICAgIEluZGV4KCkK
KyAgICAgICAgICAgIDoga2V5UGF0aChXZWJJREJLZXlQYXRoOjpjcmVhdGVOdWxsKCkpCisgICAg
ICAgICAgICAsIHVuaXF1ZShmYWxzZSkKKyAgICAgICAgICAgICwgbXVsdGlFbnRyeShmYWxzZSkg
eyB9CisgICAgfTsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBX
ZWJJREJNZXRhZGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQktleVBh
dGguY3BwCmluZGV4IDE3YzE1OGYzNGU0ODhkOTBlMzE3M2NkYzM4NDYxZDFhZjJhM2I3OTcuLmIw
OTRlNzdiZGI5Mzg4ZTUzYmRhZjgzMzBlYjUzOGVlM2Q1MDQ4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQktleVBhdGguY3BwCkBAIC0zNywxMSArMzcsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYklEQktleVBh
dGg6On5XZWJJREJLZXlQYXRoKCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoMCk7Ci19Ci0KIFdl
YklEQktleVBhdGggV2ViSURCS2V5UGF0aDo6Y3JlYXRlKGNvbnN0IFdlYlN0cmluZyYga2V5UGF0
aCkKIHsKICAgICByZXR1cm4gV2ViSURCS2V5UGF0aChJREJLZXlQYXRoKGtleVBhdGgpKTsKQEAg
LTYwLDYgKzU1LDE3IEBAIFdlYklEQktleVBhdGggV2ViSURCS2V5UGF0aDo6Y3JlYXRlTnVsbCgp
CiAgICAgcmV0dXJuIFdlYklEQktleVBhdGgoSURCS2V5UGF0aCgpKTsKIH0KIAordm9pZCBXZWJJ
REJLZXlQYXRoOjphc3NpZ24oY29uc3QgV2ViSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBB
U1NFUlQoa2V5UGF0aC5tX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcg
SURCS2V5UGF0aChrZXlQYXRoKSk7Cit9CisKK3ZvaWQgV2ViSURCS2V5UGF0aDo6cmVzZXQoKQor
eworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKwogYm9vbCBXZWJJREJLZXlQYXRoOjppc1Zh
bGlkKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlLmdldCgpKTsKQEAgLTg3LDEyICs5
Myw2IEBAIFdlYlN0cmluZyBXZWJJREJLZXlQYXRoOjpzdHJpbmcoKSBjb25zdAogICAgIHJldHVy
biBtX3ByaXZhdGUtPnN0cmluZygpOwogfQogCi1XZWJJREJLZXlQYXRoOjpXZWJJREJLZXlQYXRo
KGNvbnN0IFdlYklEQktleVBhdGgmIGtleVBhdGgpCi0gICAgOiBtX3ByaXZhdGUobmV3IElEQktl
eVBhdGgoa2V5UGF0aCkpCi17Ci0gICAgQVNTRVJUKG1fcHJpdmF0ZS5nZXQoKSk7Ci19Ci0KIFdl
YklEQktleVBhdGg6OldlYklEQktleVBhdGgoY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYgdmFs
dWUpCiAgICAgOiBtX3ByaXZhdGUobmV3IElEQktleVBhdGgodmFsdWUpKQogewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>