<?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>156523</bug_id>
          
          <creation_ts>2016-04-12 15:56:17 -0700</creation_ts>
          <short_desc>Modern IDB (Blob support): Support deleting stored blob files</short_desc>
          <delta_ts>2016-04-13 09:28:46 -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>WebCore Misc.</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>149117</blocked>
    
    <blocked>143193</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1183283</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-12 15:56:17 -0700</bug_when>
    <thetext>Modern IDB (Blob support): Support deleting stored blob files

This includes:
-When an individual record is deleted
-When an objectStore is deleted
-When a whole database is deleted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183299</commentid>
    <comment_count>1</comment_count>
      <attachid>276293</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-12 17:11:52 -0700</bug_when>
    <thetext>Created attachment 276293
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183322</commentid>
    <comment_count>2</comment_count>
      <attachid>276293</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-12 19:06:08 -0700</bug_when>
    <thetext>Comment on attachment 276293
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1305
&gt; +    for (auto&amp; file : removedBlobFilenames)
&gt; +        transaction.addRemovedBlobFile(file);

In addRemovedBlobFile, we assert that they are all unique.  That means that it was empty before this loop.  Can we just transfer the HashSet, or use a Vector somewhere to be more efficient?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1352
&gt; +    if (recordID &lt; -1) {

Would -1 also be an error?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1661
&gt; +    ThreadSafeDataBuffer resultBuffer;

Is this used?  Please remove.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1988
&gt; +            LOG_ERROR(&quot;Error getting all blob filenames to be deleted&quot;);

ASSERT_NOT_REACHED()?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1994
&gt; +        deleteFile(fullPath);

Why do we only delete the file when we delete the backing store?  What if we remove all references to the file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183335</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-12 21:34:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 276293 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276293&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1305
&gt; &gt; +    for (auto&amp; file : removedBlobFilenames)
&gt; &gt; +        transaction.addRemovedBlobFile(file);
&gt; 
&gt; In addRemovedBlobFile, we assert that they are all unique.  That means that
&gt; it was empty before this loop.  Can we just transfer the HashSet, or use a
&gt; Vector somewhere to be more efficient?

If we only ran through this loop once, we could transfer the collection over.

But deleteUnusedBlobFileRecords can be called multiple times per transaction.

The ASSERT is valid - there should never be a scenario where the same filename is removed more than once.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1352
&gt; &gt; +    if (recordID &lt; -1) {
&gt; 
&gt; Would -1 also be an error?

Yes. So would 0. It was meant to be &quot;recordID &lt; 1&quot;

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1661
&gt; &gt; +    ThreadSafeDataBuffer resultBuffer;
&gt; 
&gt; Is this used?  Please remove.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1988
&gt; &gt; +            LOG_ERROR(&quot;Error getting all blob filenames to be deleted&quot;);
&gt; 
&gt; ASSERT_NOT_REACHED()?

The error condition can occur due to file data on disk, and I&apos;m not willing to say it&apos;s appropriate to ASSERT based on it.

Sometimes, yes. For a reason I can&apos;t articulate, I don&apos;t think so this time.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1994
&gt; &gt; +        deleteFile(fullPath);
&gt; 
&gt; Why do we only delete the file when we delete the backing store?  What if we
&gt; remove all references to the file?

If we remove all references to the file, the file is added to the SQLiteIDBTransactions set of removed files.

Which then does the delete at commit time inside of SQLiteIDBTransaction::deleteBlobFilesIfNecessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183336</commentid>
    <comment_count>4</comment_count>
      <attachid>276303</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-12 21:35:35 -0700</bug_when>
    <thetext>Created attachment 276303
Patch v2 - Fix the recordID condition check and remove the unused variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183429</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-13 09:28:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/199499</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276293</attachid>
            <date>2016-04-12 17:11:52 -0700</date>
            <delta_ts>2016-04-12 21:35:35 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14716</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNjExZGM4Li4xYWMxN2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTYtMDQtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFN1cHBvcnQgZGVsZXRpbmcgc3RvcmVkIGJs
b2IgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTY1MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE5vIHRlc3RhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQsIGN1cnJl
bnQgdGVzdHMgcGFzcykuCisKKyAgICAgICAgVGhlcmUncyAzIHBvaW50cyBpbiB0aW1lIHdoZW4g
d2UgbmVlZCB0byBkZWxldGUgYmxvYiBmaWxlcyAoYW5kIHJlY29yZHMgb2YgdGhlbSk6CisgICAg
ICAgIDEgLSBXaGVuIGRlbGV0aW5nIGEgc3BlY2lmaWMgb2JqZWN0IHN0b3JlIHJlY29yZC4KKyAg
ICAgICAgMiAtIFdoZW4gZGVsZXRpbmcgYW4gZW50aXJlIG9iamVjdCBzdG9yZS4KKyAgICAgICAg
MyAtIFdoZW4gZGVsZXRpbmcgYSB3aG9sZSBkYXRhYmFzZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgcGF0Y2ggZG9lcyB0aG9zZSB0aHJlZSB0aGluZ3MuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlVW51c2VkQmxvYkZpbGVSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVC
YWNraW5nU3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6ZGVsZXRlQmxvYkZpbGVzSWZOZWNlc3NhcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6YWRkUmVtb3Zl
ZEJsb2JGaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
VHJhbnNhY3Rpb24uaDoKKwogMjAxNi0wNC0xMiAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBtZWRpYSB0aXRsZSBzb21ldGltZXMgcmVtYWlu
IGluIENvbnRyb2wgQ2VudGVyIGFmdGVyIHRhYiBpcyBjbG9zZWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJh
Y2tpbmdTdG9yZS5jcHAKaW5kZXggZTllMTZmMS4uODI5ZGNlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk0MSw5ICs5NDEsMjQgQEAgSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHQKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIERlbGV0ZSBhbGwgdW51c2VkIEJsb2Ig
VVJMIHJlY29yZHMuCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0
ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEJsb2JSZWNvcmRzIFdIRVJFIG9iamVjdFN0
b3JlUm93IE5PVCBJTiAoU0VMRUNUIHJlY29yZElEIEZST00gUmVjb3JkcykiKSk7CisgICAgICAg
IGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVs
ZXRlIEJsb2IgVVJMIHJlY29yZHMoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgZGVs
ZXRlIHN0b3JlZCBibG9iIHJlY29yZHMgZm9yIGRlbGV0ZWQgb2JqZWN0IHN0b3JlIikgfTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIERlbGV0ZSBhbGwgdW51c2VkIEJsb2IgRmlsZSByZWNv
cmRzLgorICAgIGF1dG8gZXJyb3IgPSBkZWxldGVVbnVzZWRCbG9iRmlsZVJlY29yZHMoKnRyYW5z
YWN0aW9uKTsKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZXJyb3I7
CisKICAgICBtX2RhdGFiYXNlSW5mby0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJRCkKQEAgLTEyNTEsNiArMTI2Niw0NyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaQogICAg
IHJldHVybiB7IH07CiB9CiAKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
VW51c2VkQmxvYkZpbGVSZWNvcmRzKFNRTGl0ZUlEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVVbnVz
ZWRCbG9iRmlsZVJlY29yZHMiKTsKKworICAgIC8vIEdhdGhlciB0aGUgc2V0IG9mIGJsb2IgVVJM
cyBhbmQgZmlsZW5hbWVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuCisgICAgSGFzaFNldDxT
dHJpbmc+IHJlbW92ZWRCbG9iRmlsZW5hbWVzOworICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBC
bG9iRmlsZXMgV0hFUkUgYmxvYlVSTCBOT1QgSU4gKFNFTEVDVCBibG9iVVJMIEZST00gQmxvYlJl
Y29yZHMpIikpOworCisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBkZWxldGluZyBzdG9yZWQgYmxvYnMgKCVpKSAo
Q291bGQgbm90IGdhdGhlciB1bnVzZWQgYmxvYlVSTHMpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJu
IHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJFcnJv
ciBkZWxldGluZyBzdG9yZWQgYmxvYnMiKSB9OworICAgICAgICB9CisKKyAgICAgICAgaW50IHJl
c3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
KyAgICAgICAgICAgIHJlbW92ZWRCbG9iRmlsZW5hbWVzLmFkZChzcWwuZ2V0Q29sdW1uVGV4dCgx
KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciBkZWxldGluZyBzdG9yZWQgYmxvYnMgKCVpKSAoQ291bGQgbm90IGdh
dGhlciB1bnVzZWQgYmxvYlVSTHMpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJFcnJvciBkZWxldGluZyBz
dG9yZWQgYmxvYnMiKSB9OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBi
bG9iIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4KKyAgICBpZiAoIXJlbW92ZWRC
bG9iRmlsZW5hbWVzLmlzRW1wdHkoKSkgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEJsb2JGaWxlcyBXSEVSRSBibG9i
VVJMIE5PVCBJTiAoU0VMRUNUIGJsb2JVUkwgRlJPTSBCbG9iUmVjb3JkcykiKSk7CisKKyAgICAg
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGRlbGV0
aW5nIHN0b3JlZCBibG9icyAoJWkpIChDb3VsZCBub3QgZGVsZXRlIGJsb2JGaWxlIHJlY29yZHMp
IC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNn
KCkpOworICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgQVNDSUlMaXRlcmFsKCJFcnJvciBkZWxldGluZyBzdG9yZWQgYmxvYnMiKSB9OworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBmaWxlIDogcmVtb3ZlZEJsb2JGaWxlbmFt
ZXMpCisgICAgICAgIHRyYW5zYWN0aW9uLmFkZFJlbW92ZWRCbG9iRmlsZShmaWxlKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
UmVjb3JkKFNRTGl0ZUlEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RT
dG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogewogICAgIExPRyhJbmRleGVkREIs
ICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCAtIGtleSAlcywgb2JqZWN0IHN0
b3JlICUiIFBSSXU2NCwga2V5RGF0YS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2Jq
ZWN0U3RvcmVJRCk7CkBAIC0xMjY3LDYgKzEzMjMsNTMgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpkZWxldGVSZWNvcmQoU1FMaXRlSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LAogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBB
U0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5RGF0YSB0byBiZSByZW1vdmVk
IGZyb20gdGhlIGRhdGFiYXNlIikgfTsKICAgICB9CiAKKyAgICAvLyBHZXQgdGhlIHJlY29yZCBJ
RAorICAgIGludDY0X3QgcmVjb3JkSUQ7CisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCByZWNvcmRJRCBGUk9NIFJlY29y
ZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA9IENBU1QoPyBBUyBURVhUKTsiKSk7
CisKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSUQpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3FsLmJpbmRCbG9iKDIsIGtleUJ1ZmZlci0+ZGF0YSgpLCBrZXlCdWZmZXItPnNpemUo
KSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxl
dGUgcmVjb3JkIGZyb20gb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiICglaSkgLSAlcyIsIG9iamVj
dFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBkZWxldGUgcmVjb3JkIGZyb20gb2JqZWN0
IHN0b3JlIikgfTsKKyAgICAgICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgp
OworCisgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVjb3JkIElELCB0aGVyZSdzIG5vIHJlY29y
ZCB0byBkZWxldGUuCisgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRlIHJlY29yZCBmcm9tIG9iamVj
dCBzdG9yZSAlIiBQUklpNjQgIiAoJWkpICh1bmFibGUgdG8gZmV0Y2ggcmVjb3JkIElEKSAtICVz
Iiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGRlbGV0ZSByZWNvcmQgZnJv
bSBvYmplY3Qgc3RvcmUiKSB9OworICAgICAgICB9CisKKyAgICAgICAgcmVjb3JkSUQgPSBzcWwu
Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgfQorCisgICAgaWYgKHJlY29yZElEIDwgLTEpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRlIHJlY29yZCBmcm9tIG9iamVjdCBzdG9y
ZSAlIiBQUklpNjQgIiAoJWkpIChyZWNvcmQgSUQgaXMgaW52YWxpZCkgLSAlcyIsIG9iamVjdFN0
b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGRlbGV0ZSByZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUi
KSB9OworICAgIH0KKworICAgIC8vIERlbGV0ZSB0aGUgYmxvYiByZWNvcmRzIGZvciB0aGlzIG9i
amVjdCBzdG9yZSByZWNvcmQuCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEJsb2JSZWNvcmRzIFdIRVJFIG9i
amVjdFN0b3JlUm93ID0gPzsiKSk7CisKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIHJlY29yZElEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSByZWNvcmQgZnJvbSBvYmplY3Qgc3Rv
cmUgJSIgUFJJaTY0ICIgKCVpKSAoQ291bGQgbm90IGRlbGV0ZSBCbG9iUmVjb3JkcyByZWNvcmRz
KSAtICVzIiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGRlbGV0ZSByZWNv
cmQgZnJvbSBvYmplY3Qgc3RvcmUiKSB9OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBl
cnJvciA9IGRlbGV0ZVVudXNlZEJsb2JGaWxlUmVjb3Jkcyh0cmFuc2FjdGlvbik7CisgICAgaWYg
KCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCiAgICAgLy8gRGVsZXRl
IHJlY29yZCBmcm9tIG9iamVjdCBzdG9yZQogICAgIHsKICAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPSBDQVNUKD8gQVMgVEVYVCk7IikpOwpAQCAtMTQ2
NCw2ICsxNTY3LDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAgIExPR19F
UlJPUigiSW5kZXhpbmcgbmV3IG9iamVjdCBzdG9yZSByZWNvcmQgZmFpbGVkLCBidXQgdW5hYmxl
IHRvIHJlbW92ZSB0aGUgb2JqZWN0IHN0b3JlIHJlY29yZCBpdHNlbGYiKTsKICAgICAgICAgICAg
IHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiSW5kZXhpbmcgbmV3IG9iamVjdCBzdG9yZSByZWNvcmQgZmFpbGVkLCBidXQgdW5hYmxlIHRv
IHJlbW92ZSB0aGUgb2JqZWN0IHN0b3JlIHJlY29yZCBpdHNlbGYiKSB9OwogICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGVycm9yOwogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBibG9iVVJMcyA9IHZhbHVlLmJsb2JVUkxzKCk7CkBAIC0xNTUzLDYgKzE2NTgsNyBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJpYWxpemUgdXBwZXIg
SURCS2V5IGluIGxvb2t1cCByYW5nZSIpIH07CiAgICAgfQogCisgICAgVGhyZWFkU2FmZURhdGFC
dWZmZXIgcmVzdWx0QnVmZmVyOwogICAgIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJPcGVuVXBwZXJPcGVuKCJTRUxFQ1QgdmFsdWUgRlJP
TSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVY
VCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Iik7CiAgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBU0NJSUxpdGVyYWw+IGxvd2VyT3BlblVwcGVyQ2xv
c2VkKCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFO
RCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIg
Qlkga2V5OyIpOwpAQCAtMTg2Miw2ICsxOTY4LDMyIEBAIHZvaWQgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkZWxldGVCYWNraW5nU3RvcmUoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlIGRlbGV0aW5nIGZpbGUgJyVzJyBvbiBk
aXNrIiwgZGJGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKIAorICAgIFZlY3RvcjxTdHJpbmc+IGJs
b2JGaWxlczsKKyAgICB7CisgICAgICAgIGJvb2wgZXJyb3JlZCA9IHRydWU7CisKKyAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgZmls
ZU5hbWUgRlJPTSBCbG9iRmlsZXM7IikpOworICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSA9PSBT
UUxJVEVfT0spIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAg
ICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgYmxv
YkZpbGVzLmFwcGVuZChzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKKyAgICAgICAgICAgICAgICBlcnJvcmVkID0gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZXJyb3JlZCkKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJy
b3IgZ2V0dGluZyBhbGwgYmxvYiBmaWxlbmFtZXMgdG8gYmUgZGVsZXRlZCIpOworICAgIH0KKwor
ICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeSA9IGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpOwor
ICAgIGZvciAoYXV0byYgZmlsZSA6IGJsb2JGaWxlcykgeworICAgICAgICBTdHJpbmcgZnVsbFBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJhc2VEaXJlY3RvcnksIGZpbGUpOwor
ICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICB9CisKICAgICBpZiAobV9zcWxpdGVE
QikgewogICAgICAgICBtX3NxbGl0ZURCLT5jbG9zZSgpOwogICAgICAgICBtX3NxbGl0ZURCID0g
bnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCBlMjJkN2U1Li5kZTI1
YThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC0xMDUsNiArMTA1LDggQEAg
cHJpdmF0ZToKICAgICBJREJFcnJvciB1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5VmFsdWUs
IGNvbnN0IElEQktleURhdGEmIGluZGV4S2V5KTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRIYXNJ
bmRleFJlY29yZChjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYg
aGFzUmVjb3JkKTsKIAorICAgIElEQkVycm9yIGRlbGV0ZVVudXNlZEJsb2JGaWxlUmVjb3JkcyhT
UUxpdGVJREJUcmFuc2FjdGlvbiYpOworCiAgICAgSlNDOjpWTSYgdm0oKTsKICAgICBKU0M6OkpT
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QoKTsKICAgICB2b2lkIGluaXRpYWxpemVWTSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggYTZhMGMyYi4uNTE0NmY5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJJ
bmRleGVkREIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU1FMaXRlSURCQ3Vyc29yLmgiCiAjaW5jbHVkZSAiU1FM
aXRlVHJhbnNhY3Rpb24uaCIKQEAgLTY4LDYgKzY5LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCVHJh
bnNhY3Rpb246OmJlZ2luKFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKIAogSURCRXJyb3IgU1FM
aXRlSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiB7CisgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0
ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsKICAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24g
fHwgIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHsg
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJObyBTUUxp
dGUgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MgdG8gY29tbWl0IikgfTsKIApAQCAtNzYsNiArNzgs
NyBAQCBJREJFcnJvciBTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKICAgICBpZiAobV9z
cWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBjb21t
aXQgU1FMaXRlIHRyYW5zYWN0aW9uIGluIGRhdGFiYXNlIGJhY2tlbmQiKSB9OwogCisgICAgZGVs
ZXRlQmxvYkZpbGVzSWZOZWNlc3NhcnkoKTsKICAgICBtb3ZlQmxvYkZpbGVzSWZOZWNlc3Nhcnko
KTsKIAogICAgIHJlc2V0KCk7CkBAIC05Nyw2ICsxMDAsMTggQEAgdm9pZCBTUUxpdGVJREJUcmFu
c2FjdGlvbjo6bW92ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5KCkKICAgICBtX2Jsb2JUZW1wb3JhcnlB
bmRTdG9yZWRGaWxlbmFtZXMuY2xlYXIoKTsKIH0KIAordm9pZCBTUUxpdGVJREJUcmFuc2FjdGlv
bjo6ZGVsZXRlQmxvYkZpbGVzSWZOZWNlc3NhcnkoKQoreworICAgIFN0cmluZyBkYXRhYmFzZURp
cmVjdG9yeSA9IG1fYmFja2luZ1N0b3JlLmZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpOworICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX2Jsb2JSZW1vdmVkRmlsZW5hbWVzKSB7CisgICAgICAgIFN0cmlu
ZyBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZURpcmVjdG9yeSwg
ZW50cnkpOworICAgICAgICBtX2JhY2tpbmdTdG9yZS50ZW1wb3JhcnlGaWxlSGFuZGxlcigpLnBy
ZXBhcmVGb3JBY2Nlc3NUb1RlbXBvcmFyeUZpbGUoZW50cnkpOworICAgICAgICBtX2JhY2tpbmdT
dG9yZS50ZW1wb3JhcnlGaWxlSGFuZGxlcigpLmFjY2Vzc1RvVGVtcG9yYXJ5RmlsZUNvbXBsZXRl
KGVudHJ5KTsKKyAgICB9CisKKyAgICBtX2Jsb2JSZW1vdmVkRmlsZW5hbWVzLmNsZWFyKCk7Cit9
CisKIElEQkVycm9yIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjphYm9ydCgpCiB7CiAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fYmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lcykgewpAQCAtMjAy
LDYgKzIxNywxMyBAQCB2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjphZGRCbG9iRmlsZShjb25z
dCBTdHJpbmcmIHRlbXBvcmFyeVBhdGgsIGNvbnN0IFN0cmluZwogICAgIG1fYmxvYlRlbXBvcmFy
eUFuZFN0b3JlZEZpbGVuYW1lcy5hcHBlbmQoeyB0ZW1wb3JhcnlQYXRoLCBzdG9yZWRGaWxlbmFt
ZSB9KTsKIH0KIAordm9pZCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6YWRkUmVtb3ZlZEJsb2JGaWxl
KGNvbnN0IFN0cmluZyYgcmVtb3ZlZEZpbGVuYW1lKQoreworICAgIEFTU0VSVCghbV9ibG9iUmVt
b3ZlZEZpbGVuYW1lcy5jb250YWlucyhyZW1vdmVkRmlsZW5hbWUpKTsKKyAgICBtX2Jsb2JSZW1v
dmVkRmlsZW5hbWVzLmFkZChyZW1vdmVkRmlsZW5hbWUpOworfQorCisKIH0gLy8gbmFtZXNwYWNl
IElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2Fj
dGlvbi5oCmluZGV4IDk4ZjgzMjYuLmZiZmZiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlv
bi5oCkBAIC03MiwxMiArNzIsMTQgQEAgcHVibGljOgogICAgIFNRTGl0ZVRyYW5zYWN0aW9uKiBz
cWxpdGVUcmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rpb24uZ2V0
KCk7IH0KIAogICAgIHZvaWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRo
LCBjb25zdCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKTsKKyAgICB2b2lkIGFkZFJlbW92ZWRCbG9i
RmlsZShjb25zdCBTdHJpbmcmIHJlbW92ZWRGaWxlbmFtZSk7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBjbGVhckN1cnNvcnMoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICB2b2lkIG1vdmVCbG9i
RmlsZXNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgZGVsZXRlQmxvYkZpbGVzSWZOZWNlc3Nhcnko
KTsKIAogICAgIElEQlRyYW5zYWN0aW9uSW5mbyBtX2luZm87CiAKQEAgLTg2LDYgKzg4LDcgQEAg
cHJpdmF0ZToKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVf
cHRyPFNRTGl0ZUlEQkN1cnNvcj4+IG1fY3Vyc29yczsKICAgICBIYXNoU2V0PFNRTGl0ZUlEQkN1
cnNvcio+IG1fYmFja2luZ1N0b3JlQ3Vyc29yczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgU3RyaW5nPj4gbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzOworICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX2Jsb2JSZW1vdmVkRmlsZW5hbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SURCU2VydmVyCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276303</attachid>
            <date>2016-04-12 21:35:35 -0700</date>
            <delta_ts>2016-04-12 22:49:13 -0700</delta_ts>
            <desc>Patch v2 - Fix the recordID condition check and remove the unused variable.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14010</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZDVhNTBhLi4xNGYwNzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTYtMDQtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFN1cHBvcnQgZGVsZXRpbmcgc3RvcmVkIGJs
b2IgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTY1MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE5vIHRlc3RhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQsIGN1cnJl
bnQgdGVzdHMgcGFzcykuCisKKyAgICAgICAgVGhlcmUncyAzIHBvaW50cyBpbiB0aW1lIHdoZW4g
d2UgbmVlZCB0byBkZWxldGUgYmxvYiBmaWxlcyAoYW5kIHJlY29yZHMgb2YgdGhlbSk6CisgICAg
ICAgIDEgLSBXaGVuIGRlbGV0aW5nIGEgc3BlY2lmaWMgb2JqZWN0IHN0b3JlIHJlY29yZC4KKyAg
ICAgICAgMiAtIFdoZW4gZGVsZXRpbmcgYW4gZW50aXJlIG9iamVjdCBzdG9yZS4KKyAgICAgICAg
MyAtIFdoZW4gZGVsZXRpbmcgYSB3aG9sZSBkYXRhYmFzZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgcGF0Y2ggZG9lcyB0aG9zZSB0aHJlZSB0aGluZ3MuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlVW51c2VkQmxvYkZpbGVSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVC
YWNraW5nU3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6ZGVsZXRlQmxvYkZpbGVzSWZOZWNlc3NhcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6YWRkUmVtb3Zl
ZEJsb2JGaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
VHJhbnNhY3Rpb24uaDoKKwogMjAxNi0wNC0xMSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgcHV0SW1hZ2VEYXRhIG5lZWRzIHRvIHByZW11bHRpcGx5IGlucHV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGU5ZTE2ZjEuLmU3OGViMDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC05NDEsOSArOTQxLDI0IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBEZWxldGUg
YWxsIHVudXNlZCBCbG9iIFVSTCByZWNvcmRzLgorICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBCbG9iUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZVJvdyBOT1QgSU4gKFNFTEVDVCByZWNvcmRJRCBGUk9NIFJlY29y
ZHMpIikpOworICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGRlbGV0ZSBCbG9iIFVSTCByZWNvcmRzKCVpKSAtICVzIiwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiQ291bGQgbm90IGRlbGV0ZSBzdG9yZWQgYmxvYiByZWNvcmRzIGZvciBkZWxldGVkIG9iamVj
dCBzdG9yZSIpIH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWxldGUgYWxsIHVudXNl
ZCBCbG9iIEZpbGUgcmVjb3Jkcy4KKyAgICBhdXRvIGVycm9yID0gZGVsZXRlVW51c2VkQmxvYkZp
bGVSZWNvcmRzKCp0cmFuc2FjdGlvbik7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGVycm9yOworCiAgICAgbV9kYXRhYmFzZUluZm8tPmRlbGV0ZU9iamVjdFN0b3Jl
KG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3Rv
cmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSUQpCkBAIC0xMjUxLDYgKzEyNjYsNDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmkKICAgICByZXR1cm4geyB9OwogfQogCitJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZVVudXNlZEJsb2JGaWxlUmVjb3JkcyhTUUxpdGVJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlVW51c2VkQmxvYkZpbGVSZWNvcmRzIik7CisKKyAgICAvLyBHYXRoZXIgdGhl
IHNldCBvZiBibG9iIFVSTHMgYW5kIGZpbGVuYW1lcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNl
LgorICAgIEhhc2hTZXQ8U3RyaW5nPiByZW1vdmVkQmxvYkZpbGVuYW1lczsKKyAgICB7CisgICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNU
IGZpbGVOYW1lIEZST00gQmxvYkZpbGVzIFdIRVJFIGJsb2JVUkwgTk9UIElOIChTRUxFQ1QgYmxv
YlVSTCBGUk9NIEJsb2JSZWNvcmRzKSIpKTsKKworICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZGVsZXRpbmcgc3Rv
cmVkIGJsb2JzICglaSkgKENvdWxkIG5vdCBnYXRoZXIgdW51c2VkIGJsb2JVUkxzKSAtICVzIiwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRXJyb3IgZGVsZXRpbmcgc3RvcmVkIGJsb2JzIikgfTsKKyAgICAgICAgfQor
CisgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICB3aGlsZSAocmVzdWx0
ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZW1vdmVkQmxvYkZpbGVuYW1lcy5hZGQoc3Fs
LmdldENvbHVtblRleHQoMSkpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZGVsZXRpbmcgc3RvcmVkIGJsb2JzICgl
aSkgKENvdWxkIG5vdCBnYXRoZXIgdW51c2VkIGJsb2JVUkxzKSAtICVzIiwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJl
dHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RXJyb3IgZGVsZXRpbmcgc3RvcmVkIGJsb2JzIikgfTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFJlbW92ZSB0aGUgYmxvYiByZWNvcmRzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuCisg
ICAgaWYgKCFyZW1vdmVkQmxvYkZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBCbG9i
RmlsZXMgV0hFUkUgYmxvYlVSTCBOT1QgSU4gKFNFTEVDVCBibG9iVVJMIEZST00gQmxvYlJlY29y
ZHMpIikpOworCisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJFcnJvciBkZWxldGluZyBzdG9yZWQgYmxvYnMgKCVpKSAoQ291bGQgbm90IGRlbGV0ZSBi
bG9iRmlsZSByZWNvcmRzKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgZGVsZXRpbmcgc3RvcmVk
IGJsb2JzIikgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgZmlsZSA6IHJl
bW92ZWRCbG9iRmlsZW5hbWVzKQorICAgICAgICB0cmFuc2FjdGlvbi5hZGRSZW1vdmVkQmxvYkZp
bGUoZmlsZSk7CisKKyAgICByZXR1cm4geyB9OworfQorCiBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZVJlY29yZChTUUxpdGVJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQgLSBr
ZXkgJXMsIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIGtleURhdGEubG9nZ2luZ1N0cmluZygpLnV0
ZjgoKS5kYXRhKCksIG9iamVjdFN0b3JlSUQpOwpAQCAtMTI2Nyw2ICsxMzIzLDUzIEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmVjb3JkKFNRTGl0ZUlEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gc2VyaWFsaXplIElEQktleURh
dGEgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhYmFzZSIpIH07CiAgICAgfQogCisgICAgLy8g
R2V0IHRoZSByZWNvcmQgSUQKKyAgICBpbnQ2NF90IHJlY29yZElEOworICAgIHsKKyAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgcmVj
b3JkSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPSBDQVNU
KD8gQVMgVEVYVCk7IikpOworCisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigyLCBrZXlCdWZmZXItPmRhdGEoKSwg
a2V5QnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgZGVsZXRlIHJlY29yZCBmcm9tIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiAo
JWkpIC0gJXMiLCBvYmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZGVsZXRlIHJl
Y29yZCBmcm9tIG9iamVjdCBzdG9yZSIpIH07CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVz
dWx0ID0gc3FsLnN0ZXAoKTsKKworICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHJlY29yZCBJRCwg
dGhlcmUncyBubyByZWNvcmQgdG8gZGVsZXRlLgorICAgICAgICBpZiAocmVzdWx0ID09IFNRTElU
RV9ET05FKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBy
ZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKCVpKSAodW5hYmxlIHRvIGZldGNo
IHJlY29yZCBJRCkgLSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4geyBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBk
ZWxldGUgcmVjb3JkIGZyb20gb2JqZWN0IHN0b3JlIikgfTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlY29yZElEID0gc3FsLmdldENvbHVtbkludDY0KDApOworICAgIH0KKworICAgIGlmIChyZWNv
cmRJRCA8IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRlIHJlY29yZCBm
cm9tIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiAoJWkpIChyZWNvcmQgSUQgaXMgaW52YWxpZCkg
LSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGRlbGV0ZSByZWNvcmQgZnJv
bSBvYmplY3Qgc3RvcmUiKSB9OworICAgIH0KKworICAgIC8vIERlbGV0ZSB0aGUgYmxvYiByZWNv
cmRzIGZvciB0aGlzIG9iamVjdCBzdG9yZSByZWNvcmQuCisgICAgeworICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEJsb2JS
ZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlUm93ID0gPzsiKSk7CisKKyAgICAgICAgaWYgKHNxbC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIHJl
Y29yZElEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSByZWNvcmQg
ZnJvbSBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKCVpKSAoQ291bGQgbm90IGRlbGV0ZSBCbG9i
UmVjb3JkcyByZWNvcmRzKSAtICVzIiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiB7
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGRlbGV0ZSByZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUiKSB9OworICAgICAgICB9CisgICAg
fQorCisgICAgYXV0byBlcnJvciA9IGRlbGV0ZVVudXNlZEJsb2JGaWxlUmVjb3Jkcyh0cmFuc2Fj
dGlvbik7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVycm9yOwor
CiAgICAgLy8gRGVsZXRlIHJlY29yZCBmcm9tIG9iamVjdCBzdG9yZQogICAgIHsKICAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJP
TSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPSBDQVNUKD8gQVMgVEVY
VCk7IikpOwpAQCAtMTQ2NCw2ICsxNTY3LDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAg
ICAgICAgICAgIExPR19FUlJPUigiSW5kZXhpbmcgbmV3IG9iamVjdCBzdG9yZSByZWNvcmQgZmFp
bGVkLCBidXQgdW5hYmxlIHRvIHJlbW92ZSB0aGUgb2JqZWN0IHN0b3JlIHJlY29yZCBpdHNlbGYi
KTsKICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsIEFTQ0lJTGl0ZXJhbCgiSW5kZXhpbmcgbmV3IG9iamVjdCBzdG9yZSByZWNvcmQgZmFpbGVk
LCBidXQgdW5hYmxlIHRvIHJlbW92ZSB0aGUgb2JqZWN0IHN0b3JlIHJlY29yZCBpdHNlbGYiKSB9
OwogICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycm9yOwogICAgIH0KIAogICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcyA9IHZhbHVlLmJsb2JVUkxzKCk7CkBAIC0xODYyLDYg
KzE5NjcsMzIgQEAgdm9pZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9y
ZSgpCiAKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVC
YWNraW5nU3RvcmUgZGVsZXRpbmcgZmlsZSAnJXMnIG9uIGRpc2siLCBkYkZpbGVuYW1lLnV0Zjgo
KS5kYXRhKCkpOwogCisgICAgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVzOworICAgIHsKKyAgICAg
ICAgYm9vbCBlcnJvcmVkID0gdHJ1ZTsKKworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsi
KSk7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC5nZXRD
b2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgICAgIGVycm9yZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChl
cnJvcmVkKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBnZXR0aW5nIGFsbCBibG9iIGZp
bGVuYW1lcyB0byBiZSBkZWxldGVkIik7CisgICAgfQorCisgICAgU3RyaW5nIGRhdGFiYXNlRGly
ZWN0b3J5ID0gZnVsbERhdGFiYXNlRGlyZWN0b3J5KCk7CisgICAgZm9yIChhdXRvJiBmaWxlIDog
YmxvYkZpbGVzKSB7CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChkYXRhYmFzZURpcmVjdG9yeSwgZmlsZSk7CisgICAgICAgIGRlbGV0ZUZpbGUoZnVs
bFBhdGgpOworICAgIH0KKwogICAgIGlmIChtX3NxbGl0ZURCKSB7CiAgICAgICAgIG1fc3FsaXRl
REItPmNsb3NlKCk7CiAgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IGUyMmQ3ZTUuLmRlMjVhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
QmFja2luZ1N0b3JlLmgKQEAgLTEwNSw2ICsxMDUsOCBAQCBwcml2YXRlOgogICAgIElEQkVycm9y
IHVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBp
bmRleElELCBjb25zdCBJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgSURCS2V5RGF0YSYgaW5k
ZXhLZXkpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQklu
ZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBib29sJiBoYXNSZWNvcmQpOwogCisgICAgSURC
RXJyb3IgZGVsZXRlVW51c2VkQmxvYkZpbGVSZWNvcmRzKFNRTGl0ZUlEQlRyYW5zYWN0aW9uJik7
CisKICAgICBKU0M6OlZNJiB2bSgpOwogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVZNKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0
aW9uLmNwcAppbmRleCBhNmEwYzJiLi41MTQ2ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2Fj
dGlvbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5j
bHVkZSAiSURCQ3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxpdGVJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJTUUxpdGVJREJDdXJzb3IuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgpAQCAt
NjgsNiArNjksNyBAQCBJREJFcnJvciBTUUxpdGVJREJUcmFuc2FjdGlvbjo6YmVnaW4oU1FMaXRl
RGF0YWJhc2UmIGRhdGFiYXNlKQogCiBJREJFcnJvciBTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y29t
bWl0KCkKIHsKKyAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCVHJhbnNhY3Rpb246OmNvbW1p
dCIpOwogICAgIGlmICghbV9zcWxpdGVUcmFuc2FjdGlvbiB8fCAhbV9zcWxpdGVUcmFuc2FjdGlv
bi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIk5vIFNRTGl0ZSB0cmFuc2FjdGlvbiBpbiBwcm9n
cmVzcyB0byBjb21taXQiKSB9OwogCkBAIC03Niw2ICs3OCw3IEBAIElEQkVycm9yIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjpjb21taXQoKQogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblBy
b2dyZXNzKCkpCiAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGNvbW1pdCBTUUxpdGUgdHJhbnNhY3Rpb24g
aW4gZGF0YWJhc2UgYmFja2VuZCIpIH07CiAKKyAgICBkZWxldGVCbG9iRmlsZXNJZk5lY2Vzc2Fy
eSgpOwogICAgIG1vdmVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpOwogCiAgICAgcmVzZXQoKTsKQEAg
LTk3LDYgKzEwMCwxOCBAQCB2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjptb3ZlQmxvYkZpbGVz
SWZOZWNlc3NhcnkoKQogICAgIG1fYmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lcy5jbGVh
cigpOwogfQogCit2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpkZWxldGVCbG9iRmlsZXNJZk5l
Y2Vzc2FyeSgpCit7CisgICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5ID0gbV9iYWNraW5nU3Rv
cmUuZnVsbERhdGFiYXNlRGlyZWN0b3J5KCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYmxv
YlJlbW92ZWRGaWxlbmFtZXMpIHsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5LCBlbnRyeSk7CisgICAgICAgIG1fYmFj
a2luZ1N0b3JlLnRlbXBvcmFyeUZpbGVIYW5kbGVyKCkucHJlcGFyZUZvckFjY2Vzc1RvVGVtcG9y
YXJ5RmlsZShlbnRyeSk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLnRlbXBvcmFyeUZpbGVIYW5k
bGVyKCkuYWNjZXNzVG9UZW1wb3JhcnlGaWxlQ29tcGxldGUoZW50cnkpOworICAgIH0KKworICAg
IG1fYmxvYlJlbW92ZWRGaWxlbmFtZXMuY2xlYXIoKTsKK30KKwogSURCRXJyb3IgU1FMaXRlSURC
VHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9ibG9iVGVt
cG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzKSB7CkBAIC0yMDIsNiArMjE3LDEzIEBAIHZvaWQgU1FM
aXRlSURCVHJhbnNhY3Rpb246OmFkZEJsb2JGaWxlKGNvbnN0IFN0cmluZyYgdGVtcG9yYXJ5UGF0
aCwgY29uc3QgU3RyaW5nCiAgICAgbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmFw
cGVuZCh7IHRlbXBvcmFyeVBhdGgsIHN0b3JlZEZpbGVuYW1lIH0pOwogfQogCit2b2lkIFNRTGl0
ZUlEQlRyYW5zYWN0aW9uOjphZGRSZW1vdmVkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiByZW1vdmVk
RmlsZW5hbWUpCit7CisgICAgQVNTRVJUKCFtX2Jsb2JSZW1vdmVkRmlsZW5hbWVzLmNvbnRhaW5z
KHJlbW92ZWRGaWxlbmFtZSkpOworICAgIG1fYmxvYlJlbW92ZWRGaWxlbmFtZXMuYWRkKHJlbW92
ZWRGaWxlbmFtZSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKaW5kZXggOThmODMyNi4u
ZmJmZmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKQEAgLTcyLDEyICs3MiwxNCBA
QCBwdWJsaWM6CiAgICAgU1FMaXRlVHJhbnNhY3Rpb24qIHNxbGl0ZVRyYW5zYWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zcWxpdGVUcmFuc2FjdGlvbi5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRC
bG9iRmlsZShjb25zdCBTdHJpbmcmIHRlbXBvcmFyeVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmVk
RmlsZW5hbWUpOworICAgIHZvaWQgYWRkUmVtb3ZlZEJsb2JGaWxlKGNvbnN0IFN0cmluZyYgcmVt
b3ZlZEZpbGVuYW1lKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyQ3Vyc29ycygpOwogICAg
IHZvaWQgcmVzZXQoKTsKIAogICAgIHZvaWQgbW92ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5KCk7Cisg
ICAgdm9pZCBkZWxldGVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpOwogCiAgICAgSURCVHJhbnNhY3Rp
b25JbmZvIG1faW5mbzsKIApAQCAtODYsNiArODgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8
SURCUmVzb3VyY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPj4g
bV9jdXJzb3JzOwogICAgIEhhc2hTZXQ8U1FMaXRlSURCQ3Vyc29yKj4gbV9iYWNraW5nU3RvcmVD
dXJzb3JzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBtX2Jsb2JUZW1w
b3JhcnlBbmRTdG9yZWRGaWxlbmFtZXM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYmxvYlJlbW92
ZWRGaWxlbmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIK
</data>
<flag name="review"
          id="300599"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>