<?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>170550</bug_id>
          
          <creation_ts>2017-04-06 08:55:15 -0700</creation_ts>
          <short_desc>[GCrypt] Implement AES_CBC support</short_desc>
          <delta_ts>2017-04-07 05:06:15 -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>elima</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1294895</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-06 08:55:15 -0700</bug_when>
    <thetext>[GCrypt] Implement AES_CBC support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294897</commentid>
    <comment_count>1</comment_count>
      <attachid>306392</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-06 08:59:32 -0700</bug_when>
    <thetext>Created attachment 306392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294898</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-06 09:00:56 -0700</bug_when>
    <thetext>Attachment 306392 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:153:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:181:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294902</commentid>
    <comment_count>3</comment_count>
      <attachid>306392</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-06 09:20:38 -0700</bug_when>
    <thetext>Comment on attachment 306392
Patch

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

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:69
&gt; +        size_t paddedSize = roundUpToMultipleOf(gcry_cipher_get_algo_blklen(*algorithm), size + 1);

What&apos;s the +1 for?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:71
&gt; +        size_t padding = paddedSize - size;

I think paddingValue would be a clearer name for this variable.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:72
&gt; +        ASSERT(padding &gt; 0);

I&apos;m confused by this assert. Does padding really have to be greater than zero? What happens if the message length is evenly divisible by block size? And, although unlikely, what if the size of the message is one less than the size of the block? You&apos;re sure this assert can never be triggered by web content?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:75
&gt; +        for (size_t i = size; i &lt; paddedSize; ++i)
&gt; +            plainText[i] = padding;

