<?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>170238</bug_id>
          
          <creation_ts>2017-03-29 04:32:17 -0700</creation_ts>
          <short_desc>[GCrypt] Add a Handle&lt;&gt; class to help with GCrypt object lifetime control</short_desc>
          <delta_ts>2017-03-29 11:45:11 -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>WebKit 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>133122</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>buildbot</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1292363</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 04:32:17 -0700</bug_when>
    <thetext>[GCrypt] Add a Handle&lt;&gt; class to help with GCrypt object lifetime control</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292364</commentid>
    <comment_count>1</comment_count>
      <attachid>305727</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 04:55:01 -0700</bug_when>
    <thetext>Created attachment 305727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292397</commentid>
    <comment_count>2</comment_count>
      <attachid>305727</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-29 08:35:13 -0700</bug_when>
    <thetext>Comment on attachment 305727
Patch

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

Nice!

&gt; Source/WebCore/PAL/ChangeLog:20
&gt; +        The address of the managed handle can be retrieved through the address-of
&gt; +        operator. An implicit conversion operator is also added. This allows
&gt; +        frictionless use of GCrypt::Handle&lt;&gt; objects with existing libgcrypt APIs.

It&apos;s also not how resources handles work in WebKit or the standard library. We add a .get() method to get a pointer to the underlying object. So does the standard library. Why not follow this convention?

&gt; Source/WebCore/PAL/ChangeLog:24
&gt; +        the managed handle. The raw handle value is also retrieveable through
&gt; +        the handle() method.

Do you really prefer .handle() to .get()?

&gt; Source/WebCore/PAL/ChangeLog:41
&gt; +        std::unique_ptr&lt;&gt; could be used, but it could also be mis-used. I find
&gt; +        a mini-class with an interface that&apos;s specific to libgcrypt API
&gt; +        interactions to be preferrable to a std::unique_ptr&lt;&gt; with a custom
&gt; +        deleter.

Yes, although I would have expected GCrypt::Handle to be implemented in terms of std::unique_ptr. Any particular reason you decided not to do that?

