<?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>191294</bug_id>
          
          <creation_ts>2018-11-05 18:59:42 -0800</creation_ts>
          <short_desc>IndexedDB: WAL file keeps growing</short_desc>
          <delta_ts>2022-02-01 23:28:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joeyparrish</cc>
    
    <cc>juliencdev</cc>
    
    <cc>leechanr21</cc>
    
    <cc>lincolnbaxter</cc>
    
    <cc>maximilian.doepp1</cc>
    
    <cc>moh.shraim</cc>
    
    <cc>pfifield</cc>
    
    <cc>pixelworld</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1475378</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-05 18:59:42 -0800</bug_when>
    <thetext>https://github.com/firebase/firebase-js-sdk/issues/947

Size of WAL files of iOS apps could keep growing every time we launch the app.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475379</commentid>
    <comment_count>1</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-05 19:00:51 -0800</bug_when>
    <thetext>&lt;rdar://problem/41333493&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475383</commentid>
    <comment_count>2</comment_count>
      <attachid>353942</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-05 19:22:22 -0800</bug_when>
    <thetext>Created attachment 353942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475384</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-11-05 19:25:39 -0800</bug_when>
    <thetext>Attachment 353942 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:3595:  developmentRegion is not en.  [xcodeproj/settings] [5]
Total errors found: 1 in 7 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>1475404</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-11-05 20:34:59 -0800</bug_when>
    <thetext>*** Bug 178204 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475544</commentid>
    <comment_count>5</comment_count>
    <who name="Pete Fifield">pfifield</who>
    <bug_when>2018-11-06 08:15:16 -0800</bug_when>
    <thetext>We have an app that uses IndexedDB and am experiencing a similar problem.  Since the bug has been recognized, do you have a workaround while we wait for the iOS phones to update?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475552</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-06 09:05:32 -0800</bug_when>
    <thetext>(In reply to Pete Fifield from comment #5)
&gt; We have an app that uses IndexedDB and am experiencing a similar problem. 
&gt; Since the bug has been recognized, do you have a workaround while we wait
&gt; for the iOS phones to update?

There (In reply to Pete Fifield from comment #5)
&gt; We have an app that uses IndexedDB and am experiencing a similar problem. 
&gt; Since the bug has been recognized, do you have a workaround while we wait
&gt; for the iOS phones to update?

There are two things I can think of:
(1) Regularly delete your IndexedDB files, via API like WKWebsiteDataStore removeDataOfTypes: this would clear both .sqlite3 and .sqlite3-wal files.
(2) Open a database and close it (e.g. by navigating to another page that doesn&apos;t use that database) before the app gets killed. This would make sure sqlite3_open() and sqlite3_close() are called() (https://www.sqlite.org/wal.html, item4), which may truncate or delete the WAL file.

If you can reload the content of IDB, I would recommend (1), which has more definitive result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475556</commentid>
    <comment_count>7</comment_count>
      <attachid>353942</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-11-06 09:21:00 -0800</bug_when>
    <thetext>Comment on attachment 353942
Patch

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

&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:125
&gt; +    SQLiteStatement cpStatement(*this, &quot;PRAGMA wal_checkpoint(TRUNCATE)&quot;);

&quot;PRAGMA wal_checkpoint(TRUNCATE)&quot;_s

Also, please find a better name for the variable.

&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:126
&gt; +    auto res = cpStatement.prepareAndStep();

Please avoid abbreviation in variable names.

Also, int is actually shorter than auto.

&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:129
&gt; +            LOG(SQLDatabase, &quot;SQLite database checkpoint is blocked&quot;);

Shouldn&apos;t this be a LOG_ERROR?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html:1
&gt; +&lt;script&gt;

&lt;!DOCTYPE html&gt;

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html:14
&gt; +    for (let i = 0; i &lt; 100; i ++) {

no space between i and ++.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-2.html:1
&gt; +&lt;script&gt;

&lt;!DOCTYPE html&gt;

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:62
&gt; +    RetainPtr&lt;IndexedDBFileSizeMessageHandler&gt; handler = adoptNS([[IndexedDBFileSizeMessageHandler alloc] init]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:63
&gt; +    RetainPtr&lt;WKWebViewConfiguration&gt; configuration = adoptNS([[WKWebViewConfiguration alloc] init]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:69
&gt; +    RetainPtr&lt;_WKWebsiteDataStoreConfiguration&gt; websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:73
&gt; +    RetainPtr&lt;NSSet&gt; types = adoptNS([[NSSet alloc] initWithObjects:WKWebsiteDataTypeIndexedDBDatabases, nil]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:82
&gt; +    RetainPtr&lt;WKWebView&gt; webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:94
&gt; +    // Terminate network process to keep WAL on disk

Missing period at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475569</commentid>
    <comment_count>8</comment_count>
      <attachid>353942</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-06 10:30:20 -0800</bug_when>
    <thetext>Comment on attachment 353942
Patch

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

&gt;&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:125
&gt;&gt; +    SQLiteStatement cpStatement(*this, &quot;PRAGMA wal_checkpoint(TRUNCATE)&quot;);
&gt; 
&gt; &quot;PRAGMA wal_checkpoint(TRUNCATE)&quot;_s
&gt; 
&gt; Also, please find a better name for the variable.

Okay.

&gt;&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:126
&gt;&gt; +    auto res = cpStatement.prepareAndStep();
&gt; 
&gt; Please avoid abbreviation in variable names.
&gt; 
&gt; Also, int is actually shorter than auto.

This variable is used for debugging, removed.

&gt;&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:129
&gt;&gt; +            LOG(SQLDatabase, &quot;SQLite database checkpoint is blocked&quot;);
&gt; 
&gt; Shouldn&apos;t this be a LOG_ERROR?

The statement sets column 0 as 1 for SQLITE_BUSY case, which means it&apos;s blocked by other active database connections now and will be executed later (https://www.sqlite.org/c3ref/wal_checkpoint_v2.html).
Since it&apos;s scheduled, I think it&apos;s different from an error.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html:1
&gt;&gt; +&lt;script&gt;
&gt; 
&gt; &lt;!DOCTYPE html&gt;

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html:14
&gt;&gt; +    for (let i = 0; i &lt; 100; i ++) {
&gt; 
&gt; no space between i and ++.

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-2.html:1
&gt;&gt; +&lt;script&gt;
&gt; 
&gt; &lt;!DOCTYPE html&gt;

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:62
&gt;&gt; +    RetainPtr&lt;IndexedDBFileSizeMessageHandler&gt; handler = adoptNS([[IndexedDBFileSizeMessageHandler alloc] init]);
&gt; 
&gt; auto

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:63
&gt;&gt; +    RetainPtr&lt;WKWebViewConfiguration&gt; configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
&gt; 
&gt; auto

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:69
&gt;&gt; +    RetainPtr&lt;_WKWebsiteDataStoreConfiguration&gt; websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]);
&gt; 
&gt; auto

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:73
&gt;&gt; +    RetainPtr&lt;NSSet&gt; types = adoptNS([[NSSet alloc] initWithObjects:WKWebsiteDataTypeIndexedDBDatabases, nil]);
&gt; 
&gt; auto

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:82
&gt;&gt; +    RetainPtr&lt;WKWebView&gt; webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
&gt; 
&gt; auto

Okay.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:94
&gt;&gt; +    // Terminate network process to keep WAL on disk
&gt; 
&gt; Missing period at the end.

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475570</commentid>
    <comment_count>9</comment_count>
      <attachid>353974</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-06 10:32:15 -0800</bug_when>
    <thetext>Created attachment 353974
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475571</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-11-06 10:35:31 -0800</bug_when>
    <thetext>Attachment 353974 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:3595:  developmentRegion is not en.  [xcodeproj/settings] [5]
Total errors found: 1 in 7 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>1475576</commentid>
    <comment_count>11</comment_count>
      <attachid>353974</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-11-06 10:51:50 -0800</bug_when>
    <thetext>Comment on attachment 353974
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475639</commentid>
    <comment_count>12</comment_count>
      <attachid>353974</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-06 12:57:03 -0800</bug_when>
    <thetext>Comment on attachment 353974
Patch

Clearing flags on attachment: 353974

Committed r237882: &lt;https://trac.webkit.org/changeset/237882&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475640</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-06 12:57:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475991</commentid>
    <comment_count>14</comment_count>
    <who name="Mohammad Shraim">moh.shraim</who>
    <bug_when>2018-11-07 07:58:56 -0800</bug_when>
    <thetext>Is this Fix will be available next iOS release??

Thanks
Mohd Shraim</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567115</commentid>
    <comment_count>15</comment_count>
    <who name="">juliencdev</who>
    <bug_when>2019-09-01 22:10:30 -0700</bug_when>
    <thetext>Hi there,
Which version of WebKit was this patch applied to? We are using Ionic for an iOS app and we experience the same issue. We are building with Xcode 10.3 which, I assume, uses the latest WebKit framework.
Regards,
Julien.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567433</commentid>
    <comment_count>16</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-03 11:03:22 -0700</bug_when>
    <thetext>(In reply to juliencdev from comment #15)
&gt; Hi there,
&gt; Which version of WebKit was this patch applied to? We are using Ionic for an
&gt; iOS app and we experience the same issue. We are building with Xcode 10.3
&gt; which, I assume, uses the latest WebKit framework.
&gt; Regards,
&gt; Julien.

Hi,

this fix is shipped in iOS 12.2+ and macOS 10.14.4+.

If you still sees this issue, please file a new bug with reproducible steps for us to look into.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567885</commentid>
    <comment_count>17</comment_count>
    <who name="">juliencdev</who>
    <bug_when>2019-09-04 15:44:54 -0700</bug_when>
    <thetext>Thanks for your reply.

Julien.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642914</commentid>
    <comment_count>18</comment_count>
    <who name="Lee Robertson">leechanr21</who>
    <bug_when>2020-04-17 18:14:39 -0700</bug_when>
    <thetext>This is still an issue in iOS 13.4.1 and Safari 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651283</commentid>
    <comment_count>19</comment_count>
    <who name="Lincoln Baxter, III">lincolnbaxter</who>
    <bug_when>2020-05-11 09:14:19 -0700</bug_when>
    <thetext>Also experiencing this bug in Safari on Desktop MacOS 10.15.4, and iOS Safari (in XCode Simulators) 13.4.1.

Refreshing the page seems to sometimes create a new IndexedDB instance when one already exists. The instance has exactly the same name, and seems to have the same data as the original DB.

Continuing to refresh will continue to create copies. Eventually the OS, iOS or MacOS, will prompt to allow a storage increase. This continues to MASSIVE sizes, see attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686919</commentid>
    <comment_count>20</comment_count>
    <who name="Maximilian D.">maximilian.doepp1</who>
    <bug_when>2020-09-09 00:08:36 -0700</bug_when>
    <thetext>We have the problem for our PWA sales app also. 
We have ~40MB data that we need, but we have users on iOS that get a warning that more than 1,1 GB will be used. 

On our Chrome desktop apps we can see that in the folder: https_xxx.xxx.de_0.indexeddb.blob / 1 a lot of subfolders are shown that have the data from different points in time. 
If we delete the old ones the app will work as before and the storage information in the dev tools are updated correctly. 

Two questions:
1.) is it possible to reopen the ticket?
2.) does someone know a workaround or a way to delete the old data out of JS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836349</commentid>
    <comment_count>21</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-02-01 23:28:54 -0800</bug_when>
    <thetext>(In reply to Maximilian D. from comment #20)
&gt; We have the problem for our PWA sales app also. 
&gt; We have ~40MB data that we need, but we have users on iOS that get a warning
&gt; that more than 1,1 GB will be used. 
&gt; 
&gt; On our Chrome desktop apps we can see that in the folder:
&gt; https_xxx.xxx.de_0.indexeddb.blob / 1 a lot of subfolders are shown that
&gt; have the data from different points in time. 
&gt; If we delete the old ones the app will work as before and the storage
&gt; information in the dev tools are updated correctly. 
&gt; 
&gt; Two questions:
&gt; 1.) is it possible to reopen the ticket?
&gt; 2.) does someone know a workaround or a way to delete the old data out of JS?

Hi Maximilian,

If you still see the issue on a recent iOS or macOS build, please file a new bug with reproducible steps (also test files if possible), and add me to CC list. It can be a different issue from this bug and we need to investigate again (e.g. we&apos;ve tried another fix at https://bugs.webkit.org/show_bug.cgi?id=202137.).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353942</attachid>
            <date>2018-11-05 19:22:22 -0800</date>
            <delta_ts>2018-11-06 10:32:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191294-20181105192221.patch</filename>
            <type>text/plain</type>
            <size>17651</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGEwM2MwMjFhZmYxYTUx
ZmJjODc0NDFlZTk2ZmEyYWUzYjVhMzZmMS4uNTZkOGY3YjJlNGI4MThhMDgzZjM1Y2UzYTIzMzQz
OTI0ODhmMzc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTExLTA1ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogV0FMIGZp
bGUga2VlcHMgZ3Jvd2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxMjk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MTMzMzQ5Mz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHdlIHF1aXQg
YXBwcywgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gbWF5IG5vdCBiZSBzaHV0IGRvd24gcHJvcGVy
bHksIGFuZCBXQUwgZmlsZSB3aWxsIGJlIHJldGFpbmVkIG9uIGRpc2suCisgICAgICAgIE9uIHRo
ZSBuZXh0IG9wZW4gb2YgZGF0YWJhc2UgY29ubmVjdGlvbiwgbmV3IGxvZ3Mgd2lsbCBiZSBhcHBl
bmRlZCB0byB0aGUgb3JpZ2luYWwgV0FMIGZpbGUsIHdoaWNoIGtlZXBzIAorICAgICAgICBpbmNy
ZWFzaW5nIHNpemUgb2YgdGhlIFdBTCBmaWxlLiBXZSBzaG91bGQgZG8gYSBtYW51YWwgY2hlY2tw
b2ludCB3aGVuIHdlIG9wZW4gYSBJbmRleGVkREIgdG8gbWFrZSBzdXJlIHByZXZpb3VzCisgICAg
ICAgIGxvZyBpcyB3cml0dGVuIHRvIGRhdGFiYXNlIGFuZCB0cnVuY2F0ZSBXQUwgZmlsZS4KKwor
ICAgICAgICBUZXN0OiBJbmRleGVkREIuSW5kZXhlZERCVGVtcEZpbGVTaXplCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6Om9wZW4pOgorCiAyMDE4LTExLTAyICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIENoYW5naW5nIHZpZXcgc2NhbGUgc29t
ZXRpbWVzIGRvZXMgbm90IHpvb20gdGhlIHBhZ2UgdG8gdGhlIG5ldyBpbml0aWFsIHNjYWxlLCB3
aGVuIHRoZSBwYWdlIGlzIGF0IGluaXRpYWwgc2NhbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCmluZGV4IDBkNDM2YmU2NjcyOWJlNjU3ZTRjZDMz
ZWM1NmVkMGJjZDJhMWRlNGUuLjQ3NzU1OWQ2OGRlNDMyZDA3Yjk1ZWJkY2EyNGJlODA2MWRkYjFm
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cApAQCAtMTIyLDYgKzEyMiwxNCBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGJvb2wgZm9yV2ViU1FMRGF0YWJhc2UpCiAgICAgfSBlbHNlCiAgICAg
ICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGZhaWxlZCB0byBzZXQgam91cm5hbF9tb2Rl
IHRvIFdBTCwgZXJyb3I6ICVzIiwgbGFzdEVycm9yTXNnKCkpOwogCisgICAgU1FMaXRlU3RhdGVt
ZW50IGNwU3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHdhbF9jaGVja3BvaW50KFRSVU5DQVRFKSIp
OworICAgIGF1dG8gcmVzID0gY3BTdGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAoKTsKKyAgICBpZiAo
cmVzID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKGNwU3RhdGVtZW50LmdldENvbHVtbklu
dCgwKSkKKyAgICAgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZSBkYXRhYmFzZSBjaGVj
a3BvaW50IGlzIGJsb2NrZWQiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTE9HX0VSUk9SKCJTUUxp
dGUgZGF0YWJhc2UgZmFpbGVkIHRvIGNoZWNrcG9pbnQ6ICVzIiwgbGFzdEVycm9yTXNnKCkpOwor
CiAgICAgcmV0dXJuIGlzT3BlbigpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODg3MTA0MDI1ZTJiZjQ5ZGY4N2VmYjU4YmJjYjE1ZjAw
ODA2YmJmOC4uOGFiYTNjOGNiMGUzYmFmY2ZiNGFlODRiMDg2MWQ2NjUzNWFkZmJhMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
IEBACisyMDE4LTExLTA1ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAg
ICAgIEluZGV4ZWREQjogV0FMIGZpbGUga2VlcHMgZ3Jvd2luZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMjk0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80MTMzMzQ5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCVGVtcEZpbGVTaXplLTEuaHRtbDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUtMi5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxl
U2l6ZS5tbTogQWRkZWQuCisgICAgICAgICgtW0luZGV4ZWREQkZpbGVTaXplTWVzc2FnZUhhbmRs
ZXIgdXNlckNvbnRlbnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOl0pOgorICAg
ICAgICAoVEVTVCk6CisKIDIwMTgtMTEtMDIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gRW5hYmxlIEdTVF9ERUJVR19OT19DT0xP
UiBlbnZpcm9ubWVudCB2YXJpYWJsZSBwYXNzLXRocm91Z2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMjE5MGY1N2M3YmRmODA2ZWU3ZTFmMDRhYWZlOGYyYjRkNTE1ZGY4Zi4uNGU5NWM2YzAy
MDI5NTU4ZGJhN2U1ZDhkOTlkNWMzOGYwOTNiOTM1MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTcyMCw2ICs3MjAsOSBAQAogCQlDOUM2MEU2NjFFNTNBOURDMDA2REExODEgLyogYXV0b3Bs
YXktY2hlY2staW4taWZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzlDNjBFNjQxRTUzQTlCQTAwNkRBMTgxIC8qIGF1dG9wbGF5
LWNoZWNrLWluLWlmcmFtZS5odG1sICovOyB9OwogCQlDOUU2REQzNTFFQTk3RDA4MDBERDc4QUEg
LyogRmlyc3RSZXNwb25kZXJTdXBwcmVzc2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM5RTZERDMxMUVBOTcyRDgwMERENzhBQSAvKiBGaXJzdFJl
c3BvbmRlclN1cHByZXNzaW9uLm1tICovOyB9OwogCQlDQTM4NDU5NjIwQUUxN0E5MDA5OTBEM0Ig
LyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzODQ1OTUyMEFFMDEyRTAwOTkwRDNCIC8qIExvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbSAqLzsgfTsKKwkJQ0E1Qjk0RDIyMTkwQzBGNDAwNTlG
RTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0E1Qjk0RDAyMTkwQzBFMDAwNTlGRTM4
IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWwgKi87IH07CisJCUNBNUI5NEQzMjE5MEMw
RjQwMDU5RkUzOCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUtMi5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBNUI5NEQxMjE5MEMwRTAw
MDU5RkUzOCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUtMi5odG1sICovOyB9OworCQlDQTVCOTRE
NzIxOTEwMDVCMDA1OUZFMzggLyogSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0E1Qjk0RDYyMTkxMDA1QjAwNTlG
RTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSAqLzsgfTsKIAkJQ0QwQkQwQTYxRjc5OTI0
RDAwMUFCMkNGIC8qIENvbnRleHRNZW51SW1nV2l0aFZpZGVvLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwQkQwQTUxRjc5OTIyMDAwMUFCMkNGIC8q
IENvbnRleHRNZW51SW1nV2l0aFZpZGVvLm1tICovOyB9OwogCQlDRDBCRDBBODFGNzk5ODJEMDAx
QUIyQ0YgLyogQ29udGV4dE1lbnVJbWdXaXRoVmlkZW8uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDBCRDBBNzFGNzk5N0MyMDAxQUIy
Q0YgLyogQ29udGV4dE1lbnVJbWdXaXRoVmlkZW8uaHRtbCAqLzsgfTsKIAkJQ0QyMjdFNDQyMTFB
NEQ1RDAwRDI4NUFGIC8qIFByZWZlcnJlZEF1ZGlvQnVmZmVyU2l6ZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMjI3RTQzMjExQTRENUQwMEQyODVB
RiAvKiBQcmVmZXJyZWRBdWRpb0J1ZmZlclNpemUubW0gKi87IH07CkBAIC0xMDc4LDYgKzEwODEs
OCBAQAogCQkJCTU3MUY3RkQwMUYyOTYxRkIwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVk
Q2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy13YWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJNTc1OTlFMkExRjA3MUFBMDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRD
bG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVJlYWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQk1NzU5OUUyQjFGMDcxQUEwMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25l
QmFja3dhcmRDb21wYXRpYmlsaXR5V3JpdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJ
CQlDQTVCOTREMjIxOTBDMEY0MDA1OUZFMzggLyogSW5kZXhlZERCVGVtcEZpbGVTaXplLTEuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJCQlDQTVCOTREMzIxOTBDMEY0MDA1OUZFMzggLyog
SW5kZXhlZERCVGVtcEZpbGVTaXplLTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1
MTEwRkNGOTFFMDFDRDhBMDA2RjhEMEIgLyogSW5kZXhVcGdyYWRlLmJsb2IgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJNTExMEZDRjYxRTAxQ0Q4MzAwNkY4RDBCIC8qIEluZGV4VXBncmFkZS5z
cWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTJFRkYwNkNEMUQ4QTQyOUEwMDA0QkIz
MCAvKiBpbnB1dC1maWVsZC1pbi1zY3JvbGxhYmxlLWRvY3VtZW50Lmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCkBAIC0xOTUzLDYgKzE5NTgsOSBAQAogCQlDOUM2MEU2NDFFNTNBOUJBMDA2REEx
ODEgLyogYXV0b3BsYXktY2hlY2staW4taWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAiYXV0b3BsYXktY2hlY2staW4taWZyYW1lLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDOUU2REQzMTFFQTk3MkQ4MDBERDc4QUEgLyogRmlyc3RSZXNwb25kZXJT
dXBwcmVzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpcnN0UmVzcG9uZGVyU3VwcHJl
c3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBMzg0NTk1MjBBRTAxMkUw
MDk5MEQzQiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBNUI5NEQwMjE5MEMwRTAwMDU5RkUzOCAv
KiBJbmRleGVkREJUZW1wRmlsZVNpemUtMS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gIkluZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDQTVCOTREMTIxOTBDMEUwMDA1OUZFMzggLyogSW5kZXhlZERCVGVtcEZpbGVTaXpl
LTIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJJbmRleGVkREJUZW1wRmlsZVNp
emUtMi5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1Qjk0RDYyMTkxMDA1
QjAwNTlGRTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEluZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0QwQkQwQTUxRjc5OTIyMDAwMUFCMkNGIC8qIENvbnRleHRN
ZW51SW1nV2l0aFZpZGVvLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVJbWdX
aXRoVmlkZW8ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMEJEMEE3MUY3OTk3
QzIwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRlby5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gQ29u
dGV4dE1lbnVJbWdXaXRoVmlkZW8uaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0QyMjVDMDcxQzQ1QTY5MjAwMTQwNzYxIC8qIFBhcnNlZENvbnRlbnRSYW5nZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZWRDb250ZW50UmFuZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM3Niw2ICsyMzg0LDcgQEAKIAkJCQk1MUJD
RUU0OTFDODRGNEFGMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tICovLAogCQkJ
CTUxQjFFRThEMUM4MEY1ODgwMDY0RkI5OCAvKiBJbmRleGVkREJQZXJzaXN0ZW5jZS5tbSAqLywK
IAkJCQk1NzU5OUUyMDFGMDcxOTE3MDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25l
QmFja3dhcmRDb21wYXRpYmlsaXR5Lm1tICovLAorCQkJCUNBNUI5NEQ2MjE5MTAwNUIwMDU5RkUz
OCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUubW0gKi8sCiAJCQkJMEU0MDRBOEEyMTY2RERGODAw
ODI3MUJBIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZUlzU2VsZWN0RWxlbWVudC5tbSAqLywK
IAkJCQk3OUM1RDQzMDIwOUQ3NjgzMDBGMUU3Q0EgLyogSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
SXNUZXh0RmllbGQubW0gKi8sCiAJCQkJMkRCMDIzMkUxRTRFODcxODAwNzA3MTIzIC8qIEludGVy
YWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tICovLApAQCAtMjczOCw2ICsyNzQ3LDggQEAKIAkJ
CQk1NzFGN0ZDRjFGMjk2MUUxMDA5NDY2NDggLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFj
a3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsICovLAogCQkJCTU3NTk5RTI1MUYwNzE5MkMw
MEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlS
ZWFkLmh0bWwgKi8sCiAJCQkJNTc1OTlFMjMxRjA3MTkyQzAwQTNGQjhDIC8qIEluZGV4ZWREQlN0
cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVdyaXRlLmh0bWwgKi8sCisJCQkJQ0E1
Qjk0RDAyMTkwQzBFMDAwNTlGRTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWwgKi8s
CisJCQkJQ0E1Qjk0RDEyMTkwQzBFMDAwNTlGRTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS0y
Lmh0bWwgKi8sCiAJCQkJNTExMEZDRjIxRTAxQ0Q3NzAwNkY4RDBCIC8qIEluZGV4VXBncmFkZS5i
bG9iICovLAogCQkJCTUxMTBGQ0YzMUUwMUNENzcwMDZGOEQwQiAvKiBJbmRleFVwZ3JhZGUuc3Fs
aXRlMyAqLywKIAkJCQkyRUZGMDZDQzFEOEE0MjkxMDAwNEJCMzAgLyogaW5wdXQtZmllbGQtaW4t
c2Nyb2xsYWJsZS1kb2N1bWVudC5odG1sICovLApAQCAtMzg3Miw2ICszODgzLDcgQEAKIAkJCQk3
QzgzRTBCRTFEMEE2NTEzMDBGRUJDRjMgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0UwQkYxRDBBNjUyMjAwRkVCQ0YzIC8qIEluZGV4ZWREQlBlcnNp
c3RlbmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTc1OTlFMjExRjA3MTkxOTAwQTNGQjhDIC8q
IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCUNBNUI5NEQ3MjE5MTAwNUIwMDU5RkUzOCAvKiBJbmRleGVkREJUZW1wRmls
ZVNpemUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QTk1QkRFMTFFOUJFQzVGMDA4NjU0OTggLyog
SW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUZC
MUE0MTFBRTYwMDQ0N0M0QyAvKiBJbmplY3RlZEJ1bmRsZUJhc2ljLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgzMTQ4QjA2MjAyQUM2QTQwMEJBREU5OSAvKiBJbmplY3RlZEJ1bmRsZURpc2FibGVP
dmVycmlkZUJ1aWx0aW5zQmVoYXZpb3IuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6
ZS0xLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS0xLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzJkODFlNDc0OTVjOTA4ZGMxMjkxNzJm
MTA1Y2I2YTIxZDkyZDMzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLTEuaHRtbApAQCAtMCwwICsx
LDIzIEBACis8c2NyaXB0PgorCit2YXIgb3BlblJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9w
ZW4oIkluZGV4ZWREQlRlbXBGaWxlU2l6ZSIpOworb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50
ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnVXBncmFkZU5lZWRlZCcpOworCisgICAgZXZlbnQudGFy
Z2V0LnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7Cit9IAorCitv
cGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgIHdpbmRvdy53ZWJr
aXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdTdWNjZXNzJyk7Cisg
ICAgdmFyIHRyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0LnJlc3VsdC50cmFuc2FjdGlvbihbIlRl
c3RPYmplY3RTdG9yZSJdLCAicmVhZHdyaXRlIik7CisgICAgdmFyIG9iamVjdFN0b3JlID0gdHJh
bnNhY3Rpb24ub2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwOyBpICsrKSB7CisgICAgICAgIG9iamVjdFN0b3JlLmFkZChpLCBpKTsKKyAg
ICB9Cit9CisKK29wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgIHdp
bmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdFcnJv
cicpOworfQorCis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS0yLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkzMzE1ZjJmYTA3YmE3ZjI0
ODFjNjBiODVlOGNmYWFhYjg4YjE0MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLTIuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8c2NyaXB0PgorCit2YXIgb3BlblJlcXVlc3QgPSB3aW5kb3cuaW5kZXhl
ZERCLm9wZW4oIkluZGV4ZWREQlRlbXBGaWxlU2l6ZSIpOworCitvcGVuUmVxdWVzdC5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbihldmVudCkgeworICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJz
LnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdTdWNjZXNzJyk7Cit9CisKK29wZW5SZXF1ZXN0Lm9u
ZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRs
ZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdFcnJvcicpOworfQorCis8L3NjcmlwdD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ0MjZlMzRlMzlhMWI1MDhlYTliMzkwYzg0OGZlOWFiOGI0Mzc0ZmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVz
dC5oIgorI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+
CisjaW1wb3J0IDxXZWJLaXQvX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uaD4KKyNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK3N0YXRpYyBi
b29sIHJlYWR5VG9Db250aW51ZTsKK3N0YXRpYyBib29sIHJlY2VpdmVkU2NyaXB0TWVzc2FnZTsK
K3N0YXRpYyBSZXRhaW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKKwor
QGludGVyZmFjZSBJbmRleGVkREJGaWxlU2l6ZU1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3QgPFdL
U2NyaXB0TWVzc2FnZUhhbmRsZXI+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBJbmRleGVkREJG
aWxlU2l6ZU1lc3NhZ2VIYW5kbGVyCisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihX
S1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZl
U2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIHJlY2VpdmVk
U2NyaXB0TWVzc2FnZSA9IHRydWU7CisgICAgbGFzdFNjcmlwdE1lc3NhZ2UgPSBtZXNzYWdlOwor
fQorCitAZW5kCisKK1RFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCit7Cisg
ICAgUmV0YWluUHRyPEluZGV4ZWREQkZpbGVTaXplTWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIgPSBh
ZG9wdE5TKFtbSW5kZXhlZERCRmlsZVNpemVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwor
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpo
YW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAgUmV0YWluUHRyPE5TVVJM
PiBpZGJQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rl
c3RXZWJLaXRBUEkvQ3VzdG9tV2Vic2l0ZURhdGEvSW5kZXhlZERCLyIgc3RyaW5nQnlFeHBhbmRp
bmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHdh
bEZpbGVQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rl
c3RXZWJLaXRBUEkvQ3VzdG9tV2Vic2l0ZURhdGEvSW5kZXhlZERCL2ZpbGVfXzAvSW5kZXhlZERC
VGVtcEZpbGVTaXplL0luZGV4ZWREQi5zcWxpdGUzLXdhbCIgc3RyaW5nQnlFeHBhbmRpbmdUaWxk
ZUluUGF0aF0gaXNEaXJlY3Rvcnk6Tk9dOworCisgICAgUmV0YWluUHRyPF9XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uPiB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
IHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLl9pbmRleGVkREJEYXRhYmFzZURp
cmVjdG9yeSA9IGlkYlBhdGguZ2V0KCk7CisKKyAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldIGF1dG9yZWxlYXNl
XTsKKyAgICBSZXRhaW5QdHI8TlNTZXQ+IHR5cGVzID0gYWRvcHROUyhbW05TU2V0IGFsbG9jXSBp
bml0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVJbmRleGVkREJEYXRhYmFzZXMsIG5pbF0p
OworCisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSByZW1vdmVEYXRh
T2ZUeXBlczp0eXBlcy5nZXQoKSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4oKSB7CisgICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7Cisg
ICAgfV07CisgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworCisgICAgLy8gRG8gc29tZSBJbmRleGVkREIg
b3BlcmF0aW9ucyB0byBnZW5lcmF0ZSBXQUwgZmlsZSAKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleGVkREJUZW1w
RmlsZVNpemUtMSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwor
CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gc3RyaW5nMSA9IChOU1N0cmluZyAqKVtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XTsKKworICAg
IHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0
cmluZzIgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisKKyAgICAvLyBU
ZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2sKKyAgICB3ZWJWaWV3
ID0gbmlsOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOworICAg
IFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgp
LnBhdGggZXJyb3I6bmlsXTsKKyAgICBOU051bWJlciAqZmlsZVNpemVCZWZvcmUgPSBbZmlsZUF0
dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRmlsZVNpemVdOworCisgICAgLy8gT3BlbiB0aGUgc2Ft
ZSBkYXRhYmFzZSBhZ2FpbgorICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleGVk
REJUZW1wRmlsZVNpemUtMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVl
c3RdOworCisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgIFJldGFpblB0cjxO
U1N0cmluZz4gc3RyaW5nMyA9IChOU1N0cmluZyAqKVtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XTsK
KworICAgIGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBh
dHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJyb3I6bmlsXTsK
KyAgICBOU051bWJlciAqZmlsZVNpemVBZnRlciA9IFtmaWxlQXR0cmlidXRlcyBvYmplY3RGb3JL
ZXk6TlNGaWxlU2l6ZV07CisgICAgRVhQRUNUX0dUKFtmaWxlU2l6ZUJlZm9yZSBsb25nTG9uZ1Zh
bHVlXSwgW2ZpbGVTaXplQWZ0ZXIgbG9uZ0xvbmdWYWx1ZV0pOworCisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoQCJVcGdyYWRlTmVlZGVkIiwgc3RyaW5nMS5nZXQoKSk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKEAiU3VjY2VzcyIsIHN0cmluZzIuZ2V0KCkpOworICAgIEVYUEVDVF9XS19TVFJFUShAIlN1
Y2Nlc3MiLCBzdHJpbmczLmdldCgpKTsgCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353974</attachid>
            <date>2018-11-06 10:32:15 -0800</date>
            <delta_ts>2018-11-06 12:57:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191294-20181106103215.patch</filename>
            <type>text/plain</type>
            <size>17491</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJlMGQ2YzI1MGY5M2Zk
M2Y5OTM4ZmExOWNiZjkxMTUzMDFmNjM5OC4uZjE4M2RiZGVkOTk5YTI0ZjkwY2YwYjExOThjOTk2
Y2U4NzBiYzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTExLTA2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogV0FMIGZp
bGUga2VlcHMgZ3Jvd2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxMjk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MTMzMzQ5Mz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHdlIHF1aXQg
YXBwcywgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gbWF5IG5vdCBiZSBzaHV0IGRvd24gcHJvcGVy
bHksIGFuZCBXQUwgZmlsZSB3aWxsIGJlIHJldGFpbmVkIG9uIGRpc2suCisgICAgICAgIE9uIHRo
ZSBuZXh0IG9wZW4gb2YgZGF0YWJhc2UgY29ubmVjdGlvbiwgbmV3IGxvZ3Mgd2lsbCBiZSBhcHBl
bmRlZCB0byB0aGUgb3JpZ2luYWwgV0FMIGZpbGUsIHdoaWNoIGtlZXBzIAorICAgICAgICBpbmNy
ZWFzaW5nIHNpemUgb2YgdGhlIFdBTCBmaWxlLiBXZSBzaG91bGQgZG8gYSBtYW51YWwgY2hlY2tw
b2ludCB3aGVuIHdlIG9wZW4gYSBJbmRleGVkREIgdG8gbWFrZSBzdXJlIHByZXZpb3VzCisgICAg
ICAgIGxvZyBpcyB3cml0dGVuIHRvIGRhdGFiYXNlIGFuZCB0cnVuY2F0ZSBXQUwgZmlsZS4KKwor
ICAgICAgICBUZXN0OiBJbmRleGVkREIuSW5kZXhlZERCVGVtcEZpbGVTaXplCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6Om9wZW4pOgorCiAyMDE4LTExLTA2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0
c0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYiBBbmltYXRpb25zXSB0cmFuc2l0aW9ucy9yZW1v
dmUtdHJhbnNpdGlvbi1zdHlsZS5odG1sIGNyYXNoZXMgd2l0aCBHdWFyZE1hbGxvYyBvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggMGQ0
MzZiZTY2NzI5YmU2NTdlNGNkMzNlYzU2ZWQwYmNkMmExZGU0ZS4uM2M0OTlhMjE4YmIwM2I3N2Rh
NjIyNjQ5Mjk5OGNjZTdmZDI4OGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCkBAIC0xMjIsNiArMTIyLDEzIEBAIGJvb2wgU1FMaXRlRGF0
YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBmb3JXZWJTUUxEYXRhYmFz
ZSkKICAgICB9IGVsc2UKICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVk
IHRvIHNldCBqb3VybmFsX21vZGUgdG8gV0FMLCBlcnJvcjogJXMiLCBsYXN0RXJyb3JNc2coKSk7
CiAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2hlY2twb2ludFN0YXRlbWVudCgqdGhpcywgIlBSQUdN
QSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSkiX3MpOworICAgIGlmIChjaGVja3BvaW50U3RhdGVt
ZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoY2hlY2tw
b2ludFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJTUUxpdGUgZGF0YWJhc2UgY2hlY2twb2ludCBpcyBibG9ja2VkIik7CisgICAgfSBlbHNl
CisgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGZhaWxlZCB0byBjaGVja3BvaW50
OiAlcyIsIGxhc3RFcnJvck1zZygpKTsKKwogICAgIHJldHVybiBpc09wZW4oKTsKIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ4Yjk1MmQw
Y2JhYWIxMTdlZDIwMmMxNDE0ZDljY2UwMjEwMjUwYjQuLjYxOWM0NmViOTA1NDVkYWYwZWE3OGI2
YzkxZWRhMGY4NzZlMjgzZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0xMS0wNiAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREI6IFdBTCBmaWxlIGtlZXBzIGdy
b3dpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTI5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDEzMzM0OTM+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZp
bGVTaXplLTIuaHRtbDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW06IEFkZGVkLgorICAgICAgICAoLVtJbmRl
eGVkREJGaWxlU2l6ZU1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNl
aXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE4LTExLTA1ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW01hY10g
SW1wbGVtZW50IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDFiNjI2NjVkZjIyZmZjZGIxNGQyMjkzY2ZlOWM1N2NjYWUxZjdiMWMuLmEyZTU5MjUyY2Q1
OTdmZDhlODBlMzA1OTg3MWExYTQ4YmY2OTI2YjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC03MjEsNiArNzIxLDkgQEAKIAkJQzlDNjBFNjYxRTUzQTlEQzAwNkRBMTgxIC8qIGF1dG9wbGF5
LWNoZWNrLWluLWlmcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM5QzYwRTY0MUU1M0E5QkEwMDZEQTE4MSAvKiBhdXRvcGxheS1j
aGVjay1pbi1pZnJhbWUuaHRtbCAqLzsgfTsKIAkJQzlFNkREMzUxRUE5N0QwODAwREQ3OEFBIC8q
IEZpcnN0UmVzcG9uZGVyU3VwcHJlc3Npb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDOUU2REQzMTFFQTk3MkQ4MDBERDc4QUEgLyogRmlyc3RSZXNw
b25kZXJTdXBwcmVzc2lvbi5tbSAqLzsgfTsKIAkJQ0EzODQ1OTYyMEFFMTdBOTAwOTkwRDNCIC8q
IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBMzg0NTk1MjBBRTAxMkUwMDk5MEQzQiAvKiBMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW0gKi87IH07CisJCUNBNUI5NEQyMjE5MEMwRjQwMDU5RkUz
OCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUtMS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBNUI5NEQwMjE5MEMwRTAwMDU5RkUzOCAv
KiBJbmRleGVkREJUZW1wRmlsZVNpemUtMS5odG1sICovOyB9OworCQlDQTVCOTREMzIxOTBDMEY0
MDA1OUZFMzggLyogSW5kZXhlZERCVGVtcEZpbGVTaXplLTIuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTVCOTREMTIxOTBDMEUwMDA1
OUZFMzggLyogSW5kZXhlZERCVGVtcEZpbGVTaXplLTIuaHRtbCAqLzsgfTsKKwkJQ0E1Qjk0RDcy
MTkxMDA1QjAwNTlGRTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBNUI5NEQ2MjE5MTAwNUIwMDU5RkUz
OCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUubW0gKi87IH07CiAJCUNEMEJEMEE2MUY3OTkyNEQw
MDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRlby5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMEJEMEE1MUY3OTkyMjAwMDFBQjJDRiAvKiBD
b250ZXh0TWVudUltZ1dpdGhWaWRlby5tbSAqLzsgfTsKIAkJQ0QwQkQwQTgxRjc5OTgyRDAwMUFC
MkNGIC8qIENvbnRleHRNZW51SW1nV2l0aFZpZGVvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwQkQwQTcxRjc5OTdDMjAwMUFCMkNG
IC8qIENvbnRleHRNZW51SW1nV2l0aFZpZGVvLmh0bWwgKi87IH07CiAJCUNEMjI3RTQ0MjExQTRE
NUQwMEQyODVBRiAvKiBQcmVmZXJyZWRBdWRpb0J1ZmZlclNpemUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDIyN0U0MzIxMUE0RDVEMDBEMjg1QUYg
LyogUHJlZmVycmVkQXVkaW9CdWZmZXJTaXplLm1tICovOyB9OwpAQCAtMTA3OSw2ICsxMDgyLDgg
QEAKIAkJCQk1NzFGN0ZEMDFGMjk2MUZCMDA5NDY2NDggLyogSW5kZXhlZERCU3RydWN0dXJlZENs
b25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsIGluIENvcHkgUmVzb3VyY2VzICov
LAogCQkJCTU3NTk5RTJBMUYwNzFBQTAwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xv
bmVCYWNrd2FyZENvbXBhdGliaWxpdHlSZWFkLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJNTc1OTlFMkIxRjA3MUFBMDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJh
Y2t3YXJkQ29tcGF0aWJpbGl0eVdyaXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJ
Q0E1Qjk0RDIyMTkwQzBGNDAwNTlGRTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJQ0E1Qjk0RDMyMTkwQzBGNDAwNTlGRTM4IC8qIElu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS0yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTEx
MEZDRjkxRTAxQ0Q4QTAwNkY4RDBCIC8qIEluZGV4VXBncmFkZS5ibG9iIGluIENvcHkgUmVzb3Vy
Y2VzICovLAogCQkJCTUxMTBGQ0Y2MUUwMUNEODMwMDZGOEQwQiAvKiBJbmRleFVwZ3JhZGUuc3Fs
aXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkyRUZGMDZDRDFEOEE0MjlBMDAwNEJCMzAg
LyogaW5wdXQtZmllbGQtaW4tc2Nyb2xsYWJsZS1kb2N1bWVudC5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovLApAQCAtMTk1NSw2ICsxOTYwLDkgQEAKIAkJQzlDNjBFNjQxRTUzQTlCQTAwNkRBMTgx
IC8qIGF1dG9wbGF5LWNoZWNrLWluLWlmcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gImF1dG9wbGF5LWNoZWNrLWluLWlmcmFtZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlFNkREMzExRUE5NzJEODAwREQ3OEFBIC8qIEZpcnN0UmVzcG9uZGVyU3Vw
cHJlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaXJzdFJlc3BvbmRlclN1cHByZXNz
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTM4NDU5NTIwQUUwMTJFMDA5
OTBEM0IgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTVCOTREMDIxOTBDMEUwMDA1OUZFMzggLyog
SW5kZXhlZERCVGVtcEZpbGVTaXplLTEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
ICJJbmRleGVkREJUZW1wRmlsZVNpemUtMS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1Qjk0RDEyMTkwQzBFMDAwNTlGRTM4IC8qIEluZGV4ZWREQlRlbXBGaWxlU2l6ZS0y
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiSW5kZXhlZERCVGVtcEZpbGVTaXpl
LTIuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBNUI5NEQ2MjE5MTAwNUIw
MDU5RkUzOCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBJbmRleGVkREJUZW1wRmlsZVNpemUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEMEJEMEE1MUY3OTkyMjAwMDFBQjJDRiAvKiBDb250ZXh0TWVu
dUltZ1dpdGhWaWRlby5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNZW51SW1nV2l0
aFZpZGVvLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDBCRDBBNzFGNzk5N0My
MDAxQUIyQ0YgLyogQ29udGV4dE1lbnVJbWdXaXRoVmlkZW8uaHRtbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IENvbnRl
eHRNZW51SW1nV2l0aFZpZGVvLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
MjI1QzA3MUM0NUE2OTIwMDE0MDc2MSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNzgsNiArMjM4Niw3IEBACiAJCQkJNTFCQ0VF
NDkxQzg0RjRBRjAwNDJDODJFIC8qIEluZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSAqLywKIAkJCQk1
MUIxRUU4RDFDODBGNTg4MDA2NEZCOTggLyogSW5kZXhlZERCUGVyc2lzdGVuY2UubW0gKi8sCiAJ
CQkJNTc1OTlFMjAxRjA3MTkxNzAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJh
Y2t3YXJkQ29tcGF0aWJpbGl0eS5tbSAqLywKKwkJCQlDQTVCOTRENjIxOTEwMDVCMDA1OUZFMzgg
LyogSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tICovLAogCQkJCTBFNDA0QThBMjE2NkRERjgwMDgy
NzFCQSAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGVJc1NlbGVjdEVsZW1lbnQubW0gKi8sCiAJ
CQkJNzlDNUQ0MzAyMDlENzY4MzAwRjFFN0NBIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZUlz
VGV4dEZpZWxkLm1tICovLAogCQkJCTJEQjAyMzJFMUU0RTg3MTgwMDcwNzEyMyAvKiBJbnRlcmFj
dGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbSAqLywKQEAgLTI3NDEsNiArMjc1MCw4IEBACiAJCQkJ
NTcxRjdGQ0YxRjI5NjFFMTAwOTQ2NjQ4IC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3
YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXdhbCAqLywKIAkJCQk1NzU5OUUyNTFGMDcxOTJDMDBB
M0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5UmVh
ZC5odG1sICovLAogCQkJCTU3NTk5RTIzMUYwNzE5MkMwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1
Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlXcml0ZS5odG1sICovLAorCQkJCUNBNUI5
NEQwMjE5MEMwRTAwMDU5RkUzOCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUtMS5odG1sICovLAor
CQkJCUNBNUI5NEQxMjE5MEMwRTAwMDU5RkUzOCAvKiBJbmRleGVkREJUZW1wRmlsZVNpemUtMi5o
dG1sICovLAogCQkJCTUxMTBGQ0YyMUUwMUNENzcwMDZGOEQwQiAvKiBJbmRleFVwZ3JhZGUuYmxv
YiAqLywKIAkJCQk1MTEwRkNGMzFFMDFDRDc3MDA2RjhEMEIgLyogSW5kZXhVcGdyYWRlLnNxbGl0
ZTMgKi8sCiAJCQkJMkVGRjA2Q0MxRDhBNDI5MTAwMDRCQjMwIC8qIGlucHV0LWZpZWxkLWluLXNj
cm9sbGFibGUtZG9jdW1lbnQuaHRtbCAqLywKQEAgLTM4NzUsNiArMzg4Niw3IEBACiAJCQkJN0M4
M0UwQkUxRDBBNjUxMzAwRkVCQ0YzIC8qIEluZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNFMEJGMUQwQTY1MjIwMEZFQkNGMyAvKiBJbmRleGVkREJQZXJzaXN0
ZW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU3NTk5RTIxMUYwNzE5MTkwMEEzRkI4QyAvKiBJ
bmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkubW0gaW4gU291cmNl
cyAqLywKKwkJCQlDQTVCOTRENzIxOTEwMDVCMDA1OUZFMzggLyogSW5kZXhlZERCVGVtcEZpbGVT
aXplLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E5NUJERTExRTlCRUM1RjAwODY1NDk4IC8qIElu
amVjdGVkQnVuZGxlQXBwbGVFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VGQjFB
NDExQUU2MDA0NDdDNEMgLyogSW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4MzE0OEIwNjIwMkFDNkE0MDBCQURFOTkgLyogSW5qZWN0ZWRCdW5kbGVEaXNhYmxlT3Zl
cnJpZGVCdWlsdGluc0JlaGF2aW9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUt
MS5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJU
ZW1wRmlsZVNpemUtMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlMTIzNjVlYzVkMTBhYzE4YjhhOTg5MjA4
NWVjZTM5OGM4NjhmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS0xLmh0bWwKQEAgLTAsMCArMSwy
NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0PgorCit2YXIgb3BlblJlcXVlc3QgPSB3aW5k
b3cuaW5kZXhlZERCLm9wZW4oIkluZGV4ZWREQlRlbXBGaWxlU2l6ZSIpOworb3BlblJlcXVlc3Qu
b251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1l
c3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnVXBncmFkZU5lZWRlZCcpOwor
CisgICAgZXZlbnQudGFyZ2V0LnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0
b3JlIik7Cit9IAorCitvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgewor
ICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdl
KCdTdWNjZXNzJyk7CisgICAgdmFyIHRyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0LnJlc3VsdC50
cmFuc2FjdGlvbihbIlRlc3RPYmplY3RTdG9yZSJdLCAicmVhZHdyaXRlIik7CisgICAgdmFyIG9i
amVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9yZSIpOwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgb2JqZWN0U3RvcmUu
YWRkKGksIGkpOworICAgIH0KK30KKworb3BlblJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9z
dE1lc3NhZ2UoJ0Vycm9yJyk7Cit9CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCVGVtcEZpbGVTaXplLTIuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLTIuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzY5
OGVhODZkODIzZGZhY2RmOWU3ZDA5MDI4OThlMzQyZTgyMjk5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNp
emUtMi5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPHNjcmlwdD4KKwor
dmFyIG9wZW5SZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJJbmRleGVkREJUZW1wRmls
ZVNpemUiKTsKKworb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgn
U3VjY2VzcycpOworfQorCitvcGVuUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2Fn
ZSgnRXJyb3InKTsKK30KKworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzEyOGMyMzg2NjdlMjZhMWNj
ODQ4ZmJlZWQ3MjA4MjVmMTkzYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KQEAgLTAsMCAr
MSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KKyNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisK
KyNpZiBXS19BUElfRU5BQkxFRAorCitzdGF0aWMgYm9vbCByZWFkeVRvQ29udGludWU7CitzdGF0
aWMgYm9vbCByZWNlaXZlZFNjcmlwdE1lc3NhZ2U7CitzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0
TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CisKK0BpbnRlcmZhY2UgSW5kZXhlZERCRmlsZVNp
emVNZXNzYWdlSGFuZGxlciA6IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gSW5kZXhlZERCRmlsZVNpemVNZXNzYWdlSGFuZGxlcgorCist
ICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKil1
c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6KFdLU2NyaXB0TWVz
c2FnZSAqKW1lc3NhZ2UKK3sKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSB0cnVlOworICAg
IGxhc3RTY3JpcHRNZXNzYWdlID0gbWVzc2FnZTsKK30KKworQGVuZAorCitURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQoreworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMo
W1tJbmRleGVkREJGaWxlU2l6ZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRT
Y3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwor
CisgICAgUmV0YWluUHRyPE5TVVJMPiBpZGJQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpb
QCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkvQ3VzdG9tV2Vic2l0ZURhdGEvSW5kZXhl
ZERCLyIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6WUVTXTsKKyAg
ICBSZXRhaW5QdHI8TlNVUkw+IHdhbEZpbGVQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpb
QCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkvQ3VzdG9tV2Vic2l0ZURhdGEvSW5kZXhl
ZERCL2ZpbGVfXzAvSW5kZXhlZERCVGVtcEZpbGVTaXplL0luZGV4ZWREQi5zcWxpdGUzLXdhbCIg
c3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6Tk9dOworCisgICAgYXV0
byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIHdlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uLmdldCgpLl9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSA9IGlkYlBhdGgu
Z2V0KCk7CisKKyAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBbW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHR5cGVz
ID0gYWRvcHROUyhbW05TU2V0IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5
cGVJbmRleGVkREJEYXRhYmFzZXMsIG5pbF0pOworCisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczp0eXBlcy5nZXQoKSBtb2RpZmllZFNp
bmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CisgICAgICAg
IHJlYWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07CisgICAgcmVhZHlUb0NvbnRpbnVlID0g
ZmFsc2U7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOwor
CisgICAgLy8gRG8gc29tZSBJbmRleGVkREIgb3BlcmF0aW9ucyB0byBnZW5lcmF0ZSBXQUwgZmls
ZS4KKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOworICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS0xIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
cmVxdWVzdF07CisKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBzdHJpbmcxID0gKE5TU3RyaW5nICopW2xhc3RTY3JpcHRNZXNzYWdlIGJv
ZHldOworCisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgIFJldGFpblB0cjxO
U1N0cmluZz4gc3RyaW5nMiA9IChOU1N0cmluZyAqKVtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XTsK
KworICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24gZGlzay4K
KyAgICB3ZWJWaWV3ID0gbmlsOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCku
cGF0aF0pOworICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZp
bGVQYXRoLmdldCgpLnBhdGggZXJyb3I6bmlsXTsKKyAgICBOU051bWJlciAqZmlsZVNpemVCZWZv
cmUgPSBbZmlsZUF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRmlsZVNpemVdOworCisgICAgLy8g
T3BlbiB0aGUgc2FtZSBkYXRhYmFzZSBhZ2Fpbi4KKyAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICByZXF1ZXN0ID0gW05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAiSW5kZXhlZERCVGVtcEZpbGVTaXplLTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpyZXF1ZXN0XTsKKworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmluZzMgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1l
c3NhZ2UgYm9keV07CisKKyAgICBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRo
IGVycm9yOm5pbF07CisgICAgTlNOdW1iZXIgKmZpbGVTaXplQWZ0ZXIgPSBbZmlsZUF0dHJpYnV0
ZXMgb2JqZWN0Rm9yS2V5Ok5TRmlsZVNpemVdOworICAgIEVYUEVDVF9HVChbZmlsZVNpemVCZWZv
cmUgbG9uZ0xvbmdWYWx1ZV0sIFtmaWxlU2l6ZUFmdGVyIGxvbmdMb25nVmFsdWVdKTsKKworICAg
IEVYUEVDVF9XS19TVFJFUShAIlVwZ3JhZGVOZWVkZWQiLCBzdHJpbmcxLmdldCgpKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoQCJTdWNjZXNzIiwgc3RyaW5nMi5nZXQoKSk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKEAiU3VjY2VzcyIsIHN0cmluZzMuZ2V0KCkpOyAKK30KKworI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>