You prefer writing out this loop to just using memcpy()? I wonder if memcpy() might be more efficient.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:157
&gt; +        [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &amp;context]() mutable {

I should maybe have asked this before, but why does it have to be mutable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294904</commentid>
    <comment_count>4</comment_count>
      <attachid>306392</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-06 09:22:38 -0700</bug_when>
    <thetext>Comment on attachment 306392
Patch

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

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:145
&gt; +        for (size_t i = size - padding; i &lt; size; ++i) {
&gt; +            if (output[i] != padding)
&gt; +                return std::nullopt;
&gt; +        }

And this could be a memcmp().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294966</commentid>
    <comment_count>5</comment_count>
      <attachid>306392</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-04-06 11:25:59 -0700</bug_when>
    <thetext>Comment on attachment 306392
Patch

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

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:157
&gt;&gt; +        [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &amp;context]() mutable {
&gt; 
&gt; I should maybe have asked this before, but why does it have to be mutable?

Callbacks are moved later on. Therefore, it has to be mutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295220</commentid>
    <comment_count>6</comment_count>
      <attachid>306392</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-06 23:52:41 -0700</bug_when>
    <thetext>Comment on attachment 306392
Patch

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

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:69
&gt;&gt; +        size_t paddedSize = roundUpToMultipleOf(gcry_cipher_get_algo_blklen(*algorithm), size + 1);
&gt; 
&gt; What&apos;s the +1 for?

It rounds up the size value to the next multiple of the cipher&apos;s block length. I&apos;ll add a comment.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:71
&gt;&gt; +        size_t padding = paddedSize - size;
&gt; 
&gt; I think paddingValue would be a clearer name for this variable.

OK.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:72
&gt;&gt; +        ASSERT(padding &gt; 0);
&gt; 
&gt; I&apos;m confused by this assert. Does padding really have to be greater than zero? What happens if the message length is evenly divisible by block size? And, although unlikely, what if the size of the message is one less than the size of the block? You&apos;re sure this assert can never be triggered by web content?

If the message length is an exact multiple of the block size, it gets rounded to the next multiple in the roundUpToMultipleOf() call above because of the `size + 1` input.
If the message length is one less than the size of the block, then it gets rounded up to the size of the block, with the padding consisting of the single 0x01 byte.

Overall this assert doesn&apos;t do that much, assuming that the Vector&lt;&gt; object isn&apos;t somehow holding close to 2 ** 64 bytes of data or that gcry_cipher_get_algo_blklen() isn&apos;t returning an incorrect value.

The other important thing I missed here is that the padding value has to be small enough to fit into a byte.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:75
&gt;&gt; +            plainText[i] = padding;
&gt; 
&gt; You prefer writing out this loop to just using memcpy()? I wonder if memcpy() might be more efficient.

memset() would probably be better here.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:145
&gt;&gt; +        }
&gt; 
&gt; And this could be a memcmp().

For memcmp() you&apos;d have to construct a separate uint8_t array of `padding` length that&apos;s filled with `padding` values.

This better matches std::count():

  if (std::count(output.end() - padding, output.end(), padding) != padding)
      return std::nullopt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295226</commentid>
    <comment_count>7</comment_count>
      <attachid>306474</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-07 00:14:16 -0700</bug_when>
    <thetext>Created attachment 306474
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295227</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 00:16:51 -0700</bug_when>
    <thetext>Attachment 306474 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:156:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:184:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295235</commentid>
    <comment_count>9</comment_count>
      <attachid>306474</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-07 00:37:39 -0700</bug_when>
    <thetext>Comment on attachment 306474
Patch for landing

Clearing flags on attachment: 306474

Committed r215087: &lt;http://trac.webkit.org/changeset/215087&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295236</commentid>
    <comment_count>10</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-07 00:37:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295273</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-07 04:56:30 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #6)
&gt; The other important thing I missed here is that the padding value has to be
&gt; small enough to fit into a byte.

Yeah, I thought about complaining about your use of size_t for the padding value,  which seemed pretty silly, but decided not to since you got to it by adding two size_t values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295280</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-07 05:06:15 -0700</bug_when>
    <thetext>*** Bug 133344 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306392</attachid>
            <date>2017-04-06 08:59:32 -0700</date>
            <delta_ts>2017-04-07 00:14:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170550-20170406175930.patch</filename>
            <type>text/plain</type>
            <size>9678</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyNTg0MTc2Y2U3Y2Nm
ZmUzNmFhNGJkZWNjOTFhNGRiMDM4OTRiNS4uNDU2NDc3NDU5M2Y5ODYzM2M4YjBkNDdmZjFhZjZl
ODA2Mzc3NjNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTA0LTA2ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBJbXBs
ZW1lbnQgQUVTX0NCQyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRm
b3Jte0VuY3J5cHQsRGVjcnlwdH0KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgY29uZmlndXJh
dGlvbnMgdGhhdCB1c2UgbGliZ2NyeXB0LiBUaGlzIGlzIGRvbmUKKyAgICAgICAgYnkgbGV2ZXJh
Z2luZyB0aGUgZ2NyeV9jaXBoZXJfKiBBUElzIGZvciB0aGUgQUVTIGFsZ29yaXRobSB0aGF0J3MK
KyAgICAgICAgZGVkdWNlZCBhcHByb3ByaWF0ZWx5IGZyb20gdGhlIGtleSBzaXplIGFuZCB0aGUg
Q0JDIGNpcGhlciBtb2RlLgorICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBQS0NTIzcgcGFkZGlu
ZyBpcyBpbXBsZW1lbnRlZCBmb3IgZWFjaCBvcGVyYXRpb24sCisgICAgICAgIGFzIGRlbWFuZGVk
IGJ5IHRoZSBXZWIgQ3J5cHRvIHNwZWNpZmljYXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IC0tIGN1cnJlbnQgb25lcyBjb3ZlciB0aGlzIHN1ZmZpY2llbnRseSwgYnV0IGFyZSBub3QgeWV0
CisgICAgICAgIGVuYWJsZWQgZHVlIHRvIG1pc3NpbmcgcGxhdGZvcm0tc3BlY2lmaWMgU1VCVExF
X0NSWVBUTyBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2NyeXB0RW5j
cnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpnY3J5cHREZWNyeXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorCiAyMDE3
LTA0LTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFNldCBsYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wIG9uIGFsbCBhbmNlc3RvciBkb2N1
bWVudHMsIG5vdCBqdXN0IHRoZSB0b3AgZG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3Bw
CmluZGV4IGMxZDJkMjljYTViYTMyY2Q4YzVmNTQ4YzQyYTNjNTNmNWQ3N2QyZTIuLmJlYjA4NmYy
ODJmNGQ0MTFhYjlmMmQwMjY0MTU3YzM2Y2Y5ZDgxMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0
LmNwcApAQCAtMjgsMTkgKzI4LDE4MiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAK
KyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCIKKyNpbmNsdWRlICJD
cnlwdG9LZXlBRVMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CisjaW5jbHVkZSA8cGFsL2NyeXB0by9n
Y3J5cHQvVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYm
LCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgV29ya1F1ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0KQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgYXV0byBhbGdvcml0aG0gPSBQQUw6OkdDcnlwdDo6YWVzQWxnb3Jp
dGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlf
Y2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhl
cl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ0JDLCAwKTsKKyAg
ICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6
bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNp
emUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFM
OjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGl2KGhhbmRsZSwgaXYuZGF0YSgp
LCBpdi5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBQS0NTIzcKKyAgICAgICAgc2l6ZV90
IHNpemUgPSBwbGFpblRleHQuc2l6ZSgpOworICAgICAgICBzaXplX3QgcGFkZGVkU2l6ZSA9IHJv
dW5kVXBUb011bHRpcGxlT2YoZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKCphbGdvcml0aG0p
LCBzaXplICsgMSk7CisKKyAgICAgICAgc2l6ZV90IHBhZGRpbmcgPSBwYWRkZWRTaXplIC0gc2l6
ZTsKKyAgICAgICAgQVNTRVJUKHBhZGRpbmcgPiAwKTsKKyAgICAgICAgcGxhaW5UZXh0LnJlc2l6
ZShwYWRkZWRTaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHNpemU7IGkgPCBwYWRkZWRT
aXplOyArK2kpCisgICAgICAgICAgICBwbGFpblRleHRbaV0gPSBwYWRkaW5nOworICAgIH0KKwor
ICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZmluYWwoaGFuZGxlKTsKKyAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3Ip
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50
OF90PiBvdXRwdXQocGxhaW5UZXh0LnNpemUoKSk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9l
bmNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgcGxhaW5UZXh0LmRh
dGEoKSwgcGxhaW5UZXh0LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJS
T1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0cHV0OwogfQogCi12b2lk
IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVp
bnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGl2LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNpcGhlclRleHQp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6R0Ny
eXB0OjphZXNBbGdvcml0aG1Gb3JLZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFs
Z29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFBBTDo6R0NyeXB0
OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJyb3JfdCBlcnJv
ciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9E
RV9DQkMsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZXku
ZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikg
eworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYoaGFu
ZGxlLCBpdi5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9f
RVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2Zp
bmFsKGhhbmRsZSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAg
ICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGNpcGhlclRleHQuc2l6
ZSgpKTsKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0
YSgpLCBvdXRwdXQuc2l6ZSgpLCBjaXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5zaXplKCkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0Ny
eXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgeworICAgICAgICAvLyBQS0NTIzcKKyAgICAgICAgdWludDhfdCBwYWRkaW5nID0g
b3V0cHV0Lmxhc3QoKTsKKyAgICAgICAgaWYgKHBhZGRpbmcgPiBnY3J5X2NpcGhlcl9nZXRfYWxn
b19ibGtsZW4oKmFsZ29yaXRobSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgICAgIHNpemVfdCBzaXplID0gb3V0cHV0LnNpemUoKTsKKyAgICAgICAgaWYgKHBhZGRp
bmcgPiBzaXplKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBm
b3IgKHNpemVfdCBpID0gc2l6ZSAtIHBhZGRpbmc7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChvdXRwdXRbaV0gIT0gcGFkZGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnJlc2l6ZShzaXplIC0gcGFk
ZGluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG91dHB1dDsKK30KKwordm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rv
cjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0
aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAg
ICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJh
bWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4
dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAg
ICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0Nm
YlBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdEVuY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdU
Rk1vdmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBj
b250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisg
ICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor
fQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5
cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJh
Y2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7Cisg
ICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJh
bWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJU
ZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRd
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAg
ICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAg
ICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1Bh
cmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBp
ZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJl
bmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhy
ZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAg
ICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9u
RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBh
ZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAg
ICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUo
Km91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91
dHB1dCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
UGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306474</attachid>
            <date>2017-04-07 00:14:16 -0700</date>
            <delta_ts>2017-04-07 00:14:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170550-20170407091414.patch</filename>
            <type>text/plain</type>
            <size>10000</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTExZmU1NmY5YjA1ODQ3
NDVhY2E0NWIyZDBlNzMzZjRkNjAyYTMyZi4uMDE2MjE2NjM5MmY0MDI3NTdiNzRmZDBiN2RhOTZk
ZGFmYWIyZDM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTA0LTA2ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBJbXBs
ZW1lbnQgQUVTX0NCQyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIENhdGFu
emFyby4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBs
YXRmb3Jte0VuY3J5cHQsRGVjcnlwdH0KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgY29uZmln
dXJhdGlvbnMgdGhhdCB1c2UgbGliZ2NyeXB0LiBUaGlzIGlzIGRvbmUKKyAgICAgICAgYnkgbGV2
ZXJhZ2luZyB0aGUgZ2NyeV9jaXBoZXJfKiBBUElzIGZvciB0aGUgQUVTIGFsZ29yaXRobSB0aGF0
J3MKKyAgICAgICAgZGVkdWNlZCBhcHByb3ByaWF0ZWx5IGZyb20gdGhlIGtleSBzaXplIGFuZCB0
aGUgQ0JDIGNpcGhlciBtb2RlLgorICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBQS0NTIzcgcGFk
ZGluZyBpcyBpbXBsZW1lbnRlZCBmb3IgZWFjaCBvcGVyYXRpb24sCisgICAgICAgIGFzIGRlbWFu
ZGVkIGJ5IHRoZSBXZWIgQ3J5cHRvIHNwZWNpZmljYXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIC0tIGN1cnJlbnQgb25lcyBjb3ZlciB0aGlzIHN1ZmZpY2llbnRseSwgYnV0IGFyZSBub3Qg
eWV0CisgICAgICAgIGVuYWJsZWQgZHVlIHRvIG1pc3NpbmcgcGxhdGZvcm0tc3BlY2lmaWMgU1VC
VExFX0NSWVBUTyBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0Ny
eXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2NyeXB0
RW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpnY3J5cHREZWNyeXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorCiAy
MDE3LTA0LTA2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBb
RGVidWddIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSkgb24gaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvY29ycy9jb3JzLXByZWZsaWdodC1zdGF0dXMtd29y
a2VyLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCmluZGV4IGMxZDJkMjljYTViYTMyY2Q4
YzVmNTQ4YzQyYTNjNTNmNWQ3N2QyZTIuLjhjYjFkYzMxNzcwMWJlMGMwYWMxOWFhMzAzN2ZhYjYw
ZWI4OTZiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcApAQCAtMjgsMTkgKzI4LDE4NSBA
QAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0
aG1BZXNDYmNDZmJQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQv
SGFuZGxlLmg+CisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9y
bUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJl
ZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNl
cHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVp
bnQ4X3Q+JiYgcGxhaW5UZXh0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXV0byBh
bGdvcml0aG0gPSBQQUw6OkdDcnlwdDo6YWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgp
ICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAg
ICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdvcml0
aG0sIEdDUllfQ0lQSEVSX01PREVfQ0JDLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJf
c2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9
IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9y
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGdj
cnlfY2lwaGVyX3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXplKCkpOworICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJv
cihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgewor
ICAgICAgICAvLyBQS0NTIzcKKyAgICAgICAgc2l6ZV90IHNpemUgPSBwbGFpblRleHQuc2l6ZSgp
OworCisgICAgICAgIC8vIFJvdW5kIHVwIHRoZSBzaXplIHZhbHVlIHRvIHRoZSBuZXh0IG11bHRp
cGxlIG9mIHRoZSBjaXBoZXIncyBibG9jayBsZW5ndGggdG8gZ2V0IHRoZSBwYWRkZWQgc2l6ZS4K
KyAgICAgICAgc2l6ZV90IHBhZGRlZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGdjcnlfY2lw
aGVyX2dldF9hbGdvX2Jsa2xlbigqYWxnb3JpdGhtKSwgc2l6ZSArIDEpOworCisgICAgICAgIC8v
IFBhZGRlZCBzaXplIHNob3VsZCBiZSBiaWdnZXIgdGhhbiBzaXplLCBidXQgYmFpbCBpZiB0aGUg
dmFsdWUgZG9lc24ndCBmaXQgaW50byBhIGJ5dGUuCisgICAgICAgIEFTU0VSVChwYWRkZWRTaXpl
ID4gc2l6ZSk7CisgICAgICAgIGlmIChwYWRkZWRTaXplIC0gc2l6ZSA+IDI1NSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHVpbnQ4X3QgcGFkZGluZ1ZhbHVlID0g
cGFkZGVkU2l6ZSAtIHNpemU7CisKKyAgICAgICAgcGxhaW5UZXh0LnJlc2l6ZShwYWRkZWRTaXpl
KTsKKyAgICAgICAgc3RkOjptZW1zZXQocGxhaW5UZXh0LmRhdGEoKSArIHNpemUsIHBhZGRpbmdW
YWx1ZSwgcGFkZGluZ1ZhbHVlKTsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2Zp
bmFsKGhhbmRsZSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAg
ICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KHBsYWluVGV4dC5zaXpl
KCkpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIG91dHB1dC5kYXRh
KCksIG91dHB1dC5zaXplKCksIHBsYWluVGV4dC5kYXRhKCksIHBsYWluVGV4dC5zaXplKCkpOwor
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0
Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
CisgICAgcmV0dXJuIG91dHB1dDsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpw
bGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYm
LCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgYXV0byBhbGdvcml0aG0gPSBQQUw6OkdDcnlwdDo6YWVzQWxnb3JpdGhtRm9yS2V5U2l6
ZShrZXkuc2l6ZSgpICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+
IGhhbmRsZTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5k
bGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ0JDLCAwKTsKKyAgICBpZiAoZXJyb3Ig
IT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJy
b3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6Omxv
Z0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXplKCkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0Ny
eXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAgIGlmIChlcnJv
ciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihl
cnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG91dHB1dChjaXBoZXJUZXh0LnNpemUoKSk7CisgICAgZXJyb3IgPSBnY3J5X2Np
cGhlcl9kZWNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgY2lwaGVy
VGV4dC5kYXRhKCksIGNpcGhlclRleHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gUEtD
UyM3CisgICAgICAgIHVpbnQ4X3QgcGFkZGluZ1ZhbHVlID0gb3V0cHV0Lmxhc3QoKTsKKyAgICAg
ICAgaWYgKHBhZGRpbmdWYWx1ZSA+IGdjcnlfY2lwaGVyX2dldF9hbGdvX2Jsa2xlbigqYWxnb3Jp
dGhtKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgc2l6ZV90
IHNpemUgPSBvdXRwdXQuc2l6ZSgpOworICAgICAgICBpZiAocGFkZGluZ1ZhbHVlID4gc2l6ZSkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaWYgKHN0ZDo6Y291
bnQob3V0cHV0LmVuZCgpIC0gcGFkZGluZ1ZhbHVlLCBvdXRwdXQuZW5kKCksIHBhZGRpbmdWYWx1
ZSkgIT0gcGFkZGluZ1ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgICAgICBvdXRwdXQucmVzaXplKHNpemUgLSBwYWRkaW5nVmFsdWUpOworICAgIH0KKworICAg
IHJldHVybiBvdXRwdXQ7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZv
cm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBh
cmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRl
eHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0
aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYg
d29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNo
KAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1v
dmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRl
cnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJz
KTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5
LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tl
eS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKHBsYWluVGV4dCkpOwor
ICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAg
ICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5j
ZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVh
ZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtvdXRw
dXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30KKwordm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rv
cjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7Cisg
ICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFy
YW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVy
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAg
ICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0Ni
Y0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93
bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1
dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCks
IFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIg
YmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAg
ICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0
aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZv
cm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQmLCBj
b25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2Fs
bGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>