&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:31
&gt; +namespace GCrypt {

This is the top-level namespace? Surely it should be put under PAL as well? I know it&apos;s going to be annoying to type PAL::GCrypt everywhere we use it, but that&apos;s a generic problem of PAL and not something to be solved here.

&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:66
&gt; +    T release()

Why does it return a T and not a T*? I guess the handle is intended to be copied by value mostly?

&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:75
&gt; +    T handle() const { return m_handle; }

Same question here. I suppose it does make a lot of sense to call this .handle() instead of .get() if it&apos;s going to be returning a value and not a pointer.

&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:76
&gt; +    operator T() const { return m_handle; }

The implicit conversion makes me a little nervous, since it does not match our pattern for smart pointers, but I suppose this is really a different type of object, so I think it&apos;s OK. Certainly it would be more convenient to use.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:38
&gt; +#include &lt;PAL/pal/crypto/gcrypt/Handle.h&gt;

No, this isn&apos;t OK. We don&apos;t use absolute paths to include directories in WebKit. I&apos;d actually prefer if we did, but we&apos;re not going to change that today. You&apos;ll need to add PAL/pal/crypto/gcrypt to the include path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292486</commentid>
    <comment_count>3</comment_count>
      <attachid>305727</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 11:17:31 -0700</bug_when>
    <thetext>Comment on attachment 305727
Patch

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

&gt;&gt; Source/WebCore/PAL/ChangeLog:41
&gt;&gt; +        deleter.
&gt; 
&gt; Yes, although I would have expected GCrypt::Handle to be implemented in terms of std::unique_ptr. Any particular reason you decided not to do that?

I wanted to limit how the Handle class could be used. Handle e.g. doesn&apos;t allow moving the managed resource to other objects, but we&apos;ll see if that actually makes sense.

std::unique_ptr&lt;&gt; manages pointers, while with libgcrypt all is done through handles. There&apos;s difference in the two concepts, but the truth is that libgcrypt in most cases, if not all, sets up the handle type as a simple alias to a pointer type. E.g. gcry_mac_hd_t is an alias to struct gcry_mac_handle. But still, IMO using std::unique_ptr&lt;struct gcry_mac_handle&gt; borders on API misuse.

That said, looking at std::unique_ptr&lt;&gt; documentation, it might be possible to somehow use handles through it by specifying the `pointer` type on the Deleter object, which would then be an alias to the handle type. The other possibility is to take the handle type and then set up a Handle&lt;T&gt; type alias against std::unique_ptr&lt;std::remove_pointer&lt;T&gt;, Deleter&lt;T&gt;&gt;, making the assumption that all the handle types wrapped in Handle are originally type aliases to pointers.

I&apos;ll revisit this later.

&gt;&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:31
&gt;&gt; +namespace GCrypt {
&gt; 
&gt; This is the top-level namespace? Surely it should be put under PAL as well? I know it&apos;s going to be annoying to type PAL::GCrypt everywhere we use it, but that&apos;s a generic problem of PAL and not something to be solved here.

I forgot about it. I&apos;ll add it inside the PAL namespace.

&gt;&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:66
&gt;&gt; +    T release()
&gt; 
&gt; Why does it return a T and not a T*? I guess the handle is intended to be copied by value mostly?

Correct.

&gt;&gt; Source/WebCore/PAL/pal/crypto/gcrypt/Handle.h:76
&gt;&gt; +    operator T() const { return m_handle; }
&gt; 
&gt; The implicit conversion makes me a little nervous, since it does not match our pattern for smart pointers, but I suppose this is really a different type of object, so I think it&apos;s OK. Certainly it would be more convenient to use.

I&apos;ll revisit this as well. It is convenient, but also a bit out of the ordinary.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:38
&gt;&gt; +#include &lt;PAL/pal/crypto/gcrypt/Handle.h&gt;
&gt; 
&gt; No, this isn&apos;t OK. We don&apos;t use absolute paths to include directories in WebKit. I&apos;d actually prefer if we did, but we&apos;re not going to change that today. You&apos;ll need to add PAL/pal/crypto/gcrypt to the include path.

I failed to spot the standard PAL header inclusion policy in other files. I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292490</commentid>
    <comment_count>4</comment_count>
      <attachid>305762</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 11:28:58 -0700</bug_when>
    <thetext>Created attachment 305762
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292494</commentid>
    <comment_count>5</comment_count>
      <attachid>305762</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 11:45:01 -0700</bug_when>
    <thetext>Comment on attachment 305762
Patch for landing

Clearing flags on attachment: 305762

Committed r214550: &lt;http://trac.webkit.org/changeset/214550&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292495</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 11:45:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305727</attachid>
            <date>2017-03-29 04:55:01 -0700</date>
            <delta_ts>2017-03-29 11:28:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170238-20170329135459.patch</filename>
            <type>text/plain</type>
            <size>8971</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM0ZWI3ZGRmNzQwZWEz
OWE4OGUwODQ0ZjMzYjcyMjRhZmZiOTM2OS4uMGFjYmJkZGEwNTAxZWYzNmUwMTU3NmZkODZiMDAx
ZmVmNjYwMjkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTAzLTI5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBZGQg
YSBIYW5kbGU8PiBjbGFzcyB0byBoZWxwIHdpdGggR0NyeXB0IG9iamVjdCBsaWZldGltZSBjb250
cm9sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAy
MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUg
cGxhdGZvcm0tc3BlY2lmaWMgQ3J5cHRvQWxnb3JpdGhtSE1BQyBpbXBsZW1lbnRhdGlvbiBpcyBt
b2RpZmllZAorICAgICAgICB0byBzaG93Y2FzZSB0aGUgR0NyeXB0OjpIYW5kbGU8PiB1c2UuIEhh
bmRsZURlbGV0ZXI8Z2NyeV9tYWNfaGRfdD4KKyAgICAgICAgaXMgYWRkZWQgYWNjb3JkaW5nbHku
CisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5cHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU2lnbmF0dXJlKToKKwogMjAxNy0wMy0yOCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYlJUQ10gQWZ0
ZXIgcjIxNDQ0MSBhZGRJY2VDYW5kaWRhdGUgbm8gbG9uZ2VyIGFjY2VwdHMgYW4gUlRDSWNlQ2Fu
ZGlkYXRlSW5pdCBkaWN0aW9uYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCAxNmNkYmZmNDRkOWM4
MDYyN2VlMzAxNWU3OGIyZGRmOTY4MDJkNTA3Li5jM2Y4NzM1ZDExYzc0ZjUxYzVlMzZkYzFmZDFm
NGM4OTJjOTIzNGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxNy0w
My0yOSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dD
cnlwdF0gQWRkIGEgSGFuZGxlPD4gY2xhc3MgdG8gaGVscCB3aXRoIEdDcnlwdCBvYmplY3QgbGlm
ZXRpbWUgY29udHJvbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwMjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGEgR0NyeXB0LXNwZWNpZmljIEhhbmRsZTw+IHRlbXBsYXRlIGNsYXNzLCBpbnNp
ZGUgdGhlIEdDcnlwdCBuYW1lc3BhY2UuCisgICAgICAgIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBz
aG91bGQgYmUgdXNlZCBhcyAnc21hcnQgaGFuZGxlcycsIGNsZWFuaW5nIHVwIHVwb24KKyAgICAg
ICAgZGVzdHJ1Y3Rpb24gdGhlIEdDcnlwdCBvYmplY3QgdGhhdCdzIHJlcHJlc2VudGVkIGJ5IHRo
ZSBoYW5kbGUgdGhleSBtYW5hZ2UuCisKKyAgICAgICAgVGhpcyBtaW1pY3MgdGhlIHN0ZDo6dW5p
cXVlX3B0cjw+IGlkZWEsIGJ1dCBpcyBuYXJyb3dseSBmb2N1c2VkIHRvd2FyZHMKKyAgICAgICAg
aG93IHN1Y2ggaGFuZGxlcyBhcmUgdXNlZCBpbiB0aGUgbGliZ2NyeXB0IEFQSS4gQSBHQ3J5cHQ6
OkhhbmRsZTw+IG9iamVjdAorICAgICAgICBjYW4gYmUgY29uc3R1cmN0ZWQgZnJvbSBhbiBleGlz
dGluZyBoYW5kbGUgb3Igd2l0aCB0aGUgZGVmYXVsdCBudWxsIHZhbHVlLgorICAgICAgICBJdCBj
YW4gYmUgY2xlYXJlZCB1cG9uIHJlcXVlc3QgdmlhIGNsZWFyKCksIGFuZCB0aGUgbWFuYWdlZCBo
YW5kbGUgY2FuIGJlCisgICAgICAgIHJlbGVhc2VkIHZpYSByZWxlYXNlKCkuCisKKyAgICAgICAg
VGhlIGFkZHJlc3Mgb2YgdGhlIG1hbmFnZWQgaGFuZGxlIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3Vn
aCB0aGUgYWRkcmVzcy1vZgorICAgICAgICBvcGVyYXRvci4gQW4gaW1wbGljaXQgY29udmVyc2lv
biBvcGVyYXRvciBpcyBhbHNvIGFkZGVkLiBUaGlzIGFsbG93cworICAgICAgICBmcmljdGlvbmxl
c3MgdXNlIG9mIEdDcnlwdDo6SGFuZGxlPD4gb2JqZWN0cyB3aXRoIGV4aXN0aW5nIGxpYmdjcnlw
dCBBUElzLgorCisgICAgICAgIFRoZSBuZWdhdGlvbiBvcGVyYXRvciBpcyBpbXBsZW1lbnRlZCB0
byBzdXBwb3J0IHRlc3RpbmcgdGhlIG51bGxuZXNzIG9mCisgICAgICAgIHRoZSBtYW5hZ2VkIGhh
bmRsZS4gVGhlIHJhdyBoYW5kbGUgdmFsdWUgaXMgYWxzbyByZXRyaWV2ZWFibGUgdGhyb3VnaAor
ICAgICAgICB0aGUgaGFuZGxlKCkgbWV0aG9kLgorCisgICAgICAgIFRoZSBjb3B5IGFuZCBtb3Zl
IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMgYXJlIGRlbGV0ZWQuCisgICAg
ICAgIFRoZXkgYXJlIG5vdCBhdCB0aGUgbW9tZW50IHJlcXVpcmVkIGFueXdoZXJlIGluIHRoZSB3
b3JrLWluLXByb2dyZXNzCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHN1YnRsZSBjcnlwdG8g
ZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBBcyB3aXRoIG90aGVyIHJlc291cmNlIG1hbmFnZW1l
bnQgY2xhc3NlcywgdXBvbiBkZXN0cnVjdGlvbiwgdGhlCisgICAgICAgIEdDcnlwdDo6SGFuZGxl
PD4gb2JqZWN0IGRlc3Ryb3lzIHRoZSByZXNvdXJjZSBpdCBtYW5hZ2VzLiBUaGlzIGlzIGRvbmUK
KyAgICAgICAgdGhyb3VnaCBvYmplY3RzIG9mIHRoZSBIYW5kbGVEZWxldGVyPD4gdGVtcGxhdGUg
Y2xhc3MuIFNwZWNpYWxpemF0aW9ucworICAgICAgICBvZiB0aGlzIGNsYXNzIGhhdmUgdG8gaW1w
bGVtZW50IHRoZSBjYWxsIG9wZXJhdG9yIHRoYXQgcHJvcGVybHkKKyAgICAgICAgcmVsZWFzZXMg
dGhlIHJlc291cmNlLiBCZWNhdXNlIHRoZSBvcGVyYXRvciBpcyBkZWxldGVkIGJ5IGRlZmF1bHQs
CisgICAgICAgIGEgY29tcGlsYXRpb24gZXJyb3Igd2lsbCBiZSB0aHJvd24gd2hlbiBkZWxldGlu
ZyBhIHJlc291cmNlIG9mIHNvbWUKKyAgICAgICAgdHlwZSBmb3Igd2hpY2ggdGhlIHByb3BlciBI
YW5kbGVEZWxldGVyIHNwZWNpYWxpemF0aW9uIGlzbid0IHByb3ZpZGVkLgorCisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjw+IGNvdWxkIGJlIHVzZWQsIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIG1pcy11
c2VkLiBJIGZpbmQKKyAgICAgICAgYSBtaW5pLWNsYXNzIHdpdGggYW4gaW50ZXJmYWNlIHRoYXQn
cyBzcGVjaWZpYyB0byBsaWJnY3J5cHQgQVBJCisgICAgICAgIGludGVyYWN0aW9ucyB0byBiZSBw
cmVmZXJyYWJsZSB0byBhIHN0ZDo6dW5pcXVlX3B0cjw+IHdpdGggYSBjdXN0b20KKyAgICAgICAg
ZGVsZXRlci4KKworICAgICAgICAqIHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oOiBBZGRlZC4K
KyAgICAgICAgKEdDcnlwdDo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoR0NyeXB0OjpIYW5k
bGU6On5IYW5kbGUpOgorICAgICAgICAoR0NyeXB0OjpIYW5kbGU6OmNsZWFyKToKKyAgICAgICAg
KEdDcnlwdDo6SGFuZGxlOjpyZWxlYXNlKToKKyAgICAgICAgKEdDcnlwdDo6SGFuZGxlOjpvcGVy
YXRvciYpOgorICAgICAgICAoR0NyeXB0OjpIYW5kbGU6OmhhbmRsZSk6CisgICAgICAgIChHQ3J5
cHQ6OkhhbmRsZTo6b3BlcmF0b3IgVCk6CisgICAgICAgIChHQ3J5cHQ6OkhhbmRsZTo6b3BlcmF0
b3IhKToKKyAgICAgICAgKEdDcnlwdDo6SGFuZGxlRGVsZXRlcjxnY3J5X21hY19oZF90Pjo6b3Bl
cmF0b3IoKSk6CisKIDIwMTctMDMtMTcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgVXNlIFVTRV9JTlRFUk5BTF9TREsgdG8gY29tcHV0ZSBFTkFCTEVfRkFT
VF9KSVRfUEVSTUlTU0lPTlMgaW5zdGVhZCBvZiBIQVZFX0lOVEVSTkFMX1NESwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwOTRi
OGNiMGJkYTM5Y2JhMzcwNGNlMWM2NzA3ODAzNWRkNjY3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmgKQEAgLTAsMCArMSw5
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisKK25hbWVzcGFjZSBHQ3J5cHQgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IEhhbmRsZURlbGV0ZXIgeworcHVibGljOgorICAgIHZvaWQg
b3BlcmF0b3IoKShUIGhhbmRsZSkgPSBkZWxldGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgSGFuZGxlIHsKK3B1YmxpYzoKKyAgICBIYW5kbGUoKSA9IGRlZmF1bHQ7CisKKyAg
ICBleHBsaWNpdCBIYW5kbGUoVCBoYW5kbGUpCisgICAgICAgIDogbV9oYW5kbGUoaGFuZGxlKQor
ICAgIHsgfQorCisgICAgfkhhbmRsZSgpCisgICAgeworICAgICAgICBjbGVhcigpOworICAgIH0K
KworICAgIEhhbmRsZShjb25zdCBIYW5kbGUmKSA9IGRlbGV0ZTsKKyAgICBIYW5kbGUmIG9wZXJh
dG9yPShjb25zdCBIYW5kbGUmKSA9IGRlbGV0ZTsKKworICAgIEhhbmRsZShIYW5kbGUmJikgPSBk
ZWxldGU7CisgICAgSGFuZGxlJiBvcGVyYXRvcj0oSGFuZGxlJiYpID0gZGVsZXRlOworCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAobV9oYW5kbGUpCisgICAgICAgICAgICBI
YW5kbGVEZWxldGVyPFQ+KCkobV9oYW5kbGUpOworICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7
CisgICAgfQorCisgICAgVCByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIFQgaGFuZGxlID0gbV9o
YW5kbGU7CisgICAgICAgIG1faGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZTsKKyAgICB9CisKKyAgICBUKiBvcGVyYXRvciYoKSB7IHJldHVybiAmbV9oYW5kbGU7IH0KKwor
ICAgIFQgaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0KKyAgICBvcGVyYXRvciBU
KCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0KKworICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1faGFuZGxlOyB9CisKK3ByaXZhdGU6CisgICAgVCBtX2hhbmRsZSB7IG51
bGxwdHIgfTsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPGdjcnlfbWFj
X2hkX3Q+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoZ2NyeV9tYWNfaGRfdCBoYW5kbGUpCisgICAg
eworICAgICAgICBnY3J5X21hY19jbG9zZShoYW5kbGUpOworICAgIH0KK307CisKK30gLy8gbmFt
ZXNwYWNlIEdDcnlwdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1ITUFDR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtSE1BQ0dDcnlwdC5jcHAKaW5kZXggNzQ2ZTNiZWUwODVhNGVjZDky
NmUxNjNjOTA2ZDI1OGU2YzRhZjA3OC4uMjQyMDUyMzhjMTI3YjFkNzA5NTdhODZmYjE2MGM0MjUx
MWRjOTJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1ITUFDR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5cHQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSAiQ3J5cHRvS2V5SE1BQy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVk
ZSA8UEFML3BhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9n
cmFwaGljVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYwLDQyICs2MCwy
OCBAQCBzdGF0aWMgaW50IGdldEdDcnlwdERpZ2VzdEFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2hGdW5jdGlvbikKIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBjYWxjdWxhdGVTaWduYXR1cmUoaW50IGFsZ29yaXRobSwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXksIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewot
ICAgIHNpemVfdCBkaWdlc3RMZW5ndGggPSBnY3J5X21hY19nZXRfYWxnb19tYWNsZW4oYWxnb3Jp
dGhtKTsKICAgICBjb25zdCB2b2lkKiBrZXlEYXRhID0ga2V5LmRhdGEoKSA/IGtleS5kYXRhKCkg
OiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigiIik7CiAKLSAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmU7Ci0KLSAgICBnY3J5X21h
Y19oZF90IGhkOwotICAgIGdjcnlfZXJyb3JfdCBlcnI7Ci0KLSAgICBlcnIgPSBnY3J5X21hY19v
cGVuKCZoZCwgYWxnb3JpdGhtLCAwLCBudWxscHRyKTsKKyAgICBHQ3J5cHQ6OkhhbmRsZTxnY3J5
X21hY19oZF90PiBoZDsKKyAgICBnY3J5X2Vycm9yX3QgZXJyID0gZ2NyeV9tYWNfb3BlbigmaGQs
IGFsZ29yaXRobSwgMCwgbnVsbHB0cik7CiAgICAgaWYgKGVycikKLSAgICAgICAgZ290byBjbGVh
bnVwOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgZXJyID0gZ2NyeV9tYWNf
c2V0a2V5KGhkLCBrZXlEYXRhLCBrZXkuc2l6ZSgpKTsKICAgICBpZiAoZXJyKQotICAgICAgICBn
b3RvIGNsZWFudXA7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBlcnIgPSBn
Y3J5X21hY193cml0ZShoZCwgZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgaWYgKGVycikKLSAgICAg
ICAgZ290byBjbGVhbnVwOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc2ln
bmF0dXJlLnJlc2l6ZShkaWdlc3RMZW5ndGgpOworICAgIHNpemVfdCBkaWdlc3RMZW5ndGggPSBn
Y3J5X21hY19nZXRfYWxnb19tYWNsZW4oYWxnb3JpdGhtKTsKKyAgICBWZWN0b3I8dWludDhfdD4g
c2lnbmF0dXJlKGRpZ2VzdExlbmd0aCk7CiAgICAgZXJyID0gZ2NyeV9tYWNfcmVhZChoZCwgc2ln
bmF0dXJlLmRhdGEoKSwgJmRpZ2VzdExlbmd0aCk7CiAgICAgaWYgKGVycikKLSAgICAgICAgZ290
byBjbGVhbnVwOwotCi0gICAgc2lnbmF0dXJlLnJlc2l6ZShkaWdlc3RMZW5ndGgpOwotICAgIHJl
c3VsdCA9IHRydWU7Ci0KLWNsZWFudXA6Ci0gICAgaWYgKGhkKQotICAgICAgICBnY3J5X21hY19j
bG9zZShoZCk7Ci0KLSAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAorICAgIHNpZ25hdHVyZS5yZXNpemUoZGlnZXN0TGVuZ3RoKTsKICAgICByZXR1cm4gV1RG
TW92ZShzaWduYXR1cmUpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305762</attachid>
            <date>2017-03-29 11:28:58 -0700</date>
            <delta_ts>2017-03-29 11:28:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170238-20170329202857.patch</filename>
            <type>text/plain</type>
            <size>9060</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM0ZWI3ZGRmNzQwZWEz
OWE4OGUwODQ0ZjMzYjcyMjRhZmZiOTM2OS4uM2U1MGYwNmNiN2QwOTM3NmMyMmJhNmM0MmM5NzI0
MGJiZjNkZDBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTAzLTI5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBZGQg
YSBIYW5kbGU8PiBjbGFzcyB0byBoZWxwIHdpdGggR0NyeXB0IG9iamVjdCBsaWZldGltZSBjb250
cm9sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAy
MzgKKworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBU
aGUgcGxhdGZvcm0tc3BlY2lmaWMgQ3J5cHRvQWxnb3JpdGhtSE1BQyBpbXBsZW1lbnRhdGlvbiBp
cyBtb2RpZmllZAorICAgICAgICB0byBzaG93Y2FzZSB0aGUgR0NyeXB0OjpIYW5kbGU8PiB1c2Uu
IEhhbmRsZURlbGV0ZXI8Z2NyeV9tYWNfaGRfdD4KKyAgICAgICAgaXMgYWRkZWQgYWNjb3JkaW5n
bHkuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5cHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU2lnbmF0dXJlKToKKwogMjAxNy0wMy0y
OCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYlJUQ10g
QWZ0ZXIgcjIxNDQ0MSBhZGRJY2VDYW5kaWRhdGUgbm8gbG9uZ2VyIGFjY2VwdHMgYW4gUlRDSWNl
Q2FuZGlkYXRlSW5pdCBkaWN0aW9uYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCAxNmNkYmZmNDRk
OWM4MDYyN2VlMzAxNWU3OGIyZGRmOTY4MDJkNTA3Li45ZDlhNzcwMjM0ZjkwZjdlYzg2MTJiNTFm
YWViMDUwY2E1NjhhMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAx
Ny0wMy0yOSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dDcnlwdF0gQWRkIGEgSGFuZGxlPD4gY2xhc3MgdG8gaGVscCB3aXRoIEdDcnlwdCBvYmplY3Qg
bGlmZXRpbWUgY29udHJvbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcwMjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8u
CisKKyAgICAgICAgQWRkIGEgR0NyeXB0LXNwZWNpZmljIEhhbmRsZTw+IHRlbXBsYXRlIGNsYXNz
LCBpbnNpZGUgdGhlIEdDcnlwdCBuYW1lc3BhY2UuCisgICAgICAgIE9iamVjdHMgb2YgdGhpcyBj
bGFzcyBzaG91bGQgYmUgdXNlZCBhcyAnc21hcnQgaGFuZGxlcycsIGNsZWFuaW5nIHVwIHVwb24K
KyAgICAgICAgZGVzdHJ1Y3Rpb24gdGhlIEdDcnlwdCBvYmplY3QgdGhhdCdzIHJlcHJlc2VudGVk
IGJ5IHRoZSBoYW5kbGUgdGhleSBtYW5hZ2UuCisKKyAgICAgICAgVGhpcyBtaW1pY3MgdGhlIHN0
ZDo6dW5pcXVlX3B0cjw+IGlkZWEsIGJ1dCBpcyBuYXJyb3dseSBmb2N1c2VkIHRvd2FyZHMKKyAg
ICAgICAgaG93IHN1Y2ggaGFuZGxlcyBhcmUgdXNlZCBpbiB0aGUgbGliZ2NyeXB0IEFQSS4gQSBH
Q3J5cHQ6OkhhbmRsZTw+IG9iamVjdAorICAgICAgICBjYW4gYmUgY29uc3R1cmN0ZWQgZnJvbSBh
biBleGlzdGluZyBoYW5kbGUgb3Igd2l0aCB0aGUgZGVmYXVsdCBudWxsIHZhbHVlLgorICAgICAg
ICBJdCBjYW4gYmUgY2xlYXJlZCB1cG9uIHJlcXVlc3QgdmlhIGNsZWFyKCksIGFuZCB0aGUgbWFu
YWdlZCBoYW5kbGUgY2FuIGJlCisgICAgICAgIHJlbGVhc2VkIHZpYSByZWxlYXNlKCkuCisKKyAg
ICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIG1hbmFnZWQgaGFuZGxlIGNhbiBiZSByZXRyaWV2ZWQg
dGhyb3VnaCB0aGUgYWRkcmVzcy1vZgorICAgICAgICBvcGVyYXRvci4gQW4gaW1wbGljaXQgY29u
dmVyc2lvbiBvcGVyYXRvciBpcyBhbHNvIGFkZGVkLiBUaGlzIGFsbG93cworICAgICAgICBmcmlj
dGlvbmxlc3MgdXNlIG9mIEdDcnlwdDo6SGFuZGxlPD4gb2JqZWN0cyB3aXRoIGV4aXN0aW5nIGxp
YmdjcnlwdCBBUElzLgorCisgICAgICAgIFRoZSBuZWdhdGlvbiBvcGVyYXRvciBpcyBpbXBsZW1l
bnRlZCB0byBzdXBwb3J0IHRlc3RpbmcgdGhlIG51bGxuZXNzIG9mCisgICAgICAgIHRoZSBtYW5h
Z2VkIGhhbmRsZS4gVGhlIHJhdyBoYW5kbGUgdmFsdWUgaXMgYWxzbyByZXRyaWV2ZWFibGUgdGhy
b3VnaAorICAgICAgICB0aGUgaGFuZGxlKCkgbWV0aG9kLgorCisgICAgICAgIFRoZSBjb3B5IGFu
ZCBtb3ZlIGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMgYXJlIGRlbGV0ZWQu
CisgICAgICAgIFRoZXkgYXJlIG5vdCBhdCB0aGUgbW9tZW50IHJlcXVpcmVkIGFueXdoZXJlIGlu
IHRoZSB3b3JrLWluLXByb2dyZXNzCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHN1YnRsZSBj
cnlwdG8gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBBcyB3aXRoIG90aGVyIHJlc291cmNlIG1h
bmFnZW1lbnQgY2xhc3NlcywgdXBvbiBkZXN0cnVjdGlvbiwgdGhlCisgICAgICAgIEdDcnlwdDo6
SGFuZGxlPD4gb2JqZWN0IGRlc3Ryb3lzIHRoZSByZXNvdXJjZSBpdCBtYW5hZ2VzLiBUaGlzIGlz
IGRvbmUKKyAgICAgICAgdGhyb3VnaCBvYmplY3RzIG9mIHRoZSBIYW5kbGVEZWxldGVyPD4gdGVt
cGxhdGUgY2xhc3MuIFNwZWNpYWxpemF0aW9ucworICAgICAgICBvZiB0aGlzIGNsYXNzIGhhdmUg
dG8gaW1wbGVtZW50IHRoZSBjYWxsIG9wZXJhdG9yIHRoYXQgcHJvcGVybHkKKyAgICAgICAgcmVs
ZWFzZXMgdGhlIHJlc291cmNlLiBCZWNhdXNlIHRoZSBvcGVyYXRvciBpcyBkZWxldGVkIGJ5IGRl
ZmF1bHQsCisgICAgICAgIGEgY29tcGlsYXRpb24gZXJyb3Igd2lsbCBiZSB0aHJvd24gd2hlbiBk
ZWxldGluZyBhIHJlc291cmNlIG9mIHNvbWUKKyAgICAgICAgdHlwZSBmb3Igd2hpY2ggdGhlIHBy
b3BlciBIYW5kbGVEZWxldGVyIHNwZWNpYWxpemF0aW9uIGlzbid0IHByb3ZpZGVkLgorCisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjw+IGNvdWxkIGJlIHVzZWQsIGJ1dCBpdCBjb3VsZCBhbHNvIGJl
IG1pcy11c2VkLiBJIGZpbmQKKyAgICAgICAgYSBtaW5pLWNsYXNzIHdpdGggYW4gaW50ZXJmYWNl
IHRoYXQncyBzcGVjaWZpYyB0byBsaWJnY3J5cHQgQVBJCisgICAgICAgIGludGVyYWN0aW9ucyB0
byBiZSBwcmVmZXJyYWJsZSB0byBhIHN0ZDo6dW5pcXVlX3B0cjw+IHdpdGggYSBjdXN0b20KKyAg
ICAgICAgZGVsZXRlci4KKworICAgICAgICAqIHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFBBTDo6R0NyeXB0OjpIYW5kbGU6OkhhbmRsZSk6CisgICAgICAgIChQ
QUw6OkdDcnlwdDo6SGFuZGxlOjp+SGFuZGxlKToKKyAgICAgICAgKFBBTDo6R0NyeXB0OjpIYW5k
bGU6OmNsZWFyKToKKyAgICAgICAgKFBBTDo6R0NyeXB0OjpIYW5kbGU6OnJlbGVhc2UpOgorICAg
ICAgICAoUEFMOjpHQ3J5cHQ6OkhhbmRsZTo6b3BlcmF0b3ImKToKKyAgICAgICAgKFBBTDo6R0Ny
eXB0OjpIYW5kbGU6OmhhbmRsZSk6CisgICAgICAgIChQQUw6OkdDcnlwdDo6SGFuZGxlOjpvcGVy
YXRvciBUKToKKyAgICAgICAgKFBBTDo6R0NyeXB0OjpIYW5kbGU6Om9wZXJhdG9yISk6CisgICAg
ICAgIChQQUw6OkdDcnlwdDo6SGFuZGxlRGVsZXRlcjxnY3J5X21hY19oZF90Pjo6b3BlcmF0b3Io
KSk6CisKIDIwMTctMDMtMTcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAK
ICAgICAgICAgVXNlIFVTRV9JTlRFUk5BTF9TREsgdG8gY29tcHV0ZSBFTkFCTEVfRkFTVF9KSVRf
UEVSTUlTU0lPTlMgaW5zdGVhZCBvZiBIQVZFX0lOVEVSTkFMX1NESwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwNjFmMjhiNTUy
MTU3ODc4MTM1NWZiOTkxZGNkMjNhZjY4Y2Q4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmgKQEAgLTAsMCArMSw5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8Z2NyeXB0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIEdDcnlwdCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSGFuZGxlRGVsZXRlciB7CitwdWJsaWM6
CisgICAgdm9pZCBvcGVyYXRvcigpKFQgaGFuZGxlKSA9IGRlbGV0ZTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitjbGFzcyBIYW5kbGUgeworcHVibGljOgorICAgIEhhbmRsZSgpID0gZGVm
YXVsdDsKKworICAgIGV4cGxpY2l0IEhhbmRsZShUIGhhbmRsZSkKKyAgICAgICAgOiBtX2hhbmRs
ZShoYW5kbGUpCisgICAgeyB9CisKKyAgICB+SGFuZGxlKCkKKyAgICB7CisgICAgICAgIGNsZWFy
KCk7CisgICAgfQorCisgICAgSGFuZGxlKGNvbnN0IEhhbmRsZSYpID0gZGVsZXRlOworICAgIEhh
bmRsZSYgb3BlcmF0b3I9KGNvbnN0IEhhbmRsZSYpID0gZGVsZXRlOworCisgICAgSGFuZGxlKEhh
bmRsZSYmKSA9IGRlbGV0ZTsKKyAgICBIYW5kbGUmIG9wZXJhdG9yPShIYW5kbGUmJikgPSBkZWxl
dGU7CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2hhbmRsZSkKKyAg
ICAgICAgICAgIEhhbmRsZURlbGV0ZXI8VD4oKShtX2hhbmRsZSk7CisgICAgICAgIG1faGFuZGxl
ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBUIHJlbGVhc2UoKQorICAgIHsKKyAgICAgICAgVCBo
YW5kbGUgPSBtX2hhbmRsZTsKKyAgICAgICAgbV9oYW5kbGUgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4gaGFuZGxlOworICAgIH0KKworICAgIFQqIG9wZXJhdG9yJigpIHsgcmV0dXJuICZtX2hh
bmRsZTsgfQorCisgICAgVCBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZTsgfQorICAg
IG9wZXJhdG9yIFQoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZTsgfQorCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9oYW5kbGU7IH0KKworcHJpdmF0ZToKKyAgICBUIG1f
aGFuZGxlIHsgbnVsbHB0ciB9OworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0
ZXI8Z2NyeV9tYWNfaGRfdD4geworICAgIHZvaWQgb3BlcmF0b3IoKShnY3J5X21hY19oZF90IGhh
bmRsZSkKKyAgICB7CisgICAgICAgIGdjcnlfbWFjX2Nsb3NlKGhhbmRsZSk7CisgICAgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgR0NyeXB0Cit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtSE1BQ0dDcnlwdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5
cHQuY3BwCmluZGV4IDc0NmUzYmVlMDg1YTRlY2Q5MjZlMTYzYzkwNmQyNThlNmM0YWYwNzguLjIy
NDgwM2VlMzQ4NzA2YzhjNTFkOTJkYmMxNDVjOGVhMWNiZTQ5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtSE1BQ0dDcnlwdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1ITUFDR0NyeXB0
LmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotI2luY2x1ZGUgPGdjcnlwdC5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTYwLDQyICs2MCwyOCBAQCBzdGF0aWMgaW50IGdldEdDcnlwdERpZ2Vz
dEFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbikKIAogc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjYWxjdWxhdGVTaWduYXR1cmUoaW50
IGFsZ29yaXRobSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogewotICAgIHNpemVfdCBkaWdlc3RMZW5ndGggPSBnY3J5
X21hY19nZXRfYWxnb19tYWNsZW4oYWxnb3JpdGhtKTsKICAgICBjb25zdCB2b2lkKiBrZXlEYXRh
ID0ga2V5LmRhdGEoKSA/IGtleS5kYXRhKCkgOiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPigiIik7CiAKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90
PiBzaWduYXR1cmU7Ci0KLSAgICBnY3J5X21hY19oZF90IGhkOwotICAgIGdjcnlfZXJyb3JfdCBl
cnI7Ci0KLSAgICBlcnIgPSBnY3J5X21hY19vcGVuKCZoZCwgYWxnb3JpdGhtLCAwLCBudWxscHRy
KTsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbWFjX2hkX3Q+IGhkOworICAgIGdjcnlf
ZXJyb3JfdCBlcnIgPSBnY3J5X21hY19vcGVuKCZoZCwgYWxnb3JpdGhtLCAwLCBudWxscHRyKTsK
ICAgICBpZiAoZXJyKQotICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKICAgICBlcnIgPSBnY3J5X21hY19zZXRrZXkoaGQsIGtleURhdGEsIGtleS5z
aXplKCkpOwogICAgIGlmIChlcnIpCi0gICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGVyciA9IGdjcnlfbWFjX3dyaXRlKGhkLCBkYXRhLCBk
YXRhTGVuZ3RoKTsKICAgICBpZiAoZXJyKQotICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzaWduYXR1cmUucmVzaXplKGRpZ2VzdExlbmd0
aCk7CisgICAgc2l6ZV90IGRpZ2VzdExlbmd0aCA9IGdjcnlfbWFjX2dldF9hbGdvX21hY2xlbihh
bGdvcml0aG0pOworICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmUoZGlnZXN0TGVuZ3RoKTsK
ICAgICBlcnIgPSBnY3J5X21hY19yZWFkKGhkLCBzaWduYXR1cmUuZGF0YSgpLCAmZGlnZXN0TGVu
Z3RoKTsKICAgICBpZiAoZXJyKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgICBzaWduYXR1
cmUucmVzaXplKGRpZ2VzdExlbmd0aCk7Ci0gICAgcmVzdWx0ID0gdHJ1ZTsKLQotY2xlYW51cDoK
LSAgICBpZiAoaGQpCi0gICAgICAgIGdjcnlfbWFjX2Nsb3NlKGhkKTsKLQotICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCisgICAgc2lnbmF0dXJlLnJlc2l6
ZShkaWdlc3RMZW5ndGgpOwogICAgIHJldHVybiBXVEZNb3ZlKHNpZ25hdHVyZSk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>