<?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>49332</bug_id>
          
          <creation_ts>2010-11-10 11:12:53 -0800</creation_ts>
          <short_desc>Do not allow access to existing HTML5 databases in private browsing mode</short_desc>
          <delta_ts>2010-12-14 19:02:21 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Anton D&apos;Auria">adauria</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adauria</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jberlin</cc>
    
    <cc>joepeck</cc>
    
    <cc>kdecker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>307448</commentid>
    <comment_count>0</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2010-11-10 11:12:53 -0800</bug_when>
    <thetext>WebKit shouldn&apos;t allow access to existing HTML5 databases when in private browsing mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307451</commentid>
    <comment_count>1</comment_count>
      <attachid>73515</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2010-11-10 11:14:28 -0800</bug_when>
    <thetext>Created attachment 73515
[PATCH] Denies read access to databases in private browsing mode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307643</commentid>
    <comment_count>2</comment_count>
      <attachid>73515</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-10 17:05:02 -0800</bug_when>
    <thetext>Comment on attachment 73515
[PATCH] Denies read access to databases in private browsing mode

Patch looks good, but it’s missing a change log entry.

review- because of lack of ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307652</commentid>
    <comment_count>3</comment_count>
      <attachid>73560</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2010-11-10 17:29:01 -0800</bug_when>
    <thetext>Created attachment 73560
[PATCH] Denies read access to databases in private browsing mode (with ChangeLog)

Patch now includes ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307667</commentid>
    <comment_count>4</comment_count>
      <attachid>73560</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-10 18:04:19 -0800</bug_when>
    <thetext>Comment on attachment 73560
[PATCH] Denies read access to databases in private browsing mode (with ChangeLog)

Rejecting patch 73560 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sl&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
...
fast/tokenizer ........................................
fast/transforms .......................
fast/url ....................
fast/workers .............................................
fast/workers/storage ....................
fast/workers/storage/read-and-write-transactions-dont-run-together.html -&gt; failed

Exiting early after 1 failures. 16196 tests run.
274.85s total testing time

16195 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
4 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/5610009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318338</commentid>
    <comment_count>5</comment_count>
      <attachid>75831</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2010-12-07 11:18:32 -0800</bug_when>
    <thetext>Created attachment 75831
[PATCH] separate read-only transaction state from private browsing no read-write state

Previously, read-only transactions and private browsing mode were represented by the same SQLStatement and DatabaseAuthorizer states. This patch removes the m_readOnly member variable from SQLStatement and DatabaseAuthorizer, and replaces it with m_permissions whose bit fields are initialized by a DatabaseAuthorizer enum Permissions (ReadWrite, ReadOnly, NoAccess). A read-only transaction sets permissions to ReadOnly, and if !m_database-&gt;scriptExecutionContext()-&gt;allowDatabaseAccess(), then permissions also set to NoAccess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318615</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:44:19 -0800</bug_when>
    <thetext>Attachment 75831 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319767</commentid>
    <comment_count>7</comment_count>
      <attachid>76132</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2010-12-09 16:17:09 -0800</bug_when>
    <thetext>Created attachment 76132
[PATCH] separate read-only transaction state from private browsing no read-write state (renamed mask variables)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319774</commentid>
    <comment_count>8</comment_count>
      <attachid>76135</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2010-12-09 16:23:25 -0800</bug_when>
    <thetext>Created attachment 76135
[PATCH] separate read-only transaction state from private browsing no read-write state (fixed ChangeLog conflict)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321750</commentid>
    <comment_count>9</comment_count>
      <attachid>73560</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 01:24:28 -0800</bug_when>
    <thetext>Comment on attachment 73560
[PATCH] Denies read access to databases in private browsing mode (with ChangeLog)

Cleared Darin Adler&apos;s review+ from obsolete attachment 73560 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322409</commentid>
    <comment_count>10</comment_count>
      <attachid>76135</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-14 18:04:26 -0800</bug_when>
    <thetext>Comment on attachment 76135
[PATCH] separate read-only transaction state from private browsing no read-write state (fixed ChangeLog conflict)

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

r=me, but the enum/bit combo is a bit ugly, the bitifield use here is sloppy and there is some incorrectly formatted code

&gt; WebCore/storage/DatabaseAuthorizer.h:97
&gt; +    void setPermissions(int permissions);

It doesn’t seem right to use int for permissions, but use an enum for the values. I think we normally have a better idiom for this sort of thing.

&gt; WebCore/storage/DatabaseAuthorizer.h:114
&gt; +    int m_permissions;
&gt;      bool m_securityEnabled : 1;

All these bools are set to be a single bit to save memory, I suppose, and then the three bit permissions is taking up an entire 32-bit int! I think the use of bitfields on the bools is excessive. You could use a bitfield for permissions, but because we are using a signed type, int, we’d need to use four bits. It would be better to use unsigned and three bits. Or not use bitfields at all in this class.

&gt; WebCore/storage/SQLTransactionSync.cpp:94
&gt; +    if (!m_database-&gt;scriptExecutionContext()-&gt;allowDatabaseAccess())
&gt; +      permissions |= DatabaseAuthorizer::NoAccessMask;
&gt; +    else if (m_readOnly)
&gt; +      permissions |= DatabaseAuthorizer::ReadOnlyMask;

This is not indented correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322437</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-14 18:59:45 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 76135:

inspector/styles-new-API.html bug 50889 (authors: apavlov@chromium.org and pfeldman@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322439</commentid>
    <comment_count>12</comment_count>
      <attachid>76135</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-14 19:02:14 -0800</bug_when>
    <thetext>Comment on attachment 76135
[PATCH] separate read-only transaction state from private browsing no read-write state (fixed ChangeLog conflict)

Clearing flags on attachment: 76135

Committed r74093: &lt;http://trac.webkit.org/changeset/74093&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322440</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-14 19:02:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73515</attachid>
            <date>2010-11-10 11:14:28 -0800</date>
            <delta_ts>2010-11-10 17:29:01 -0800</delta_ts>
            <desc>[PATCH] Denies read access to databases in private browsing mode</desc>
            <filename>private_browsing_db.patch</filename>
            <type>text/plain</type>
            <size>479</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGIvV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKaW5kZXggNmI2YjE0Ny4uZmE5MjI3
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKQEAgLTMyMiw2ICszMjIs
OSBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1RyYW5zYWN0aW9uKCkKIAogaW50IERh
dGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWFkKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25z
dCBTdHJpbmcmKQogeworICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQor
ICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKIH0KIAo=
</data>
<flag name="review"
          id="63956"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="63957"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73560</attachid>
            <date>2010-11-10 17:29:01 -0800</date>
            <delta_ts>2010-12-14 01:24:28 -0800</delta_ts>
            <desc>[PATCH] Denies read access to databases in private browsing mode (with ChangeLog)</desc>
            <filename>private_html5db_ChangeLog.diff</filename>
            <type>text/plain</type>
            <size>1035</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWQwMjVlNS4uNmE1Mjk3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMS0xMCAgQW50b24gRCdBdXJp
YSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgRGVueSByZWFkIGFjY2VzcyB0byBkYXRhYmFzZXMgaW4g
cHJpdmF0ZSBicm93c2luZyBtb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDkzMzIKKworICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3Jp
emVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWFk
KToKKwogMjAxMC0xMS0xMCAgUGFzY2FsIE1hc3NpbWlubyAgPHBhc2NhbC5tYXNzaW1pbm9AZ21h
aWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZUF1dGhvcml6ZXIuY3BwCmluZGV4IGUyODdkZWUuLjMzMzRkMzkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCisrKyBiL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCkBAIC0zNDQsNiArMzQ0LDkgQEAgaW50IERhdGFi
YXNlQXV0aG9yaXplcjo6YWxsb3dUcmFuc2FjdGlvbigpCiAKIGludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmFsbG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJikKIHsK
KyAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFt
ZSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75831</attachid>
            <date>2010-12-07 11:18:32 -0800</date>
            <delta_ts>2010-12-09 16:17:09 -0800</delta_ts>
            <desc>[PATCH] separate read-only transaction state from private browsing no read-write state</desc>
            <filename>private_noaccess_db.patch</filename>
            <type>text/plain</type>
            <size>29633</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lvbiA3MzQ1
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBACiB7CiAgICAgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0ID0gZmFs
c2U7CiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gZmFsc2U7Ci0gICAgbV9yZWFk
T25seSA9IGZhbHNlOworICAgIG1fcGVybWlzc2lvbnMgPSBSZWFkV3JpdGU7CiB9CiAKIHZvaWQg
RGF0YWJhc2VBdXRob3JpemVyOjpyZXNldERlbGV0ZXMoKQpAQCAtMTI3LDcgKzEyNyw3IEBACiAK
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlm
ICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2xh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAg
Ly8gU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHJlc3VsdHMgaW4gYSBVUERBVEUgb3BlcmF0aW9u
LCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKICAgICAvLyB3ZWxsIGRpc2FsbG93
IFNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwotICAgIGlmIChtX3JlYWRP
bmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUo
dGFibGVOYW1lKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVy
Ojpkcm9wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgaWYgKG1fcmVhZE9u
bHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAg
IHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRh
YmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgLy8gU1FMSVRFX0RS
T1BfVEVNUF9UQUJMRSByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90
CiAgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJv
d3NpbmcsIHNvIHdlIG1pZ2h0IGFzCiAgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9U
RU1QX1RBQkxFIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0
eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5h
bWUpOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93
QWx0ZXJUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAg
ICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3Jp
dGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hh
bmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCiBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICBp
ZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgbV9s
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAg
IC8vIFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBzaG91bGQgcmVzdWx0IGluIGEgVVBEQVRFIG9y
IElOU0VSVCBvcGVyYXRpb24sCiAgICAgLy8gd2hpY2ggaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1v
bmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLAogICAgIC8vIHNvIHdlIG1pZ2h0
IGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX0lOREVYIGluIHRoZXNlIGNhc2Vz
Ci0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxv
d1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBkZW55
QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAKIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkK
KyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAg
ICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CkBAIC0y
MDYsNyArMjA2LDcgQEAKICAgICAvLyBTUUxJVEVfRFJPUF9URU1QX0lOREVYIHNob3VsZCByZXN1
bHQgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3aGljaCBpcwogICAgIC8vIG5vdCBhbGxvd2VkIGlu
IHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQK
ICAgICAvLyBhcyB3ZWxsIGRpc2FsbG93IFNRTElURV9EUk9QX1RFTVBfSU5ERVggaW4gdGhlc2Ug
Y2FzZXMKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICBpZiAo
IWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJu
IHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CkBAIC0yMTQsNyArMjE0
LDcgQEAKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVHJpZ2dlcihjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBt
X3NlY3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsK
QEAgLTIyNiw3ICsyMjYsNyBAQAogICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHJl
c3VsdHMgaW4gYSBJTlNFUlQgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2Vk
IGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWln
aHQgYXMKICAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIGlu
IHRoZXNlIGNhc2VzCi0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisg
ICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAg
IHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMjM0LDcgKzIzNCw3
IEBACiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2Vj
dXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FM
QXV0aERlbnk7CiAKICAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFi
bGVOYW1lKTsKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVFJJ
R0dFUiByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CiAgICAgLy8g
YWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNv
IHdlIG1pZ2h0IGFzCiAgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1RSSUdH
RVIgaW4gdGhlc2UgY2FzZXMKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxl
ZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55Owog
CiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CkBA
IC0yNTMsNyArMjUzLDcgQEAKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyhj
b25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5h
YmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsKKyAgICByZXR1cm4gKCFhbGxvd1dy
aXRlKCkgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7CiB9CiAKIGludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCkBAIC0yNjEsMTIgKzI2MSwx
MiBAQAogICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9WSUVXIHJlc3VsdHMgaW4gYSBVUERBVEUg
b3BlcmF0aW9uLCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFu
c2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKICAgICAvLyB3ZWxs
IGRpc2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9WSUVXIGluIHRoZXNlIGNhc2VzCi0gICAgcmV0
dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxB
dXRoQWxsb3cpOworICAgIHJldHVybiAoIWFsbG93V3JpdGUoKSA/IFNRTEF1dGhEZW55IDogU1FM
QXV0aEFsbG93KTsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZpZXcoY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAg
ICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAg
bV9oYWREZWxldGVzID0gdHJ1ZTsKQEAgLTI3OCw3ICsyNzgsNyBAQAogICAgIC8vIFNRTElURV9E
Uk9QX1RFTVBfVklFVyByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90
CiAgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJv
d3NpbmcsIHNvIHdlIG1pZ2h0IGFzCiAgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9U
RU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5
RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhE
ZW55OwogCiAgICAgbV9oYWREZWxldGVzID0gdHJ1ZTsKQEAgLTI4Nyw3ICsyODcsNyBAQAogCiBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5h
bWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBt
X3NlY3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUgRlRTMyBleHRlbnNpb24KQEAg
LTMwMCw3ICszMDAsNyBAQAogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpCiB7Ci0gICAg
aWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRl
KCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9ubHkgdGhl
IEZUUzMgZXh0ZW5zaW9uCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6YWxsb3dEZWxldGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFz
ZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMzIwLDcgKzMyMCw3IEBACiAKIGludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewot
ICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dX
cml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2xhc3RBY3Rpb25D
aGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMzMwLDcgKzMzMCw3IEBACiAKIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmFsbG93VXBkYXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAg
IGlmICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBt
X2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMzQ0LDEyICszNDQsMTUgQEAK
IAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWFkKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lLCBjb25zdCBTdHJpbmcmKQogeworICAgIGlmIChtX3Blcm1pc3Npb25zICYgTm9BY2Nlc3Mg
JiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKyAgICAK
ICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAogaW50IERh
dGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWluZGV4KGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0
dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxB
dXRoQWxsb3cpOworICAgIHJldHVybiAoIWFsbG93V3JpdGUoKSA/IFNRTEF1dGhEZW55IDogU1FM
QXV0aEFsbG93KTsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBbmFseXplKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQpAQCAtMzkwLDEwICszOTMsMjAgQEAKICAgICBtX3NlY3Vy
aXR5RW5hYmxlZCA9IHRydWU7CiB9CiAKK2Jvb2wgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1dy
aXRlKCkKK3sKKyAgICByZXR1cm4gIShtX3NlY3VyaXR5RW5hYmxlZCAmJiAobV9wZXJtaXNzaW9u
cyAmIFJlYWRPbmx5IHx8IG1fcGVybWlzc2lvbnMgJiBOb0FjY2VzcykpOworfQorCiB2b2lkIERh
dGFiYXNlQXV0aG9yaXplcjo6c2V0UmVhZE9ubHkoKQogewotICAgIG1fcmVhZE9ubHkgPSB0cnVl
OworICAgIG1fcGVybWlzc2lvbnMgfD0gUmVhZE9ubHk7CiB9CisgICAKK3ZvaWQgRGF0YWJhc2VB
dXRob3JpemVyOjpzZXRQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpCit7CisgICAgbV9wZXJt
aXNzaW9ucyA9IHBlcm1pc3Npb25zOworfQogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55
QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkgY29uc3QKIHsKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNzM0NTEpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3
IEBACiAgICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOwogICAgIHZvaWQgZW5hYmxlQXV0aG9y
aXplcigpOwogICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisgICAgdm9pZCBzZXRB
dXRob3JpemVyUGVybWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKTsKICAgICBib29sIGxhc3RBY3Rp
b25DaGFuZ2VkRGF0YWJhc2UoKTsKICAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKICAg
ICB2b2lkIHJlc2V0RGVsZXRlcygpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAkocmV2aXNp
b24gNzM0NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogY2xhc3MgU1FMU3RhdGVtZW50IDogcHVibGljIFRocmVh
ZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FM
VmFsdWU+JiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjaz4sIGludCBwZXJtaXNzaW9ucyk7CiAKICAgICBib29sIGV4
ZWN1dGUoRGF0YWJhc2UqKTsKICAgICBib29sIGxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3Rh
KCkgY29uc3Q7CkBAIC02MSw3ICs2MSw3IEBACiAKICAgICBTUUxFcnJvciogc3FsRXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFNRTFN0YXRlbWVu
dChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrPiwgYm9vbCByZWFkT25seSk7CisgICAgU1FMU3RhdGVtZW50KGNv
bnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgdm9pZCBzZXRGYWlsdXJl
RHVlVG9RdW90YSgpOwogICAgIHZvaWQgY2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOwpAQCAtNzQs
NyArNzQsNyBAQAogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsKICAgICBSZWZQdHI8U1FM
UmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsKIAotICAgIGJvb2wgbV9yZWFkT25seTsKKyAgICBpbnQg
bV9wZXJtaXNzaW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNzM0NTEpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJE
YXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtOTMsMTMgKzk0
LDEzIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHJlYWRPbmx5TW9kZSA9
IG1fcmVhZE9ubHk7Ci0gICAgaWYgKCFyZWFkT25seU1vZGUpIHsKLSAgICAgICAgaWYgKG1fZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEYXRhYmFzZVJlYWRPbmx5KCkpCi0g
ICAgICAgICAgICByZWFkT25seU1vZGUgPSB0cnVlOwotICAgIH0KKyAgICBpbnQgcGVybWlzc2lv
bnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0ZTsKKyAgICBpZiAoIW1fZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAg
ICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzOworICAgIGVsc2Ug
aWYgKG1fcmVhZE9ubHkpCisgICAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXpl
cjo6UmVhZE9ubHk7CiAKLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxT
dGF0ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxi
YWNrRXJyb3IsIHJlYWRPbmx5TW9kZSk7CisgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVt
ZW50ID0gU1FMU3RhdGVtZW50OjpjcmVhdGUoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxi
YWNrLCBjYWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7CiAKICAgICBpZiAobV9kYXRhYmFzZS0+
ZGVsZXRlZCgpKQogICAgICAgICBzdGF0ZW1lbnQtPnNldERhdGFiYXNlRGVsZXRlZEVycm9yKCk7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA3MzQ1MSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTggKzQzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1FMU3RhdGVtZW50
U3luYzo6U1FMU3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVj
dG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBib29sIHJlYWRPbmx5KQorU1FMU3RhdGVtZW50U3lu
Yzo6U1FMU3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9y
PFNRTFZhbHVlPiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpCiAgICAgOiBtX3N0YXRlbWVu
dChzdGF0ZW1lbnQpCiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3JlYWRP
bmx5KHJlYWRPbmx5KQorICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykKIHsKICAgICBB
U1NFUlQoIW1fc3RhdGVtZW50LmlzRW1wdHkoKSk7CiB9CiAKIFBhc3NSZWZQdHI8U1FMUmVzdWx0
U2V0PiBTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKERhdGFiYXNlU3luYyogZGIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIGlmIChtX3JlYWRPbmx5KQotICAgICAgICBkYi0+c2V0QXV0aG9y
aXplclJlYWRPbmx5KCk7CisgICAgZGItPnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhtX3Blcm1p
c3Npb25zKTsKIAogICAgIFNRTGl0ZURhdGFiYXNlKiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0
YWJhc2UoKTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNp
b24gNzM0NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDEzIEBACiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplciA6
IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlQXV0aG9yaXplcj4gewogcHVibGljOgor
CisgICAgZW51bSBQZXJtaXNzaW9ucyB7CisgICAgICAgIFJlYWRXcml0ZSA9IDAsCisgICAgICAg
IFJlYWRPbmx5ID0gMSA8PCAxLAorICAgICAgICBOb0FjY2VzcyA9IDEgPDwgMgorICAgIH07CisK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQgY3JlYXRlVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpOwpAQCAtODcsNiArOTQsNyBAQAogICAgIHZvaWQgZGlzYWJs
ZSgpOwogICAgIHZvaWQgZW5hYmxlKCk7CiAgICAgdm9pZCBzZXRSZWFkT25seSgpOworICAgIHZv
aWQgc2V0UGVybWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKTsKIAogICAgIHZvaWQgcmVzZXQoKTsK
ICAgICB2b2lkIHJlc2V0RGVsZXRlcygpOwpAQCAtMTAwLDExICsxMDgsMTIgQEAKICAgICB2b2lk
IGFkZFdoaXRlbGlzdGVkRnVuY3Rpb25zKCk7CiAgICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1l
KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIGludCB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxl
TmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGFsbG93V3JpdGUoKTsKIAorICAgIGludCBt
X3Blcm1pc3Npb25zOwogICAgIGJvb2wgbV9zZWN1cml0eUVuYWJsZWQgOiAxOwogICAgIGJvb2wg
bV9sYXN0QWN0aW9uV2FzSW5zZXJ0IDogMTsKICAgICBib29sIG1fbGFzdEFjdGlvbkNoYW5nZWRE
YXRhYmFzZSA6IDE7Ci0gICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKICAgICBib29sIG1faGFkRGVs
ZXRlcyA6IDE7CiAKICAgICBjb25zdCBTdHJpbmcgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWU7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA3MzQ1MSkKKysr
IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMyLDYgKzQzMiwxMiBAQAogICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgp
OwogfQogCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhp
bnQgcGVybWlzc2lvbnMpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnMpOworfQor
CiBib29sIEFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQogewog
ICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25TeW5jLmNwcAkocmV2aXNpb24gNzM0NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKQEAgLTg2LDkgKzg3LDE0IEBACiAgICAgaWYgKHNx
bFN0YXRlbWVudC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgYm9vbCByZWFk
T25seU1vZGUgPSBtX3JlYWRPbmx5IHx8IG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNEYXRhYmFzZVJlYWRPbmx5KCk7Ci0gICAgU1FMU3RhdGVtZW50U3luYyBzdGF0ZW1l
bnQoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIHJlYWRPbmx5TW9kZSk7CisgICAgaW50IHBlcm1p
c3Npb25zID0gRGF0YWJhc2VBdXRob3JpemVyOjpSZWFkV3JpdGU7CisgICAgaWYgKCFtX2RhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFsbG93RGF0YWJhc2VBY2Nlc3MoKSkKKyAg
ICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6Tm9BY2Nlc3M7CisgICAgZWxz
ZSBpZiAobV9yZWFkT25seSkKKyAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXpl
cjo6UmVhZE9ubHk7CiAKKyAgICBTUUxTdGF0ZW1lbnRTeW5jIHN0YXRlbWVudChzcWxTdGF0ZW1l
bnQsIGFyZ3VtZW50cywgcGVybWlzc2lvbnMpOworCiAgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRo
b3JpemVyKCk7CiAgICAgYm9vbCByZXRyeVN0YXRlbWVudCA9IHRydWU7CiAgICAgUmVmUHRyPFNR
TFJlc3VsdFNldD4gcmVzdWx0U2V0OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJl
dmlzaW9uIDczNDUxKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE3ICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQorUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnQ+IFNRTFN0YXRlbWVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50
LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNRTFN0YXRlbWVudChzdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHJlYWRPbmx5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1l
bnQoc3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNz
aW9ucykpOwogfQogCi1TUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0
YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQorU1FMU3RhdGVtZW50OjpT
UUxTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1
ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ss
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50
IHBlcm1pc3Npb25zKQogICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNyb3NzVGhyZWFkU3Ry
aW5nKCkpCiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCiAgICAgLCBtX3N0YXRlbWVudENh
bGxiYWNrKGNhbGxiYWNrKQogICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGVycm9yQ2Fs
bGJhY2spCi0gICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQorICAgICwgbV9wZXJtaXNzaW9ucyhw
ZXJtaXNzaW9ucykKIHsKIH0KIApAQCAtNjksOCArNjksNyBAQAogICAgIGlmIChtX2Vycm9yKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9yZWFkT25seSkKLSAgICAgICAgZGIt
PnNldEF1dGhvcml6ZXJSZWFkT25seSgpOworICAgIGRiLT5zZXRBdXRob3JpemVyUGVybWlzc2lv
bnMobV9wZXJtaXNzaW9ucyk7CiAKICAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJhc2UgPSAmZGIt
PnNxbGl0ZURhdGFiYXNlKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRT
eW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAko
cmV2aXNpb24gNzM0NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxNCArNDYsMTQgQEAKIAogY2xhc3MgU1FMU3RhdGVtZW50U3lu
YyB7CiBwdWJsaWM6Ci0gICAgU1FMU3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVu
dCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBib29sIHJlYWRPbmx5KTsKKyAg
ICBTUUxTdGF0ZW1lbnRTeW5jKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8
U1FMVmFsdWU+JiBhcmd1bWVudHMsIGludCBwZXJtaXNzaW9ucyk7CiAKICAgICBQYXNzUmVmUHRy
PFNRTFJlc3VsdFNldD4gZXhlY3V0ZShEYXRhYmFzZVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CiAK
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3RhdGVtZW50OwogICAgIFZlY3RvcjxTUUxWYWx1ZT4g
bV9hcmd1bWVudHM7Ci0gICAgYm9vbCBtX3JlYWRPbmx5OworICAgIGludCBtX3Blcm1pc3Npb25z
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA3MzQ1
MSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDQsNyAr
MTAwNCw3IEBACiAgICAgYm9vbCBwcm9jZXNzaW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9jZXNzaW5nTG9hZEV2ZW50OyB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgdmly
dHVhbCBib29sIGlzRGF0YWJhc2VSZWFkT25seSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBh
bGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhj
ZWVkZWRRdW90YShjb25zdCBTdHJpbmcmIG5hbWUpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDczNDUxKQorKysgV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBA
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dvcmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNE
YXRhYmFzZVJlYWRPbmx5KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dE
YXRhYmFzZUFjY2VzcygpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNl
RXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICAgRGF0YWJhc2VU
aHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CiAgICAgICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNl
cygpIHsgbV9oYXNPcGVuRGF0YWJhc2VzID0gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gNzM0NTEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0OTYsMTEgKzQ0OTYsMTEgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotYm9vbCBEb2N1
bWVudDo6aXNEYXRhYmFzZVJlYWRPbmx5KCkgY29uc3QKK2Jvb2wgRG9jdW1lbnQ6OmFsbG93RGF0
YWJhc2VBY2Nlc3MoKSBjb25zdAogewogICAgIGlmICghcGFnZSgpIHx8IHBhZ2UoKS0+c2V0dGlu
Z3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBEb2N1bWVudDo6ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYg
bmFtZSkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MzQ1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTAtMTItMDYgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlh
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBEbyBub3QgYWxsb3cgYWNjZXNzIHRvIGV4aXN0aW5nIEhUTUw1IGRhdGFiYXNlcyBpbiBw
cml2YXRlIGJyb3dzaW5nCisgICAgICAgIG1vZGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MzMyCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9wcml2YXRlLWJyb3dz
aW5nLW5vcmVhZC1ub3dyaXRlLmh0bWwKKworICAgICAgICBQcmV2aW91c2x5LCByZWFkLW9ubHkg
dHJhbnNhY3Rpb25zIGFuZCBwcml2YXRlIGJyb3dzaW5nIG1vZGUgd2VyZQorICAgICAgICByZXBy
ZXNlbnRlZCBieSB0aGUgc2FtZSBTUUxTdGF0ZW1lbnQgYW5kIERhdGFiYXNlQXV0aG9yaXplciBz
dGF0ZXMuCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgbV9yZWFkT25seSBtZW1iZXIg
dmFyaWFibGUgZnJvbSBTUUxTdGF0ZW1lbnQgYW5kCisgICAgICAgIERhdGFiYXNlQXV0aG9yaXpl
ciwgYW5kIHJlcGxhY2VzIGl0IHdpdGggbV9wZXJtaXNzaW9ucyB3aG9zZSBiaXQgZmllbGRzCisg
ICAgICAgIGFyZSBpbml0aWFsaXplZCBieSBhIERhdGFiYXNlQXV0aG9yaXplciBlbnVtIFBlcm1p
c3Npb25zIChSZWFkV3JpdGUsCisgICAgICAgIFJlYWRPbmx5LCBOb0FjY2VzcykuCisKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFsbG93
RGF0YWJhc2VBY2Nlc3MpOiB0aGlzIG1ldGhvZCB3YXMgcHJldmlvdXNseQorICAgICAgICBjYWxs
ZWQgaXNEYXRhYmFzZVJlYWRPbmx5LiBJdCBjaGVja3MgaWYgcHJpdmF0ZSBicm93c2luZyBwcmVm
ZXJlbmNlIGlzCisgICAgICAgIHNldC4gVGhpcyBtZXRob2QgaXMgcmVuYW1lZCBiZWNhdXNlIGl0
IGlzIHVzZWQgdG8gY2hlY2sgaWYgcHJpdmF0ZQorICAgICAgICBicm93c2luZyByZXN0cmljdHMg
YWNjZXNzIHRvIGRhdGFiYXNlcy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRB
dXRob3JpemVyUGVybWlzc2lvbnMpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFz
ZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1
dGhvcml6ZXI6OmRyb3BUZW1wVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRo
b3JpemVyOjphbGxvd0FsdGVyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRo
b3JpemVyOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZVRlbXBJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6
ZXI6OmRyb3BJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRy
b3BUZW1wSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVh
dGVUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRl
VGVtcFRyaWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9w
VHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1w
VHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZp
ZXcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmll
dyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VBdXRob3JpemVyOjphbGxvd1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUF1dGhvcml6ZXI6OmFsbG93UmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmFsbG93UmVpbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6
ZXI6OmFsbG93V3JpdGUpOiBhIG5ldyBwcml2YXRlIG1ldGhvZCB0aGF0CisgICAgICAgIGNoZWNr
cyBpZiBEYXRhYmFzZUF1dGhvcml6ZXIgaXMgZW5hYmxlZCBhbmQgaWYgaXQgaXMgaW4gUmVhZE9u
bHkgb3IKKyAgICAgICAgTm9BY2Nlc3MgbW9kZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
QXV0aG9yaXplcjo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRo
b3JpemVyOjpzZXRQZXJtaXNzaW9ucyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhv
cml6ZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0
ZW1lbnQ6OlNRTFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmV4
ZWN1dGUpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6CisgICAgICAgICogc3Rv
cmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVu
dFN5bmM6OlNRTFN0YXRlbWVudFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50
U3luYzo6ZXhlY3V0ZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmg6Cisg
ICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVj
dXRlU1FMKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MpOgorCiAyMDEwLTEyLTA3
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IFY4
IGJ1aWxkLgpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCShyZXZpc2lvbiA3MzQ1MSkKKysr
IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3
ICsxMTMsNyBAQAogICAgICAgICBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNl
U3luYyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKIAog
ICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNE
YXRhYmFzZVJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVh
bCBib29sIGFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
ICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBmb3IgcmVhbCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKSW5kZXg6IExh
eW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3JlYWQt
bm93cml0ZS5odG1sCShyZXZpc2lvbiA3MzMxOSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcHJp
dmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw3
ICsxNiw4IEBACiAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFByaXZhdGVUZXN0MiAo
cmFuZG9tRGF0YSkiLAogICAgICJERUxFVEUgRlJPTSBQcml2YXRlVGVzdDEiLAogICAgICJEUk9Q
IFRBQkxFIFByaXZhdGVUZXN0MSIsCi0gICAgIklOU0VSVCBJTlRPIFByaXZhdGVUZXN0MSBWQUxV
RVMgKCdzb21lZGF0YScpIgorICAgICJJTlNFUlQgSU5UTyBQcml2YXRlVGVzdDEgVkFMVUVTICgn
c29tZWRhdGEnKSIsCisgICAgIlNFTEVDVCAqIEZST00gUHJpdmF0ZVRlc3QxIgogXTsKIAogdmFy
IGNvbXBsZXRlZCA9IDA7CkBAIC04OCw3ICs4OSw3IEBACiAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICB9CiAKLSAgICB2YXIgZGF0YWJhc2UgPSBvcGVu
RGF0YWJhc2UoIlByaXZhdGVCcm93c2luZ1JlYWRPbmx5VGVzdCIsICIxLjAiLCAiVGVzdCBwcml2
YXRlIGJyb3dzaW5nIHJlYWQtb25seSBzYWZldHkiLCAxKTsKKyAgICB2YXIgZGF0YWJhc2UgPSBv
cGVuRGF0YWJhc2UoIlByaXZhdGVCcm93c2luZ05vUmVhZE5vV3JpdGVUZXN0IiwgIjEuMCIsICJU
ZXN0IHByaXZhdGUgYnJvd3Npbmcgbm8gcmVhZC93cml0ZSBzYWZldHkiLCAxKTsKICAgICBkYXRh
YmFzZS50cmFuc2FjdGlvbihydW5TZXR1cCwgZW5kVGVzdCwgZW5kVGVzdCk7CiB9CiAKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1yZWFkb25seS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJl
YWRvbmx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzM0NTEpCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL3ByaXZhdGUtYnJvd3NpbmctcmVhZG9ubHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEzICswLDAgQEAKLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgYXR0ZW1wdHMgdG8g
Y2hhbmdlIHRoZSBkYXRhYmFzZSBkdXJpbmcgcHJpdmF0ZSBicm93c2luZyBmYWlsLgotU2V0dXAg
c3RhdGVtZW50IDEgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotU2V0dXAgc3RhdGVtZW50IDIgY29t
cGxldGVkIHN1Y2Nlc3NmdWxseQotUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgMSBjb21wbGV0
ZWQgd2l0aCBhbiBlcnJvcgotbm90IGF1dGhvcml6ZWQKLVByaXZhdGUgYnJvd3Npbmcgc3RhdGVt
ZW50IDIgY29tcGxldGVkIHdpdGggYW4gZXJyb3IKLW5vdCBhdXRob3JpemVkCi1Qcml2YXRlIGJy
b3dzaW5nIHN0YXRlbWVudCAzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCi1ub3QgYXV0aG9yaXpl
ZAotUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgNCBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvcgot
bm90IGF1dGhvcml6ZWQKLVRlc3QgZW5kZWQKLQpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9w
cml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
c3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5Lmh0bWwJKHJldmlzaW9uIDczNDUxKQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0Pgot
Ci1mdW5jdGlvbiB3cml0ZU1lc3NhZ2VUb0xvZyhtZXNzYWdlKQotewotICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOwotfQot
Ci12YXIgc2V0dXBTdGF0ZW1lbnRzID0gWwotICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU
UyBQcml2YXRlVGVzdDEgKHJhbmRvbURhdGEpIiwKLSAgICAiSU5TRVJUIElOVE8gUHJpdmF0ZVRl
c3QxIFZBTFVFUyAoJ3NvbWVkYXRhJykiCi1dOwotCi12YXIgcHJpdmF0ZUJyb3dzaW5nU3RhdGVt
ZW50cyA9IFsKLSAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgUHJpdmF0ZVRlc3QyIChy
YW5kb21EYXRhKSIsCi0gICAgIkRFTEVURSBGUk9NIFByaXZhdGVUZXN0MSIsCi0gICAgIkRST1Ag
VEFCTEUgUHJpdmF0ZVRlc3QxIiwKLSAgICAiSU5TRVJUIElOVE8gUHJpdmF0ZVRlc3QxIFZBTFVF
UyAoJ3NvbWVkYXRhJykiCi1dOwotCi12YXIgY29tcGxldGVkID0gMDsKLXZhciB0aGVUcmFuc2Fj
dGlvbjsKLQotZnVuY3Rpb24gc2V0dXBTdWNjZXNzRnVuY3Rpb24odHgsIHJlc3VsdCkKLXsKLSAg
ICArK2NvbXBsZXRlZDsKLSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiU2V0dXAgc3RhdGVtZW50ICIg
KyBjb21wbGV0ZWQgKyAiIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsKLSAgICBjaGVja1NldHVw
Q29tcGxldGUoKTsKLX0KLQotZnVuY3Rpb24gc2V0dXBFcnJvckZ1bmN0aW9uKHR4LCBlcnJvcikK
LXsKLSAgICArK2NvbXBsZXRlZDsKLSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiU2V0dXAgc3RhdGVt
ZW50ICIgKyBjb21wbGV0ZWQgKyAiIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yXG4iICsgZXJyb3Iu
bWVzc2FnZSk7Ci0gICAgY2hlY2tTZXR1cENvbXBsZXRlKCk7Ci19Ci0KLWZ1bmN0aW9uIHByaXZh
dGVCcm93c2luZ1N1Y2Nlc3NGdW5jdGlvbih0eCwgcmVzdWx0KQotewotICAgICsrY29tcGxldGVk
OwotICAgIHdyaXRlTWVzc2FnZVRvTG9nKCJQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAiICsg
Y29tcGxldGVkICsgIiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Iik7Ci19Ci0KLWZ1bmN0aW9uIHBy
aXZhdGVCcm93c2luZ0Vycm9yRnVuY3Rpb24odHgsIGVycm9yKQotewotICAgICsrY29tcGxldGVk
OwotICAgIHdyaXRlTWVzc2FnZVRvTG9nKCJQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAiICsg
Y29tcGxldGVkICsgIiBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvclxuIiArIGVycm9yLm1lc3NhZ2Up
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gcnVuU2V0dXAodHJhbnNhY3Rpb24p
Ci17Ci0gICAgdGhlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICBmb3IgKGkgaW4gc2V0
dXBTdGF0ZW1lbnRzKQotICAgICAgICB0aGVUcmFuc2FjdGlvbi5leGVjdXRlU3FsKHNldHVwU3Rh
dGVtZW50c1tpXSwgW10sIHNldHVwU3VjY2Vzc0Z1bmN0aW9uLCBzZXR1cEVycm9yRnVuY3Rpb24p
OwotfQotCi1mdW5jdGlvbiBjaGVja1NldHVwQ29tcGxldGUoKQotewotICAgIGlmIChjb21wbGV0
ZWQgPT0gc2V0dXBTdGF0ZW1lbnRzLmxlbmd0aCkKLSAgICAgICAgcnVuUHJpdmF0ZUJyb3dzaW5n
VGVzdHMoKTsKLX0KLQotZnVuY3Rpb24gcnVuUHJpdmF0ZUJyb3dzaW5nVGVzdHMoKQotewotICAg
IGNvbXBsZXRlZCA9IDA7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQot
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRy
dWUpOwotICAgIAotICAgIGZvciAoaSBpbiBwcml2YXRlQnJvd3NpbmdTdGF0ZW1lbnRzKQotICAg
ICAgICB0aGVUcmFuc2FjdGlvbi5leGVjdXRlU3FsKHByaXZhdGVCcm93c2luZ1N0YXRlbWVudHNb
aV0sIFtdLCBwcml2YXRlQnJvd3NpbmdTdWNjZXNzRnVuY3Rpb24sIHByaXZhdGVCcm93c2luZ0Vy
cm9yRnVuY3Rpb24pOwotfQotCi1mdW5jdGlvbiBlbmRUZXN0KCkKLXsKLSAgICB3cml0ZU1lc3Nh
Z2VUb0xvZygiVGVzdCBlbmRlZCIpOwotICAgIAotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCi0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLX0K
LQotZnVuY3Rpb24gcnVuVGVzdCgpCi17Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICB9Ci0KLSAgICB2
YXIgZGF0YWJhc2UgPSBvcGVuRGF0YWJhc2UoIlByaXZhdGVCcm93c2luZ1JlYWRPbmx5VGVzdCIs
ICIxLjAiLCAiVGVzdCBwcml2YXRlIGJyb3dzaW5nIHJlYWQtb25seSBzYWZldHkiLCAxKTsKLSAg
ICBkYXRhYmFzZS50cmFuc2FjdGlvbihydW5TZXR1cCwgZW5kVGVzdCwgZW5kVGVzdCk7Ci19Ci0K
LTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KLVRoaXMgdGVz
dCBtYWtlcyBzdXJlIHRoYXQgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBkYXRhYmFzZSBkdXJpbmcg
cHJpdmF0ZSBicm93c2luZyBmYWlsLjxicj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPC9i
b2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5n
LW5vcmVhZC1ub3dyaXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA3MzMxOSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3Jl
YWQtbm93cml0ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTksNSArOSw3IEBACiBu
b3QgYXV0aG9yaXplZAogUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgNCBjb21wbGV0ZWQgd2l0
aCBhbiBlcnJvcgogbm90IGF1dGhvcml6ZWQKK1ByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDUg
Y29tcGxldGVkIHdpdGggYW4gZXJyb3IKK2FjY2VzcyB0byBQcml2YXRlVGVzdDEucmFuZG9tRGF0
YSBpcyBwcm9oaWJpdGVkCiBUZXN0IGVuZGVkCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDUxKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMTItMDYgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEbyBub3QgYWxsb3cgYWNj
ZXNzIHRvIGV4aXN0aW5nIEhUTUw1IGRhdGFiYXNlcyBpbiBwcml2YXRlIGJyb3dzaW5nCisgICAg
ICAgIG1vZGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzMyCisK
KyAgICAgICAgQWRkaW5nIGEgZmFpbGluZyBTRUxFQ1Qgc3RhdGVtZW50IHRvIHByaXZhdGUgYnJv
d3NpbmcgcmVhZC93cml0ZSB0ZXN0LgorICAgICAgICBBbHNvIHJlbmFtZWQgdGVzdCB0byByZWZs
ZWN0IG5ldyBiZWhhdmlvciBvZiBubyByZWFkIGFuZCBubyB3cml0ZQorICAgICAgICBhY2Nlc3Mg
aW4gcHJpdmF0ZSBicm93c2luZyBtb2RlLgorCisgICAgICAgICogc3RvcmFnZS9wcml2YXRlLWJy
b3dzaW5nLW5vcmVhZC1ub3dyaXRlLWV4cGVjdGVkLnR4dDogQ29waWVkIGZyb20gTGF5b3V0VGVz
dHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiBzdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUuaHRtbDogQ29waWVk
IGZyb20gTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5Lmh0bWwu
CisgICAgICAgICogc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5LWV4cGVjdGVkLnR4
dDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctcmVhZG9ubHku
aHRtbDogUmVtb3ZlZC4KKwogMjAxMC0xMi0wNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76132</attachid>
            <date>2010-12-09 16:17:09 -0800</date>
            <delta_ts>2010-12-09 16:23:25 -0800</delta_ts>
            <desc>[PATCH] separate read-only transaction state from private browsing no read-write state (renamed mask variables)</desc>
            <filename>private_noaccess_db.patch</filename>
            <type>text/plain</type>
            <size>35168</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMTAtMTItMDkgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBE
byBub3QgYWxsb3cgYWNjZXNzIHRvIGV4aXN0aW5nIEhUTUw1IGRhdGFiYXNlcyBpbiBwcml2YXRl
IGJyb3dzaW5nCisgICAgICAgIG1vZGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MzMyCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5v
cmVhZC1ub3dyaXRlLmh0bWwKKworICAgICAgICBQcmV2aW91c2x5LCByZWFkLW9ubHkgdHJhbnNh
Y3Rpb25zIGFuZCBwcml2YXRlIGJyb3dzaW5nIG1vZGUgd2VyZQorICAgICAgICByZXByZXNlbnRl
ZCBieSB0aGUgc2FtZSBTUUxTdGF0ZW1lbnQgYW5kIERhdGFiYXNlQXV0aG9yaXplciBzdGF0ZXMu
CisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgbV9yZWFkT25seSBtZW1iZXIgdmFyaWFi
bGUgZnJvbSBTUUxTdGF0ZW1lbnQgYW5kCisgICAgICAgIERhdGFiYXNlQXV0aG9yaXplciwgYW5k
IHJlcGxhY2VzIGl0IHdpdGggbV9wZXJtaXNzaW9ucyB3aG9zZSBiaXQgZmllbGRzCisgICAgICAg
IGFyZSBpbml0aWFsaXplZCBieSBhIERhdGFiYXNlQXV0aG9yaXplciBlbnVtIFBlcm1pc3Npb25z
IChSZWFkV3JpdGUsCisgICAgICAgIFJlYWRPbmx5LCBOb0FjY2VzcykuIEEgcmVhZC1vbmx5IHRy
YW5zYWN0aW9uIHNldHMgcGVybWlzc2lvbnMgdG8KKyAgICAgICAgUmVhZE9ubHksIGFuZCBpZiAh
bV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNz
KCksCisgICAgICAgIHRoZW4gcGVybWlzc2lvbnMgYWxzbyBzZXQgdG8gTm9BY2Nlc3MuCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFs
bG93RGF0YWJhc2VBY2Nlc3MpOiB0aGlzIG1ldGhvZCB3YXMgcHJldmlvdXNseQorICAgICAgICBj
YWxsZWQgaXNEYXRhYmFzZVJlYWRPbmx5LiBJdCBjaGVja3MgaWYgcHJpdmF0ZSBicm93c2luZyBw
cmVmZXJlbmNlIGlzCisgICAgICAgIHNldC4gVGhpcyBtZXRob2QgaXMgcmVuYW1lZCBiZWNhdXNl
IGl0IGlzIHVzZWQgdG8gY2hlY2sgaWYgcHJpdmF0ZQorICAgICAgICBicm93c2luZyByZXN0cmlj
dHMgYWNjZXNzIHRvIGRhdGFiYXNlcy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAg
ICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIHN0b3JhZ2UvQWJz
dHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpz
ZXRBdXRob3JpemVyUGVybWlzc2lvbnMpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjphbGxvd0FsdGVyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZVRlbXBJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmRyb3BJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6
OmRyb3BUZW1wSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpj
cmVhdGVUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3Jl
YXRlVGVtcFRyaWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpk
cm9wVHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BU
ZW1wVHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0
ZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1w
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93UmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93UmVpbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmFsbG93V3JpdGUpOiBhIG5ldyBwcml2YXRlIG1ldGhvZCB0aGF0CisgICAgICAgIGNo
ZWNrcyBpZiBEYXRhYmFzZUF1dGhvcml6ZXIgaXMgZW5hYmxlZCBhbmQgaWYgaXQgaXMgaW4gUmVh
ZE9ubHkgb3IKKyAgICAgICAgTm9BY2Nlc3MgbW9kZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQXV0aG9yaXplcjo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjpzZXRQZXJtaXNzaW9ucyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxT
dGF0ZW1lbnQ6OlNRTFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6
OmV4ZWN1dGUpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6CisgICAgICAgICog
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRl
bWVudFN5bmM6OlNRTFN0YXRlbWVudFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50U3luYzo6ZXhlY3V0ZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFu
c2FjdGlvblN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpl
eGVjdXRlU1FMKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MpOgorCiAyMDEwLTEy
LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDczNjQ1KQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTA4LDExICs0NTA4LDExIEBA
IHZvaWQgRG9jdW1lbnQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXQKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKIAotYm9vbCBEb2N1bWVudDo6aXNEYXRhYmFzZVJlYWRPbmx5KCkgY29uc3QKK2Jv
b2wgRG9jdW1lbnQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdAogewogICAgIGlmICghcGFn
ZSgpIHx8IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBEb2N1bWVudDo6ZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNzM2NDUpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA1LDcgKzEwMDUs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcm9jZXNzaW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9jZXNzaW5nTG9hZEV2ZW50OyB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAg
dmlydHVhbCBib29sIGlzRGF0YWJhc2VSZWFkT25seSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNl
RXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmIG5hbWUpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDczNjQ1KQorKysgV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzV29ya2VyQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFiYXNlUmVhZE9ubHkoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3QgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSkg
PSAwOwogICAgICAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsKICAgICAgICAg
dm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA3MzY0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMyLDYgKzQzMiwxMiBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJS
ZWFkCiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7CiB9CiAKK3ZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKGludCBwZXJtaXNzaW9u
cykKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VB
dXRob3JpemVyLT5zZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7Cit9CisKIGJvb2wgQWJzdHJh
Y3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCiB7CiAgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAko
cmV2aXNpb24gNzM2NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2FibGVB
dXRob3JpemVyKCk7CiAgICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7CiAgICAgdm9pZCBzZXRB
dXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICB2b2lkIHNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhp
bnQgcGVybWlzc2lvbnMpOwogICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwog
ICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwogICAgIHZvaWQgcmVzZXREZWxldGVzKCk7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNzM2
NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQoKQog
ewogICAgIG1fbGFzdEFjdGlvbldhc0luc2VydCA9IGZhbHNlOwogICAgIG1fbGFzdEFjdGlvbkNo
YW5nZWREYXRhYmFzZSA9IGZhbHNlOwotICAgIG1fcmVhZE9ubHkgPSBmYWxzZTsKKyAgICBtX3Bl
cm1pc3Npb25zID0gUmVhZFdyaXRlTWFzazsKIH0KIAogdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6
OnJlc2V0RGVsZXRlcygpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmFkZFdoaXRlbGlzdGVkRgogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAg
LTEzOSw3ICsxMzksNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVGFibGUo
CiAgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHJlc3VsdHMgaW4gYSBVUERBVEUgb3Bl
cmF0aW9uLCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2Fj
dGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKICAgICAvLyB3ZWxsIGRp
c2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwotICAgIGlmICht
X3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQog
ICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjpjcmVhdGVUZW1wVGFibGUoCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJv
cFRlbXBUYWJsZShjbwogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVEFCTEUgcmVzdWx0cyBpbiBh
IERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAogICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1v
bmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwogICAg
IC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwot
ICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dX
cml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gdXBkYXRl
RGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRhYmxlKGNvCiAKIGludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93QWx0ZXJUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAg
ICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAg
bV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0FsdGVyVGFibGUoCiAKIGludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlm
ICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2xh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBJbmRleCgKICAgICAvLyBTUUxJVEVfQ1JFQVRF
X1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBpbiBhIFVQREFURSBvciBJTlNFUlQgb3BlcmF0aW9u
LAogICAgIC8vIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywKICAgICAvLyBzbyB3ZSBtaWdodCBhcyB3ZWxsIGRpc2FsbG93
IFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBpbiB0aGVzZSBjYXNlcwotICAgIGlmIChtX3JlYWRP
bmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUo
dGFibGVOYW1lKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpj
cmVhdGVUZW1wSW5kZXgoCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BJbmRleChjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25s
eSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFi
bGVOYW1lKHRhYmxlTmFtZSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFRlbXBJbmRleChjbwogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVggc2hv
dWxkIHJlc3VsdCBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzCiAgICAgLy8gbm90IGFs
bG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3
ZSBtaWdodAogICAgIC8vIGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9JTkRFWCBp
biB0aGVzZSBjYXNlcwotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQor
ICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAg
ICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKQEAgLTIx
NCw3ICsyMTQsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcEluZGV4KGNvCiAK
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0
eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKIAogICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CkBAIC0yMjYs
NyArMjI2LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRyaWdnZQogICAg
IC8vIFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHJlc3VsdHMgaW4gYSBJTlNFUlQgb3BlcmF0
aW9uLCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlv
bnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKICAgICAvLyB3ZWxsIGRpc2Fs
bG93IFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZVRlbXBUcmlnZ2UKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRyaWdn
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFz
ZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dlcigKICAgICAvLyBTUUxJVEVfRFJPUF9URU1QX1RS
SUdHRVIgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAogICAgIC8v
IGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBz
byB3ZSBtaWdodCBhcwogICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9UUklH
R0VSIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJs
ZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
IAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpA
QCAtMjUzLDcgKzI1Myw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dl
cigKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmKQog
ewotICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhE
ZW55IDogU1FMQXV0aEFsbG93KTsKKyAgICByZXR1cm4gKCFhbGxvd1dyaXRlKCkgPyBTUUxBdXRo
RGVueSA6IFNRTEF1dGhBbGxvdyk7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0
ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCkBAIC0yNjEsMTIgKzI2MSwxMiBAQCBpbnQgRGF0YWJh
c2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyhjCiAgICAgLy8gU1FMSVRFX0NSRUFURV9URU1Q
X1ZJRVcgcmVzdWx0cyBpbiBhIFVQREFURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAogICAgIC8v
IGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBz
byB3ZSBtaWdodCBhcwogICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1ZJ
RVcgaW4gdGhlc2UgY2FzZXMKLSAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVu
YWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7CisgICAgcmV0dXJuICghYWxsb3dX
cml0ZSgpID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOwogfQogCiBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpkcm9wVmlldyhjb25zdCBTdHJpbmcmKQogewotICAgIGlmIChtX3JlYWRPbmx5
ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAgICBy
ZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOwpAQCAtMjc4LDcg
KzI3OCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVmlldyhjb24KICAgICAv
LyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdo
aWNoIGlzIG5vdAogICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBw
cml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwogICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FM
SVRFX0RST1BfVEVNUF9WSUVXIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1fcmVhZE9ubHkgJiYg
bV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVy
biBTUUxBdXRoRGVueTsKIAogICAgIG1faGFkRGVsZXRlcyA9IHRydWU7CkBAIC0yODcsNyArMjg3
LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KGNvbgogCiBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNv
bnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3Vy
aXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1
dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUgRlRTMyBleHRlbnNpb24KQEAgLTMwMCw3
ICszMDAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uCiAKIGlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUs
IGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUgRlRTMyBleHRlbnNpb24KQEAgLTMx
Miw3ICszMTIsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKGNvbnN0CiAK
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlm
ICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1
cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKQEAgLTMyMCw3ICsz
MjAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0RlbGV0ZShjb25zCiAKIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQog
ewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxs
b3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2xhc3RBY3Rp
b25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnMKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
YWxsb3dVcGRhdGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dy
aXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIG1fbGFzdEFjdGlvbkNo
YW5nZWREYXRhYmFzZSA9IHRydWU7CkBAIC0zNDQsMTIgKzM0NCwxNSBAQCBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjphbGxvd1RyYW5zYWN0aW9uCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFs
bG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJikKIHsKKyAgICBp
ZiAobV9wZXJtaXNzaW9ucyAmIE5vQWNjZXNzTWFzayAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworICAgIAogICAgIHJldHVybiBkZW55QmFzZWRPblRh
YmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1Jl
aW5kZXgoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1
cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7CisgICAgcmV0dXJuICgh
YWxsb3dXcml0ZSgpID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOwogfQogCiBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjphbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCkBA
IC0zOTAsOSArMzkzLDE5IEBAIHZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjplbmFibGUoKQogICAg
IG1fc2VjdXJpdHlFbmFibGVkID0gdHJ1ZTsKIH0KIAorYm9vbCBEYXRhYmFzZUF1dGhvcml6ZXI6
OmFsbG93V3JpdGUoKQoreworICAgIHJldHVybiAhKG1fc2VjdXJpdHlFbmFibGVkICYmIChtX3Bl
cm1pc3Npb25zICYgUmVhZE9ubHlNYXNrIHx8IG1fcGVybWlzc2lvbnMgJiBOb0FjY2Vzc01hc2sp
KTsKK30KKwogdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNldFJlYWRPbmx5KCkKIHsKLSAgICBt
X3JlYWRPbmx5ID0gdHJ1ZTsKKyAgICBtX3Blcm1pc3Npb25zIHw9IFJlYWRPbmx5TWFzazsKK30K
KyAgIAordm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNldFBlcm1pc3Npb25zKGludCBwZXJtaXNz
aW9ucykKK3sKKyAgICBtX3Blcm1pc3Npb25zID0gcGVybWlzc2lvbnM7CiB9CiAKIGludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKSBjb25zdApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNp
b24gNzM2NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDEzIEBAIGV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7
CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERh
dGFiYXNlQXV0aG9yaXplcj4gewogcHVibGljOgorCisgICAgZW51bSBQZXJtaXNzaW9ucyB7Cisg
ICAgICAgIFJlYWRXcml0ZU1hc2sgPSAwLAorICAgICAgICBSZWFkT25seU1hc2sgPSAxIDw8IDEs
CisgICAgICAgIE5vQWNjZXNzTWFzayA9IDEgPDwgMgorICAgIH07CisKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNl
SW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQgY3JlYXRlVGFibGUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpOwpAQCAtODcsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlKCk7CiAg
ICAgdm9pZCBlbmFibGUoKTsKICAgICB2b2lkIHNldFJlYWRPbmx5KCk7CisgICAgdm9pZCBzZXRQ
ZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZv
aWQgcmVzZXREZWxldGVzKCk7CkBAIC0xMDAsMTEgKzEwOCwxMiBAQCBwcml2YXRlOgogICAgIHZv
aWQgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKICAgICBpbnQgZGVueUJhc2VkT25UYWJsZU5h
bWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgaW50IHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFi
bGVOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgYWxsb3dXcml0ZSgpOwogCisgICAgaW50
IG1fcGVybWlzc2lvbnM7CiAgICAgYm9vbCBtX3NlY3VyaXR5RW5hYmxlZCA6IDE7CiAgICAgYm9v
bCBtX2xhc3RBY3Rpb25XYXNJbnNlcnQgOiAxOwogICAgIGJvb2wgbV9sYXN0QWN0aW9uQ2hhbmdl
ZERhdGFiYXNlIDogMTsKLSAgICBib29sIG1fcmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9oYWRE
ZWxldGVzIDogMTsKIAogICAgIGNvbnN0IFN0cmluZyBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZTsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA3MzY0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNyArNDMs
MTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4g
U1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4g
Y2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgYm9vbCByZWFkT25seSkKK1Bhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1l
bnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVl
PiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywg
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQg
cGVybWlzc2lvbnMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3Rh
dGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFkT25seSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRz
LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcGVybWlzc2lvbnMpKTsKIH0KIAotU1FMU3RhdGVt
ZW50OjpTUUxTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxT
UUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2Fs
bGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aywgYm9vbCByZWFkT25seSkKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmlu
ZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKICAgICA6IG1f
c3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQogICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQogICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFjaykKICAgICAs
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQotICAgICwgbV9yZWFkT25s
eShyZWFkT25seSkKKyAgICAsIG1fcGVybWlzc2lvbnMocGVybWlzc2lvbnMpCiB7CiB9CiAKQEAg
LTY5LDggKzY5LDcgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQog
ICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9yZWFk
T25seSkKLSAgICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOworICAgIGRiLT5zZXRB
dXRob3JpemVyUGVybWlzc2lvbnMobV9wZXJtaXNzaW9ucyk7CiAKICAgICBTUUxpdGVEYXRhYmFz
ZSogZGF0YWJhc2UgPSAmZGItPnNxbGl0ZURhdGFiYXNlKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3Rh
dGVtZW50LmgJKHJldmlzaW9uIDczNjQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFNRTFRyYW5zYWN0aW9u
OwogCiBjbGFzcyBTUUxTdGF0ZW1lbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0
ZW1lbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiwgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
az4sIGJvb2wgcmVhZE9ubHkpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrPiwgaW50IHBlcm1pc3Npb25zKTsKIAogICAgIGJvb2wgZXhlY3V0ZShEYXRhYmFzZSopOwog
ICAgIGJvb2wgbGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdDsKQEAgLTYxLDcg
KzYxLDcgQEAgcHVibGljOgogCiAgICAgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29uc3QgeyByZXR1
cm4gbV9lcnJvci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBTUUxTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4sIGJvb2wgcmVhZE9ubHkpOworICAgIFNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrPiwgaW50IHBlcm1pc3Npb25zKTsKIAogICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEo
KTsKICAgICB2b2lkIGNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKQEAgLTc0LDcgKzc0LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8U1FMRXJyb3I+IG1fZXJyb3I7CiAgICAgUmVmUHRyPFNRTFJl
c3VsdFNldD4gbV9yZXN1bHRTZXQ7CiAKLSAgICBib29sIG1fcmVhZE9ubHk7CisgICAgaW50IG1f
cGVybWlzc2lvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA3MzY0NSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTggKzQzLDE3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVt
ZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCBib29sIHJlYWRPbmx5KQorU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50
U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJn
dW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpCiAgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAg
ICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQor
ICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykKIHsKICAgICBBU1NFUlQoIW1fc3RhdGVt
ZW50LmlzRW1wdHkoKSk7CiB9CiAKIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxTdGF0ZW1l
bnRTeW5jOjpleGVjdXRlKERhdGFiYXNlU3luYyogZGIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIGlmIChtX3JlYWRPbmx5KQotICAgICAgICBkYi0+c2V0QXV0aG9yaXplclJlYWRPbmx5KCk7
CisgICAgZGItPnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhtX3Blcm1pc3Npb25zKTsKIAogICAg
IFNRTGl0ZURhdGFiYXNlKiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2UoKTsKIApJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiA3MzY0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE0ICs0
NiwxNCBAQCBjbGFzcyBTUUxSZXN1bHRTZXQ7CiAKIGNsYXNzIFNRTFN0YXRlbWVudFN5bmMgewog
cHVibGljOgotICAgIFNRTFN0YXRlbWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgYm9vbCByZWFkT25seSk7CisgICAgU1FM
U3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgUGFzc1JlZlB0cjxTUUxS
ZXN1bHRTZXQ+IGV4ZWN1dGUoRGF0YWJhc2VTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2
YXRlOgogICAgIFN0cmluZyBtX3N0YXRlbWVudDsKICAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJn
dW1lbnRzOwotICAgIGJvb2wgbV9yZWFkT25seTsKKyAgICBpbnQgbV9wZXJtaXNzaW9uczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmNwcAkocmV2aXNpb24gNzM2NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtOTMsMTMgKzk0LDEzIEBAIHZvaWQgU1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25seTsKLSAgICBpZiAoIXJlYWRPbmx5TW9k
ZSkgewotICAgICAgICBpZiAobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0RhdGFiYXNlUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJlYWRPbmx5TW9kZSA9IHRydWU7Ci0g
ICAgfQorICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRl
TWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWxs
b3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhv
cml6ZXI6Ok5vQWNjZXNzTWFzazsKKyAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQorICAgICAgICBw
ZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKIAotICAgIFJl
ZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0
YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcmVhZE9ubHlNb2Rl
KTsKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNy
ZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHBl
cm1pc3Npb25zKTsKIAogICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCiAgICAgICAgIHN0
YXRlbWVudC0+c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvblN5bmMuY3BwCShyZXZpc2lvbiA3MzY0NSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgpAQCAtODYsOCArODcsMTMgQEAgUGFzc1JlZlB0
cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uUwogICAgIGlmIChzcWxTdGF0ZW1lbnQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9y
ZWFkT25seSB8fCBtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRGF0YWJh
c2VSZWFkT25seSgpOwotICAgIFNRTFN0YXRlbWVudFN5bmMgc3RhdGVtZW50KHNxbFN0YXRlbWVu
dCwgYXJndW1lbnRzLCByZWFkT25seU1vZGUpOworICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFi
YXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAgcGVybWlz
c2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpOb0FjY2Vzc01hc2s7CisgICAgZWxzZSBpZiAo
bV9yZWFkT25seSkKKyAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVh
ZE9ubHlNYXNrOworCisgICAgU1FMU3RhdGVtZW50U3luYyBzdGF0ZW1lbnQoc3FsU3RhdGVtZW50
LCBhcmd1bWVudHMsIHBlcm1pc3Npb25zKTsKIAogICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9y
aXplcigpOwogICAgIGJvb2wgcmV0cnlTdGF0ZW1lbnQgPSB0cnVlOwpJbmRleDogV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5oCShyZXZpc2lvbiA3MzY0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5j
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0
YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
ICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFi
YXNlUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAg
Ly8gTm90IGltcGxlbWVudGVkIGZvciByZWFsIHlldC4KICAgICAgICAgdmlydHVhbCB2b2lkIGRh
dGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gNzM2NDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNiAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERv
IG5vdCBhbGxvdyBhY2Nlc3MgdG8gZXhpc3RpbmcgSFRNTDUgZGF0YWJhc2VzIGluIHByaXZhdGUg
YnJvd3NpbmcKKyAgICAgICAgbW9kZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDkzMzIKKworICAgICAgICBBZGRpbmcgYSBmYWlsaW5nIFNFTEVDVCBzdGF0ZW1lbnQg
dG8gcHJpdmF0ZSBicm93c2luZyByZWFkL3dyaXRlIHRlc3QuCisgICAgICAgIEFsc28gcmVuYW1l
ZCB0ZXN0IHRvIHJlZmxlY3QgbmV3IGJlaGF2aW9yIG9mIG5vIHJlYWQgYW5kIG5vIHdyaXRlCisg
ICAgICAgIGFjY2VzcyBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUuCisKKyAgICAgICAgKiBzdG9y
YWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUtZXhwZWN0ZWQudHh0OiBDb3BpZWQg
ZnJvbSBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctcmVhZG9ubHktZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHN0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0
ZS5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmct
cmVhZG9ubHkuaHRtbC4KKyAgICAgICAgKiBzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctcmVhZG9u
bHktZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvcHJpdmF0ZS1icm93
c2luZy1yZWFkb25seS5odG1sOiBSZW1vdmVkLgorCiAyMDEwLTEyLTA5ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByNzM2MzUuCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Np
bmctbm9yZWFkLW5vd3JpdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDczMzE5KQkoZnJvbSBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmct
cmVhZG9ubHktZXhwZWN0ZWQudHh0OjczMzE5KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2
YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzIEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGF0dGVtcHRzIHRvIGNo
YW5nZSB0aGUgZGF0YWJhc2UgZHVyaW5nIHByaXZhdGUgYnJvd3NpbmcgZmFpbC4KK1NldHVwIHN0
YXRlbWVudCAxIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKK1NldHVwIHN0YXRlbWVudCAyIGNvbXBs
ZXRlZCBzdWNjZXNzZnVsbHkKK1ByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDEgY29tcGxldGVk
IHdpdGggYW4gZXJyb3IKK25vdCBhdXRob3JpemVkCitQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVu
dCAyIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCitub3QgYXV0aG9yaXplZAorUHJpdmF0ZSBicm93
c2luZyBzdGF0ZW1lbnQgMyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvcgorbm90IGF1dGhvcml6ZWQK
K1ByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDQgY29tcGxldGVkIHdpdGggYW4gZXJyb3IKK25v
dCBhdXRob3JpemVkCitUZXN0IGVuZGVkCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcHJp
dmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNzMzMTkpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUt
YnJvd3Npbmctbm9yZWFkLW5vd3JpdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05
LDUgKzksNyBAQCBQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAzIGNvbXBsZXRlZCB3CiBub3Qg
YXV0aG9yaXplZAogUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgNCBjb21wbGV0ZWQgd2l0aCBh
biBlcnJvcgogbm90IGF1dGhvcml6ZWQKK1ByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDUgY29t
cGxldGVkIHdpdGggYW4gZXJyb3IKK2FjY2VzcyB0byBQcml2YXRlVGVzdDEucmFuZG9tRGF0YSBp
cyBwcm9oaWJpdGVkCiBUZXN0IGVuZGVkCiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcHJp
dmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS5odG1sCShyZXZpc2lv
biA3MzMxOSkJKGZyb20gTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRv
bmx5Lmh0bWw6NzMzMTkpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmct
bm9yZWFkLW5vd3JpdGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHdyaXRlTWVzc2FnZVRvTG9nKG1lc3Nh
Z2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQg
Kz0gbWVzc2FnZSArICJcbiI7Cit9CisKK3ZhciBzZXR1cFN0YXRlbWVudHMgPSBbCisgICAgIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFByaXZhdGVUZXN0MSAocmFuZG9tRGF0YSkiLAorICAg
ICJJTlNFUlQgSU5UTyBQcml2YXRlVGVzdDEgVkFMVUVTICgnc29tZWRhdGEnKSIKK107CisKK3Zh
ciBwcml2YXRlQnJvd3NpbmdTdGF0ZW1lbnRzID0gWworICAgICJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBQcml2YXRlVGVzdDIgKHJhbmRvbURhdGEpIiwKKyAgICAiREVMRVRFIEZST00gUHJp
dmF0ZVRlc3QxIiwKKyAgICAiRFJPUCBUQUJMRSBQcml2YXRlVGVzdDEiLAorICAgICJJTlNFUlQg
SU5UTyBQcml2YXRlVGVzdDEgVkFMVUVTICgnc29tZWRhdGEnKSIKK107CisKK3ZhciBjb21wbGV0
ZWQgPSAwOwordmFyIHRoZVRyYW5zYWN0aW9uOworCitmdW5jdGlvbiBzZXR1cFN1Y2Nlc3NGdW5j
dGlvbih0eCwgcmVzdWx0KQoreworICAgICsrY29tcGxldGVkOworICAgIHdyaXRlTWVzc2FnZVRv
TG9nKCJTZXR1cCBzdGF0ZW1lbnQgIiArIGNvbXBsZXRlZCArICIgY29tcGxldGVkIHN1Y2Nlc3Nm
dWxseSIpOworICAgIGNoZWNrU2V0dXBDb21wbGV0ZSgpOworfQorCitmdW5jdGlvbiBzZXR1cEVy
cm9yRnVuY3Rpb24odHgsIGVycm9yKQoreworICAgICsrY29tcGxldGVkOworICAgIHdyaXRlTWVz
c2FnZVRvTG9nKCJTZXR1cCBzdGF0ZW1lbnQgIiArIGNvbXBsZXRlZCArICIgY29tcGxldGVkIHdp
dGggYW4gZXJyb3JcbiIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICBjaGVja1NldHVwQ29tcGxldGUo
KTsKK30KKworZnVuY3Rpb24gcHJpdmF0ZUJyb3dzaW5nU3VjY2Vzc0Z1bmN0aW9uKHR4LCByZXN1
bHQpCit7CisgICAgKytjb21wbGV0ZWQ7CisgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlByaXZhdGUg
YnJvd3Npbmcgc3RhdGVtZW50ICIgKyBjb21wbGV0ZWQgKyAiIGNvbXBsZXRlZCBzdWNjZXNzZnVs
bHkiKTsKK30KKworZnVuY3Rpb24gcHJpdmF0ZUJyb3dzaW5nRXJyb3JGdW5jdGlvbih0eCwgZXJy
b3IpCit7CisgICAgKytjb21wbGV0ZWQ7CisgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlByaXZhdGUg
YnJvd3Npbmcgc3RhdGVtZW50ICIgKyBjb21wbGV0ZWQgKyAiIGNvbXBsZXRlZCB3aXRoIGFuIGVy
cm9yXG4iICsgZXJyb3IubWVzc2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlv
biBydW5TZXR1cCh0cmFuc2FjdGlvbikKK3sKKyAgICB0aGVUcmFuc2FjdGlvbiA9IHRyYW5zYWN0
aW9uOworICAgIGZvciAoaSBpbiBzZXR1cFN0YXRlbWVudHMpCisgICAgICAgIHRoZVRyYW5zYWN0
aW9uLmV4ZWN1dGVTcWwoc2V0dXBTdGF0ZW1lbnRzW2ldLCBbXSwgc2V0dXBTdWNjZXNzRnVuY3Rp
b24sIHNldHVwRXJyb3JGdW5jdGlvbik7Cit9CisKK2Z1bmN0aW9uIGNoZWNrU2V0dXBDb21wbGV0
ZSgpCit7CisgICAgaWYgKGNvbXBsZXRlZCA9PSBzZXR1cFN0YXRlbWVudHMubGVuZ3RoKQorICAg
ICAgICBydW5Qcml2YXRlQnJvd3NpbmdUZXN0cygpOworfQorCitmdW5jdGlvbiBydW5Qcml2YXRl
QnJvd3NpbmdUZXN0cygpCit7CisgICAgY29tcGxldGVkID0gMDsKKworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQodHJ1ZSk7CisgICAgCisgICAgZm9yIChpIGluIHByaXZhdGVC
cm93c2luZ1N0YXRlbWVudHMpCisgICAgICAgIHRoZVRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwocHJp
dmF0ZUJyb3dzaW5nU3RhdGVtZW50c1tpXSwgW10sIHByaXZhdGVCcm93c2luZ1N1Y2Nlc3NGdW5j
dGlvbiwgcHJpdmF0ZUJyb3dzaW5nRXJyb3JGdW5jdGlvbik7Cit9CisKK2Z1bmN0aW9uIGVuZFRl
c3QoKQoreworICAgIHdyaXRlTWVzc2FnZVRvTG9nKCJUZXN0IGVuZGVkIik7CisgICAgCisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIHZhciBkYXRhYmFzZSA9IG9wZW5EYXRhYmFzZSgiUHJpdmF0
ZUJyb3dzaW5nUmVhZE9ubHlUZXN0IiwgIjEuMCIsICJUZXN0IHByaXZhdGUgYnJvd3NpbmcgcmVh
ZC1vbmx5IHNhZmV0eSIsIDEpOworICAgIGRhdGFiYXNlLnRyYW5zYWN0aW9uKHJ1blNldHVwLCBl
bmRUZXN0LCBlbmRUZXN0KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBhdHRlbXB0cyB0byBjaGFu
Z2UgdGhlIGRhdGFiYXNlIGR1cmluZyBwcml2YXRlIGJyb3dzaW5nIGZhaWwuPGJyPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9z
dG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUuaHRt
bAkocmV2aXNpb24gNzMzMTkpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Np
bmctbm9yZWFkLW5vd3JpdGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTYsNyArMTYsOCBAQCB2
YXIgcHJpdmF0ZUJyb3dzaW5nU3RhdGVtZW50cyA9IFsKICAgICAiQ1JFQVRFIFRBQkxFIElGIE5P
VCBFWElTVFMgUHJpdmF0ZVRlc3QyIChyYW5kb21EYXRhKSIsCiAgICAgIkRFTEVURSBGUk9NIFBy
aXZhdGVUZXN0MSIsCiAgICAgIkRST1AgVEFCTEUgUHJpdmF0ZVRlc3QxIiwKLSAgICAiSU5TRVJU
IElOVE8gUHJpdmF0ZVRlc3QxIFZBTFVFUyAoJ3NvbWVkYXRhJykiCisgICAgIklOU0VSVCBJTlRP
IFByaXZhdGVUZXN0MSBWQUxVRVMgKCdzb21lZGF0YScpIiwKKyAgICAiU0VMRUNUICogRlJPTSBQ
cml2YXRlVGVzdDEiCiBdOwogCiB2YXIgY29tcGxldGVkID0gMDsKQEAgLTg4LDcgKzg5LDcgQEAg
ZnVuY3Rpb24gcnVuVGVzdCgpCiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKICAgICB9CiAKLSAgICB2YXIgZGF0YWJhc2UgPSBvcGVuRGF0YWJhc2UoIlByaXZh
dGVCcm93c2luZ1JlYWRPbmx5VGVzdCIsICIxLjAiLCAiVGVzdCBwcml2YXRlIGJyb3dzaW5nIHJl
YWQtb25seSBzYWZldHkiLCAxKTsKKyAgICB2YXIgZGF0YWJhc2UgPSBvcGVuRGF0YWJhc2UoIlBy
aXZhdGVCcm93c2luZ05vUmVhZE5vV3JpdGVUZXN0IiwgIjEuMCIsICJUZXN0IHByaXZhdGUgYnJv
d3Npbmcgbm8gcmVhZC93cml0ZSBzYWZldHkiLCAxKTsKICAgICBkYXRhYmFzZS50cmFuc2FjdGlv
bihydW5TZXR1cCwgZW5kVGVzdCwgZW5kVGVzdCk7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL3N0
b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1yZWFkb25seS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNzM2NDUpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJv
d3NpbmctcmVhZG9ubHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICswLDAg
QEAKLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBkYXRh
YmFzZSBkdXJpbmcgcHJpdmF0ZSBicm93c2luZyBmYWlsLgotU2V0dXAgc3RhdGVtZW50IDEgY29t
cGxldGVkIHN1Y2Nlc3NmdWxseQotU2V0dXAgc3RhdGVtZW50IDIgY29tcGxldGVkIHN1Y2Nlc3Nm
dWxseQotUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgMSBjb21wbGV0ZWQgd2l0aCBhbiBlcnJv
cgotbm90IGF1dGhvcml6ZWQKLVByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDIgY29tcGxldGVk
IHdpdGggYW4gZXJyb3IKLW5vdCBhdXRob3JpemVkCi1Qcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVu
dCAzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCi1ub3QgYXV0aG9yaXplZAotUHJpdmF0ZSBicm93
c2luZyBzdGF0ZW1lbnQgNCBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvcgotbm90IGF1dGhvcml6ZWQK
LVRlc3QgZW5kZWQKLQpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5n
LXJlYWRvbmx5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRl
LWJyb3dzaW5nLXJlYWRvbmx5Lmh0bWwJKHJldmlzaW9uIDczNjQ1KQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTAxICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0PgotCi1mdW5jdGlvbiB3cml0
ZU1lc3NhZ2VUb0xvZyhtZXNzYWdlKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOwotfQotCi12YXIgc2V0dXBTdGF0
ZW1lbnRzID0gWwotICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBQcml2YXRlVGVzdDEg
KHJhbmRvbURhdGEpIiwKLSAgICAiSU5TRVJUIElOVE8gUHJpdmF0ZVRlc3QxIFZBTFVFUyAoJ3Nv
bWVkYXRhJykiCi1dOwotCi12YXIgcHJpdmF0ZUJyb3dzaW5nU3RhdGVtZW50cyA9IFsKLSAgICAi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgUHJpdmF0ZVRlc3QyIChyYW5kb21EYXRhKSIsCi0g
ICAgIkRFTEVURSBGUk9NIFByaXZhdGVUZXN0MSIsCi0gICAgIkRST1AgVEFCTEUgUHJpdmF0ZVRl
c3QxIiwKLSAgICAiSU5TRVJUIElOVE8gUHJpdmF0ZVRlc3QxIFZBTFVFUyAoJ3NvbWVkYXRhJyki
Ci1dOwotCi12YXIgY29tcGxldGVkID0gMDsKLXZhciB0aGVUcmFuc2FjdGlvbjsKLQotZnVuY3Rp
b24gc2V0dXBTdWNjZXNzRnVuY3Rpb24odHgsIHJlc3VsdCkKLXsKLSAgICArK2NvbXBsZXRlZDsK
LSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiU2V0dXAgc3RhdGVtZW50ICIgKyBjb21wbGV0ZWQgKyAi
IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsKLSAgICBjaGVja1NldHVwQ29tcGxldGUoKTsKLX0K
LQotZnVuY3Rpb24gc2V0dXBFcnJvckZ1bmN0aW9uKHR4LCBlcnJvcikKLXsKLSAgICArK2NvbXBs
ZXRlZDsKLSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiU2V0dXAgc3RhdGVtZW50ICIgKyBjb21wbGV0
ZWQgKyAiIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yXG4iICsgZXJyb3IubWVzc2FnZSk7Ci0gICAg
Y2hlY2tTZXR1cENvbXBsZXRlKCk7Ci19Ci0KLWZ1bmN0aW9uIHByaXZhdGVCcm93c2luZ1N1Y2Nl
c3NGdW5jdGlvbih0eCwgcmVzdWx0KQotewotICAgICsrY29tcGxldGVkOwotICAgIHdyaXRlTWVz
c2FnZVRvTG9nKCJQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAiICsgY29tcGxldGVkICsgIiBj
b21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Iik7Ci19Ci0KLWZ1bmN0aW9uIHByaXZhdGVCcm93c2luZ0Vy
cm9yRnVuY3Rpb24odHgsIGVycm9yKQotewotICAgICsrY29tcGxldGVkOwotICAgIHdyaXRlTWVz
c2FnZVRvTG9nKCJQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAiICsgY29tcGxldGVkICsgIiBj
b21wbGV0ZWQgd2l0aCBhbiBlcnJvclxuIiArIGVycm9yLm1lc3NhZ2UpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotZnVuY3Rpb24gcnVuU2V0dXAodHJhbnNhY3Rpb24pCi17Ci0gICAgdGhlVHJh
bnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICBmb3IgKGkgaW4gc2V0dXBTdGF0ZW1lbnRzKQot
ICAgICAgICB0aGVUcmFuc2FjdGlvbi5leGVjdXRlU3FsKHNldHVwU3RhdGVtZW50c1tpXSwgW10s
IHNldHVwU3VjY2Vzc0Z1bmN0aW9uLCBzZXR1cEVycm9yRnVuY3Rpb24pOwotfQotCi1mdW5jdGlv
biBjaGVja1NldHVwQ29tcGxldGUoKQotewotICAgIGlmIChjb21wbGV0ZWQgPT0gc2V0dXBTdGF0
ZW1lbnRzLmxlbmd0aCkKLSAgICAgICAgcnVuUHJpdmF0ZUJyb3dzaW5nVGVzdHMoKTsKLX0KLQot
ZnVuY3Rpb24gcnVuUHJpdmF0ZUJyb3dzaW5nVGVzdHMoKQotewotICAgIGNvbXBsZXRlZCA9IDA7
Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRydWUpOwotICAgIAotICAg
IGZvciAoaSBpbiBwcml2YXRlQnJvd3NpbmdTdGF0ZW1lbnRzKQotICAgICAgICB0aGVUcmFuc2Fj
dGlvbi5leGVjdXRlU3FsKHByaXZhdGVCcm93c2luZ1N0YXRlbWVudHNbaV0sIFtdLCBwcml2YXRl
QnJvd3NpbmdTdWNjZXNzRnVuY3Rpb24sIHByaXZhdGVCcm93c2luZ0Vycm9yRnVuY3Rpb24pOwot
fQotCi1mdW5jdGlvbiBlbmRUZXN0KCkKLXsKLSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiVGVzdCBl
bmRlZCIpOwotICAgIAotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLX0KLQotZnVuY3Rpb24gcnVu
VGVzdCgpCi17Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICB9Ci0KLSAgICB2YXIgZGF0YWJhc2UgPSBv
cGVuRGF0YWJhc2UoIlByaXZhdGVCcm93c2luZ1JlYWRPbmx5VGVzdCIsICIxLjAiLCAiVGVzdCBw
cml2YXRlIGJyb3dzaW5nIHJlYWQtb25seSBzYWZldHkiLCAxKTsKLSAgICBkYXRhYmFzZS50cmFu
c2FjdGlvbihydW5TZXR1cCwgZW5kVGVzdCwgZW5kVGVzdCk7Ci19Ci0KLTwvc2NyaXB0PgotPC9o
ZWFkPgotPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRo
YXQgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBkYXRhYmFzZSBkdXJpbmcgcHJpdmF0ZSBicm93c2lu
ZyBmYWlsLjxicj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76135</attachid>
            <date>2010-12-09 16:23:25 -0800</date>
            <delta_ts>2010-12-14 19:02:14 -0800</delta_ts>
            <desc>[PATCH] separate read-only transaction state from private browsing no read-write state (fixed ChangeLog conflict)</desc>
            <filename>private_noaccess_db.patch</filename>
            <type>text/plain</type>
            <size>34056</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMTAtMTItMDkgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBE
byBub3QgYWxsb3cgYWNjZXNzIHRvIGV4aXN0aW5nIEhUTUw1IGRhdGFiYXNlcyBpbiBwcml2YXRl
IGJyb3dzaW5nCisgICAgICAgIG1vZGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MzMyCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5v
cmVhZC1ub3dyaXRlLmh0bWwKKworICAgICAgICBQcmV2aW91c2x5LCByZWFkLW9ubHkgdHJhbnNh
Y3Rpb25zIGFuZCBwcml2YXRlIGJyb3dzaW5nIG1vZGUgd2VyZQorICAgICAgICByZXByZXNlbnRl
ZCBieSB0aGUgc2FtZSBTUUxTdGF0ZW1lbnQgYW5kIERhdGFiYXNlQXV0aG9yaXplciBzdGF0ZXMu
CisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgbV9yZWFkT25seSBtZW1iZXIgdmFyaWFi
bGUgZnJvbSBTUUxTdGF0ZW1lbnQgYW5kCisgICAgICAgIERhdGFiYXNlQXV0aG9yaXplciwgYW5k
IHJlcGxhY2VzIGl0IHdpdGggbV9wZXJtaXNzaW9ucyB3aG9zZSBiaXQgZmllbGRzCisgICAgICAg
IGFyZSBpbml0aWFsaXplZCBieSBhIERhdGFiYXNlQXV0aG9yaXplciBlbnVtIFBlcm1pc3Npb25z
IChSZWFkV3JpdGUsCisgICAgICAgIFJlYWRPbmx5LCBOb0FjY2VzcykuIEEgcmVhZC1vbmx5IHRy
YW5zYWN0aW9uIHNldHMgcGVybWlzc2lvbnMgdG8KKyAgICAgICAgUmVhZE9ubHksIGFuZCBpZiAh
bV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNz
KCksCisgICAgICAgIHRoZW4gcGVybWlzc2lvbnMgYWxzbyBzZXQgdG8gTm9BY2Nlc3MuCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFs
bG93RGF0YWJhc2VBY2Nlc3MpOiB0aGlzIG1ldGhvZCB3YXMgcHJldmlvdXNseQorICAgICAgICBj
YWxsZWQgaXNEYXRhYmFzZVJlYWRPbmx5LiBJdCBjaGVja3MgaWYgcHJpdmF0ZSBicm93c2luZyBw
cmVmZXJlbmNlIGlzCisgICAgICAgIHNldC4gVGhpcyBtZXRob2QgaXMgcmVuYW1lZCBiZWNhdXNl
IGl0IGlzIHVzZWQgdG8gY2hlY2sgaWYgcHJpdmF0ZQorICAgICAgICBicm93c2luZyByZXN0cmlj
dHMgYWNjZXNzIHRvIGRhdGFiYXNlcy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAg
ICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIHN0b3JhZ2UvQWJz
dHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpz
ZXRBdXRob3JpemVyUGVybWlzc2lvbnMpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjphbGxvd0FsdGVyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZVRlbXBJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmRyb3BJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6
OmRyb3BUZW1wSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpj
cmVhdGVUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3Jl
YXRlVGVtcFRyaWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpk
cm9wVHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BU
ZW1wVHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0
ZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1w
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93UmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93UmVpbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhv
cml6ZXI6OmFsbG93V3JpdGUpOiBhIG5ldyBwcml2YXRlIG1ldGhvZCB0aGF0CisgICAgICAgIGNo
ZWNrcyBpZiBEYXRhYmFzZUF1dGhvcml6ZXIgaXMgZW5hYmxlZCBhbmQgaWYgaXQgaXMgaW4gUmVh
ZE9ubHkgb3IKKyAgICAgICAgTm9BY2Nlc3MgbW9kZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQXV0aG9yaXplcjo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjpzZXRQZXJtaXNzaW9ucyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxT
dGF0ZW1lbnQ6OlNRTFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6
OmV4ZWN1dGUpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6CisgICAgICAgICog
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRl
bWVudFN5bmM6OlNRTFN0YXRlbWVudFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50U3luYzo6ZXhlY3V0ZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFu
c2FjdGlvblN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpl
eGVjdXRlU1FMKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MpOgorCiAyMDEwLTEy
LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVHJ5IGFuZCBmaXgg
dGhlIG1hYyBidWlsZC4KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDczNjU2KQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTA4LDExICs0NTA4LDExIEBA
IHZvaWQgRG9jdW1lbnQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXQKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKIAotYm9vbCBEb2N1bWVudDo6aXNEYXRhYmFzZVJlYWRPbmx5KCkgY29uc3QKK2Jv
b2wgRG9jdW1lbnQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdAogewogICAgIGlmICghcGFn
ZSgpIHx8IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBEb2N1bWVudDo6ZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNzM2NTYpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA1LDcgKzEwMDUs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcm9jZXNzaW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9jZXNzaW5nTG9hZEV2ZW50OyB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAg
dmlydHVhbCBib29sIGlzRGF0YWJhc2VSZWFkT25seSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNl
RXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmIG5hbWUpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDczNjU2KQorKysgV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzV29ya2VyQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFiYXNlUmVhZE9ubHkoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3QgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSkg
PSAwOwogICAgICAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsKICAgICAgICAg
dm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA3MzY1NikK
KysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMyLDYgKzQzMiwxMiBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJS
ZWFkCiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7CiB9CiAKK3ZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKGludCBwZXJtaXNzaW9u
cykKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VB
dXRob3JpemVyLT5zZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7Cit9CisKIGJvb2wgQWJzdHJh
Y3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCiB7CiAgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAko
cmV2aXNpb24gNzM2NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2FibGVB
dXRob3JpemVyKCk7CiAgICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7CiAgICAgdm9pZCBzZXRB
dXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICB2b2lkIHNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhp
bnQgcGVybWlzc2lvbnMpOwogICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwog
ICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwogICAgIHZvaWQgcmVzZXREZWxldGVzKCk7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNzM2
NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQoKQog
ewogICAgIG1fbGFzdEFjdGlvbldhc0luc2VydCA9IGZhbHNlOwogICAgIG1fbGFzdEFjdGlvbkNo
YW5nZWREYXRhYmFzZSA9IGZhbHNlOwotICAgIG1fcmVhZE9ubHkgPSBmYWxzZTsKKyAgICBtX3Bl
cm1pc3Npb25zID0gUmVhZFdyaXRlTWFzazsKIH0KIAogdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6
OnJlc2V0RGVsZXRlcygpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmFkZFdoaXRlbGlzdGVkRgogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAg
LTEzOSw3ICsxMzksNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVGFibGUo
CiAgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHJlc3VsdHMgaW4gYSBVUERBVEUgb3Bl
cmF0aW9uLCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2Fj
dGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKICAgICAvLyB3ZWxsIGRp
c2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwotICAgIGlmICht
X3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQog
ICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjpjcmVhdGVUZW1wVGFibGUoCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJv
cFRlbXBUYWJsZShjbwogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVEFCTEUgcmVzdWx0cyBpbiBh
IERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAogICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1v
bmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwogICAg
IC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwot
ICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dX
cml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gdXBkYXRl
RGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRhYmxlKGNvCiAKIGludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93QWx0ZXJUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAg
ICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAg
bV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0FsdGVyVGFibGUoCiAKIGludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlm
ICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2xh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBJbmRleCgKICAgICAvLyBTUUxJVEVfQ1JFQVRF
X1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBpbiBhIFVQREFURSBvciBJTlNFUlQgb3BlcmF0aW9u
LAogICAgIC8vIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywKICAgICAvLyBzbyB3ZSBtaWdodCBhcyB3ZWxsIGRpc2FsbG93
IFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBpbiB0aGVzZSBjYXNlcwotICAgIGlmIChtX3JlYWRP
bmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUo
dGFibGVOYW1lKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpj
cmVhdGVUZW1wSW5kZXgoCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BJbmRleChjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25s
eSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFi
bGVOYW1lKHRhYmxlTmFtZSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFRlbXBJbmRleChjbwogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVggc2hv
dWxkIHJlc3VsdCBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzCiAgICAgLy8gbm90IGFs
bG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3
ZSBtaWdodAogICAgIC8vIGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9JTkRFWCBp
biB0aGVzZSBjYXNlcwotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQor
ICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAg
ICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKQEAgLTIx
NCw3ICsyMTQsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcEluZGV4KGNvCiAK
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0
eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKIAogICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CkBAIC0yMjYs
NyArMjI2LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRyaWdnZQogICAg
IC8vIFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHJlc3VsdHMgaW4gYSBJTlNFUlQgb3BlcmF0
aW9uLCB3aGljaCBpcyBub3QKICAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlv
bnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKICAgICAvLyB3ZWxsIGRpc2Fs
bG93IFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZVRlbXBUcmlnZ2UKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRyaWdn
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFz
ZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dlcigKICAgICAvLyBTUUxJVEVfRFJPUF9URU1QX1RS
SUdHRVIgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAogICAgIC8v
IGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBz
byB3ZSBtaWdodCBhcwogICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9UUklH
R0VSIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJs
ZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
IAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwpA
QCAtMjUzLDcgKzI1Myw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dl
cigKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmKQog
ewotICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhE
ZW55IDogU1FMQXV0aEFsbG93KTsKKyAgICByZXR1cm4gKCFhbGxvd1dyaXRlKCkgPyBTUUxBdXRo
RGVueSA6IFNRTEF1dGhBbGxvdyk7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0
ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCkBAIC0yNjEsMTIgKzI2MSwxMiBAQCBpbnQgRGF0YWJh
c2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyhjCiAgICAgLy8gU1FMSVRFX0NSRUFURV9URU1Q
X1ZJRVcgcmVzdWx0cyBpbiBhIFVQREFURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAogICAgIC8v
IGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBz
byB3ZSBtaWdodCBhcwogICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1ZJ
RVcgaW4gdGhlc2UgY2FzZXMKLSAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVu
YWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7CisgICAgcmV0dXJuICghYWxsb3dX
cml0ZSgpID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOwogfQogCiBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpkcm9wVmlldyhjb25zdCBTdHJpbmcmKQogewotICAgIGlmIChtX3JlYWRPbmx5
ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxsb3dXcml0ZSgpKQogICAgICAgICBy
ZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOwpAQCAtMjc4LDcg
KzI3OCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVmlldyhjb24KICAgICAv
LyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdo
aWNoIGlzIG5vdAogICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBw
cml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwogICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FM
SVRFX0RST1BfVEVNUF9WSUVXIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKG1fcmVhZE9ubHkgJiYg
bV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCiAgICAgICAgIHJldHVy
biBTUUxBdXRoRGVueTsKIAogICAgIG1faGFkRGVsZXRlcyA9IHRydWU7CkBAIC0yODcsNyArMjg3
LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KGNvbgogCiBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNv
bnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3Vy
aXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNRTEF1
dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUgRlRTMyBleHRlbnNpb24KQEAgLTMwMCw3
ICszMDAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uCiAKIGlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUs
IGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKIHsKLSAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUgRlRTMyBleHRlbnNpb24KQEAgLTMx
Miw3ICszMTIsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKGNvbnN0CiAK
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlm
ICghYWxsb3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1
cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKQEAgLTMyMCw3ICsz
MjAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0RlbGV0ZShjb25zCiAKIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQog
ewotICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgIGlmICghYWxs
b3dXcml0ZSgpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICBtX2xhc3RBY3Rp
b25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnMKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
YWxsb3dVcGRhdGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgaWYgKCFhbGxvd1dy
aXRlKCkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIG1fbGFzdEFjdGlvbkNo
YW5nZWREYXRhYmFzZSA9IHRydWU7CkBAIC0zNDQsMTIgKzM0NCwxNSBAQCBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjphbGxvd1RyYW5zYWN0aW9uCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFs
bG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJikKIHsKKyAgICBp
ZiAobV9wZXJtaXNzaW9ucyAmIE5vQWNjZXNzTWFzayAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworICAgIAogICAgIHJldHVybiBkZW55QmFzZWRPblRh
YmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1Jl
aW5kZXgoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1
cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7CisgICAgcmV0dXJuICgh
YWxsb3dXcml0ZSgpID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOwogfQogCiBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjphbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCkBA
IC0zOTAsOSArMzkzLDE5IEBAIHZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjplbmFibGUoKQogICAg
IG1fc2VjdXJpdHlFbmFibGVkID0gdHJ1ZTsKIH0KIAorYm9vbCBEYXRhYmFzZUF1dGhvcml6ZXI6
OmFsbG93V3JpdGUoKQoreworICAgIHJldHVybiAhKG1fc2VjdXJpdHlFbmFibGVkICYmIChtX3Bl
cm1pc3Npb25zICYgUmVhZE9ubHlNYXNrIHx8IG1fcGVybWlzc2lvbnMgJiBOb0FjY2Vzc01hc2sp
KTsKK30KKwogdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNldFJlYWRPbmx5KCkKIHsKLSAgICBt
X3JlYWRPbmx5ID0gdHJ1ZTsKKyAgICBtX3Blcm1pc3Npb25zIHw9IFJlYWRPbmx5TWFzazsKK30K
KyAgIAordm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNldFBlcm1pc3Npb25zKGludCBwZXJtaXNz
aW9ucykKK3sKKyAgICBtX3Blcm1pc3Npb25zID0gcGVybWlzc2lvbnM7CiB9CiAKIGludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKSBjb25zdApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNp
b24gNzM2NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDEzIEBAIGV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7
CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERh
dGFiYXNlQXV0aG9yaXplcj4gewogcHVibGljOgorCisgICAgZW51bSBQZXJtaXNzaW9ucyB7Cisg
ICAgICAgIFJlYWRXcml0ZU1hc2sgPSAwLAorICAgICAgICBSZWFkT25seU1hc2sgPSAxIDw8IDEs
CisgICAgICAgIE5vQWNjZXNzTWFzayA9IDEgPDwgMgorICAgIH07CisKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNl
SW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQgY3JlYXRlVGFibGUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpOwpAQCAtODcsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlKCk7CiAg
ICAgdm9pZCBlbmFibGUoKTsKICAgICB2b2lkIHNldFJlYWRPbmx5KCk7CisgICAgdm9pZCBzZXRQ
ZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZv
aWQgcmVzZXREZWxldGVzKCk7CkBAIC0xMDAsMTEgKzEwOCwxMiBAQCBwcml2YXRlOgogICAgIHZv
aWQgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKICAgICBpbnQgZGVueUJhc2VkT25UYWJsZU5h
bWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgaW50IHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFi
bGVOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgYWxsb3dXcml0ZSgpOwogCisgICAgaW50
IG1fcGVybWlzc2lvbnM7CiAgICAgYm9vbCBtX3NlY3VyaXR5RW5hYmxlZCA6IDE7CiAgICAgYm9v
bCBtX2xhc3RBY3Rpb25XYXNJbnNlcnQgOiAxOwogICAgIGJvb2wgbV9sYXN0QWN0aW9uQ2hhbmdl
ZERhdGFiYXNlIDogMTsKLSAgICBib29sIG1fcmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9oYWRE
ZWxldGVzIDogMTsKIAogICAgIGNvbnN0IFN0cmluZyBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZTsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNyArNDMs
MTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4g
U1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4g
Y2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgYm9vbCByZWFkT25seSkKK1Bhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1l
bnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVl
PiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywg
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQg
cGVybWlzc2lvbnMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3Rh
dGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFkT25seSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRz
LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcGVybWlzc2lvbnMpKTsKIH0KIAotU1FMU3RhdGVt
ZW50OjpTUUxTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxT
UUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2Fs
bGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aywgYm9vbCByZWFkT25seSkKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmlu
ZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKICAgICA6IG1f
c3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQogICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQogICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFjaykKICAgICAs
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQotICAgICwgbV9yZWFkT25s
eShyZWFkT25seSkKKyAgICAsIG1fcGVybWlzc2lvbnMocGVybWlzc2lvbnMpCiB7CiB9CiAKQEAg
LTY5LDggKzY5LDcgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQog
ICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9yZWFk
T25seSkKLSAgICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOworICAgIGRiLT5zZXRB
dXRob3JpemVyUGVybWlzc2lvbnMobV9wZXJtaXNzaW9ucyk7CiAKICAgICBTUUxpdGVEYXRhYmFz
ZSogZGF0YWJhc2UgPSAmZGItPnNxbGl0ZURhdGFiYXNlKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3Rh
dGVtZW50LmgJKHJldmlzaW9uIDczNjU2KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFNRTFRyYW5zYWN0aW9u
OwogCiBjbGFzcyBTUUxTdGF0ZW1lbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0
ZW1lbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiwgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
az4sIGJvb2wgcmVhZE9ubHkpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrPiwgaW50IHBlcm1pc3Npb25zKTsKIAogICAgIGJvb2wgZXhlY3V0ZShEYXRhYmFzZSopOwog
ICAgIGJvb2wgbGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdDsKQEAgLTYxLDcg
KzYxLDcgQEAgcHVibGljOgogCiAgICAgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29uc3QgeyByZXR1
cm4gbV9lcnJvci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBTUUxTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4sIGJvb2wgcmVhZE9ubHkpOworICAgIFNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrPiwgaW50IHBlcm1pc3Npb25zKTsKIAogICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEo
KTsKICAgICB2b2lkIGNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKQEAgLTc0LDcgKzc0LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8U1FMRXJyb3I+IG1fZXJyb3I7CiAgICAgUmVmUHRyPFNRTFJl
c3VsdFNldD4gbV9yZXN1bHRTZXQ7CiAKLSAgICBib29sIG1fcmVhZE9ubHk7CisgICAgaW50IG1f
cGVybWlzc2lvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTggKzQzLDE3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVt
ZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCBib29sIHJlYWRPbmx5KQorU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50
U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJn
dW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpCiAgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAg
ICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQor
ICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykKIHsKICAgICBBU1NFUlQoIW1fc3RhdGVt
ZW50LmlzRW1wdHkoKSk7CiB9CiAKIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxTdGF0ZW1l
bnRTeW5jOjpleGVjdXRlKERhdGFiYXNlU3luYyogZGIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIGlmIChtX3JlYWRPbmx5KQotICAgICAgICBkYi0+c2V0QXV0aG9yaXplclJlYWRPbmx5KCk7
CisgICAgZGItPnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhtX3Blcm1pc3Npb25zKTsKIAogICAg
IFNRTGl0ZURhdGFiYXNlKiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2UoKTsKIApJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE0ICs0
NiwxNCBAQCBjbGFzcyBTUUxSZXN1bHRTZXQ7CiAKIGNsYXNzIFNRTFN0YXRlbWVudFN5bmMgewog
cHVibGljOgotICAgIFNRTFN0YXRlbWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgYm9vbCByZWFkT25seSk7CisgICAgU1FM
U3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgUGFzc1JlZlB0cjxTUUxS
ZXN1bHRTZXQ+IGV4ZWN1dGUoRGF0YWJhc2VTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2
YXRlOgogICAgIFN0cmluZyBtX3N0YXRlbWVudDsKICAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJn
dW1lbnRzOwotICAgIGJvb2wgbV9yZWFkT25seTsKKyAgICBpbnQgbV9wZXJtaXNzaW9uczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmNwcAkocmV2aXNpb24gNzM2NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtOTMsMTMgKzk0LDEzIEBAIHZvaWQgU1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25seTsKLSAgICBpZiAoIXJlYWRPbmx5TW9k
ZSkgewotICAgICAgICBpZiAobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0RhdGFiYXNlUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJlYWRPbmx5TW9kZSA9IHRydWU7Ci0g
ICAgfQorICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRl
TWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWxs
b3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhv
cml6ZXI6Ok5vQWNjZXNzTWFzazsKKyAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQorICAgICAgICBw
ZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKIAotICAgIFJl
ZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0
YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcmVhZE9ubHlNb2Rl
KTsKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNy
ZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHBl
cm1pc3Npb25zKTsKIAogICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCiAgICAgICAgIHN0
YXRlbWVudC0+c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvblN5bmMuY3BwCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgpAQCAtODYsOCArODcsMTMgQEAgUGFzc1JlZlB0
cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uUwogICAgIGlmIChzcWxTdGF0ZW1lbnQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9y
ZWFkT25seSB8fCBtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRGF0YWJh
c2VSZWFkT25seSgpOwotICAgIFNRTFN0YXRlbWVudFN5bmMgc3RhdGVtZW50KHNxbFN0YXRlbWVu
dCwgYXJndW1lbnRzLCByZWFkT25seU1vZGUpOworICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFi
YXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAgcGVybWlz
c2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpOb0FjY2Vzc01hc2s7CisgICAgZWxzZSBpZiAo
bV9yZWFkT25seSkKKyAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVh
ZE9ubHlNYXNrOworCisgICAgU1FMU3RhdGVtZW50U3luYyBzdGF0ZW1lbnQoc3FsU3RhdGVtZW50
LCBhcmd1bWVudHMsIHBlcm1pc3Npb25zKTsKIAogICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9y
aXplcigpOwogICAgIGJvb2wgcmV0cnlTdGF0ZW1lbnQgPSB0cnVlOwpJbmRleDogV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5oCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5j
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0
YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
ICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFi
YXNlUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAg
Ly8gTm90IGltcGxlbWVudGVkIGZvciByZWFsIHlldC4KICAgICAgICAgdmlydHVhbCB2b2lkIGRh
dGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgpJbmRleDogTGF5b3V0
VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9y
ZWFkLW5vd3JpdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MzMxOSkJKGZyb20gTGF5b3V0VGVz
dHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5LWV4cGVjdGVkLnR4dDo3MzMxOSkK
KysrIExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1ub3JlYWQtbm93cml0ZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorVGhpcyB0ZXN0IG1h
a2VzIHN1cmUgdGhhdCBhdHRlbXB0cyB0byBjaGFuZ2UgdGhlIGRhdGFiYXNlIGR1cmluZyBwcml2
YXRlIGJyb3dzaW5nIGZhaWwuCitTZXR1cCBzdGF0ZW1lbnQgMSBjb21wbGV0ZWQgc3VjY2Vzc2Z1
bGx5CitTZXR1cCBzdGF0ZW1lbnQgMiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CitQcml2YXRlIGJy
b3dzaW5nIHN0YXRlbWVudCAxIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCitub3QgYXV0aG9yaXpl
ZAorUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgMiBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvcgor
bm90IGF1dGhvcml6ZWQKK1ByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDMgY29tcGxldGVkIHdp
dGggYW4gZXJyb3IKK25vdCBhdXRob3JpemVkCitQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCA0
IGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCitub3QgYXV0aG9yaXplZAorVGVzdCBlbmRlZAorCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1i
cm93c2luZy1ub3JlYWQtbm93cml0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczMzE5KQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOSw1ICs5LDcgQEAgUHJpdmF0ZSBicm93c2luZyBz
dGF0ZW1lbnQgMyBjb21wbGV0ZWQgdwogbm90IGF1dGhvcml6ZWQKIFByaXZhdGUgYnJvd3Npbmcg
c3RhdGVtZW50IDQgY29tcGxldGVkIHdpdGggYW4gZXJyb3IKIG5vdCBhdXRob3JpemVkCitQcml2
YXRlIGJyb3dzaW5nIHN0YXRlbWVudCA1IGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCithY2Nlc3Mg
dG8gUHJpdmF0ZVRlc3QxLnJhbmRvbURhdGEgaXMgcHJvaGliaXRlZAogVGVzdCBlbmRlZAogCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmct
bm9yZWFkLW5vd3JpdGUuaHRtbAkocmV2aXNpb24gNzMzMTkpCShmcm9tIExheW91dFRlc3RzL3N0
b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1yZWFkb25seS5odG1sOjczMzE5KQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitmdW5j
dGlvbiB3cml0ZU1lc3NhZ2VUb0xvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworfQorCit2YXIg
c2V0dXBTdGF0ZW1lbnRzID0gWworICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBQcml2
YXRlVGVzdDEgKHJhbmRvbURhdGEpIiwKKyAgICAiSU5TRVJUIElOVE8gUHJpdmF0ZVRlc3QxIFZB
TFVFUyAoJ3NvbWVkYXRhJykiCitdOworCit2YXIgcHJpdmF0ZUJyb3dzaW5nU3RhdGVtZW50cyA9
IFsKKyAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgUHJpdmF0ZVRlc3QyIChyYW5kb21E
YXRhKSIsCisgICAgIkRFTEVURSBGUk9NIFByaXZhdGVUZXN0MSIsCisgICAgIkRST1AgVEFCTEUg
UHJpdmF0ZVRlc3QxIiwKKyAgICAiSU5TRVJUIElOVE8gUHJpdmF0ZVRlc3QxIFZBTFVFUyAoJ3Nv
bWVkYXRhJykiCitdOworCit2YXIgY29tcGxldGVkID0gMDsKK3ZhciB0aGVUcmFuc2FjdGlvbjsK
KworZnVuY3Rpb24gc2V0dXBTdWNjZXNzRnVuY3Rpb24odHgsIHJlc3VsdCkKK3sKKyAgICArK2Nv
bXBsZXRlZDsKKyAgICB3cml0ZU1lc3NhZ2VUb0xvZygiU2V0dXAgc3RhdGVtZW50ICIgKyBjb21w
bGV0ZWQgKyAiIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsKKyAgICBjaGVja1NldHVwQ29tcGxl
dGUoKTsKK30KKworZnVuY3Rpb24gc2V0dXBFcnJvckZ1bmN0aW9uKHR4LCBlcnJvcikKK3sKKyAg
ICArK2NvbXBsZXRlZDsKKyAgICB3cml0ZU1lc3NhZ2VUb0xvZygiU2V0dXAgc3RhdGVtZW50ICIg
KyBjb21wbGV0ZWQgKyAiIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yXG4iICsgZXJyb3IubWVzc2Fn
ZSk7CisgICAgY2hlY2tTZXR1cENvbXBsZXRlKCk7Cit9CisKK2Z1bmN0aW9uIHByaXZhdGVCcm93
c2luZ1N1Y2Nlc3NGdW5jdGlvbih0eCwgcmVzdWx0KQoreworICAgICsrY29tcGxldGVkOworICAg
IHdyaXRlTWVzc2FnZVRvTG9nKCJQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAiICsgY29tcGxl
dGVkICsgIiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Iik7Cit9CisKK2Z1bmN0aW9uIHByaXZhdGVC
cm93c2luZ0Vycm9yRnVuY3Rpb24odHgsIGVycm9yKQoreworICAgICsrY29tcGxldGVkOworICAg
IHdyaXRlTWVzc2FnZVRvTG9nKCJQcml2YXRlIGJyb3dzaW5nIHN0YXRlbWVudCAiICsgY29tcGxl
dGVkICsgIiBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvclxuIiArIGVycm9yLm1lc3NhZ2UpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gcnVuU2V0dXAodHJhbnNhY3Rpb24pCit7Cisg
ICAgdGhlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAgICBmb3IgKGkgaW4gc2V0dXBTdGF0
ZW1lbnRzKQorICAgICAgICB0aGVUcmFuc2FjdGlvbi5leGVjdXRlU3FsKHNldHVwU3RhdGVtZW50
c1tpXSwgW10sIHNldHVwU3VjY2Vzc0Z1bmN0aW9uLCBzZXR1cEVycm9yRnVuY3Rpb24pOworfQor
CitmdW5jdGlvbiBjaGVja1NldHVwQ29tcGxldGUoKQoreworICAgIGlmIChjb21wbGV0ZWQgPT0g
c2V0dXBTdGF0ZW1lbnRzLmxlbmd0aCkKKyAgICAgICAgcnVuUHJpdmF0ZUJyb3dzaW5nVGVzdHMo
KTsKK30KKworZnVuY3Rpb24gcnVuUHJpdmF0ZUJyb3dzaW5nVGVzdHMoKQoreworICAgIGNvbXBs
ZXRlZCA9IDA7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRydWUpOwor
ICAgIAorICAgIGZvciAoaSBpbiBwcml2YXRlQnJvd3NpbmdTdGF0ZW1lbnRzKQorICAgICAgICB0
aGVUcmFuc2FjdGlvbi5leGVjdXRlU3FsKHByaXZhdGVCcm93c2luZ1N0YXRlbWVudHNbaV0sIFtd
LCBwcml2YXRlQnJvd3NpbmdTdWNjZXNzRnVuY3Rpb24sIHByaXZhdGVCcm93c2luZ0Vycm9yRnVu
Y3Rpb24pOworfQorCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICB3cml0ZU1lc3NhZ2VUb0xv
ZygiVGVzdCBlbmRlZCIpOworICAgIAorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB2YXIgZGF0
YWJhc2UgPSBvcGVuRGF0YWJhc2UoIlByaXZhdGVCcm93c2luZ1JlYWRPbmx5VGVzdCIsICIxLjAi
LCAiVGVzdCBwcml2YXRlIGJyb3dzaW5nIHJlYWQtb25seSBzYWZldHkiLCAxKTsKKyAgICBkYXRh
YmFzZS50cmFuc2FjdGlvbihydW5TZXR1cCwgZW5kVGVzdCwgZW5kVGVzdCk7Cit9CisKKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCBtYWtl
cyBzdXJlIHRoYXQgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBkYXRhYmFzZSBkdXJpbmcgcHJpdmF0
ZSBicm93c2luZyBmYWlsLjxicj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5vcmVh
ZC1ub3dyaXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRl
LWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLmh0bWwJKHJldmlzaW9uIDczMzE5KQorKysgTGF5b3V0
VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTE2LDcgKzE2LDggQEAgdmFyIHByaXZhdGVCcm93c2luZ1N0YXRlbWVudHMg
PSBbCiAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFByaXZhdGVUZXN0MiAocmFuZG9t
RGF0YSkiLAogICAgICJERUxFVEUgRlJPTSBQcml2YXRlVGVzdDEiLAogICAgICJEUk9QIFRBQkxF
IFByaXZhdGVUZXN0MSIsCi0gICAgIklOU0VSVCBJTlRPIFByaXZhdGVUZXN0MSBWQUxVRVMgKCdz
b21lZGF0YScpIgorICAgICJJTlNFUlQgSU5UTyBQcml2YXRlVGVzdDEgVkFMVUVTICgnc29tZWRh
dGEnKSIsCisgICAgIlNFTEVDVCAqIEZST00gUHJpdmF0ZVRlc3QxIgogXTsKIAogdmFyIGNvbXBs
ZXRlZCA9IDA7CkBAIC04OCw3ICs4OSw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgfQogCi0gICAgdmFyIGRh
dGFiYXNlID0gb3BlbkRhdGFiYXNlKCJQcml2YXRlQnJvd3NpbmdSZWFkT25seVRlc3QiLCAiMS4w
IiwgIlRlc3QgcHJpdmF0ZSBicm93c2luZyByZWFkLW9ubHkgc2FmZXR5IiwgMSk7CisgICAgdmFy
IGRhdGFiYXNlID0gb3BlbkRhdGFiYXNlKCJQcml2YXRlQnJvd3NpbmdOb1JlYWROb1dyaXRlVGVz
dCIsICIxLjAiLCAiVGVzdCBwcml2YXRlIGJyb3dzaW5nIG5vIHJlYWQvd3JpdGUgc2FmZXR5Iiwg
MSk7CiAgICAgZGF0YWJhc2UudHJhbnNhY3Rpb24ocnVuU2V0dXAsIGVuZFRlc3QsIGVuZFRlc3Qp
OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctcmVhZG9u
bHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0
ZS1icm93c2luZy1yZWFkb25seS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczNjU2KQorKysgTGF5
b3V0VGVzdHMvc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLXJlYWRvbmx5LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMyArMCwwIEBACi1UaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0
IGF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgZGF0YWJhc2UgZHVyaW5nIHByaXZhdGUgYnJvd3Npbmcg
ZmFpbC4KLVNldHVwIHN0YXRlbWVudCAxIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLVNldHVwIHN0
YXRlbWVudCAyIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLVByaXZhdGUgYnJvd3Npbmcgc3RhdGVt
ZW50IDEgY29tcGxldGVkIHdpdGggYW4gZXJyb3IKLW5vdCBhdXRob3JpemVkCi1Qcml2YXRlIGJy
b3dzaW5nIHN0YXRlbWVudCAyIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yCi1ub3QgYXV0aG9yaXpl
ZAotUHJpdmF0ZSBicm93c2luZyBzdGF0ZW1lbnQgMyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvcgot
bm90IGF1dGhvcml6ZWQKLVByaXZhdGUgYnJvd3Npbmcgc3RhdGVtZW50IDQgY29tcGxldGVkIHdp
dGggYW4gZXJyb3IKLW5vdCBhdXRob3JpemVkCi1UZXN0IGVuZGVkCi0KSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1yZWFkb25seS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1yZWFkb25seS5odG1sCShyZXZp
c2lvbiA3MzY1NikKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1yZWFk
b25seS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMSArMCwwIEBACi08aHRtbD4KLTxoZWFk
PgotPHNjcmlwdD4KLQotZnVuY3Rpb24gd3JpdGVNZXNzYWdlVG9Mb2cobWVzc2FnZSkKLXsKLSAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdl
ICsgIlxuIjsKLX0KLQotdmFyIHNldHVwU3RhdGVtZW50cyA9IFsKLSAgICAiQ1JFQVRFIFRBQkxF
IElGIE5PVCBFWElTVFMgUHJpdmF0ZVRlc3QxIChyYW5kb21EYXRhKSIsCi0gICAgIklOU0VSVCBJ
TlRPIFByaXZhdGVUZXN0MSBWQUxVRVMgKCdzb21lZGF0YScpIgotXTsKLQotdmFyIHByaXZhdGVC
cm93c2luZ1N0YXRlbWVudHMgPSBbCi0gICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFBy
aXZhdGVUZXN0MiAocmFuZG9tRGF0YSkiLAotICAgICJERUxFVEUgRlJPTSBQcml2YXRlVGVzdDEi
LAotICAgICJEUk9QIFRBQkxFIFByaXZhdGVUZXN0MSIsCi0gICAgIklOU0VSVCBJTlRPIFByaXZh
dGVUZXN0MSBWQUxVRVMgKCdzb21lZGF0YScpIgotXTsKLQotdmFyIGNvbXBsZXRlZCA9IDA7Ci12
YXIgdGhlVHJhbnNhY3Rpb247Ci0KLWZ1bmN0aW9uIHNldHVwU3VjY2Vzc0Z1bmN0aW9uKHR4LCBy
ZXN1bHQpCi17Ci0gICAgKytjb21wbGV0ZWQ7Ci0gICAgd3JpdGVNZXNzYWdlVG9Mb2coIlNldHVw
IHN0YXRlbWVudCAiICsgY29tcGxldGVkICsgIiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Iik7Ci0g
ICAgY2hlY2tTZXR1cENvbXBsZXRlKCk7Ci19Ci0KLWZ1bmN0aW9uIHNldHVwRXJyb3JGdW5jdGlv
bih0eCwgZXJyb3IpCi17Ci0gICAgKytjb21wbGV0ZWQ7Ci0gICAgd3JpdGVNZXNzYWdlVG9Mb2co
IlNldHVwIHN0YXRlbWVudCAiICsgY29tcGxldGVkICsgIiBjb21wbGV0ZWQgd2l0aCBhbiBlcnJv
clxuIiArIGVycm9yLm1lc3NhZ2UpOwotICAgIGNoZWNrU2V0dXBDb21wbGV0ZSgpOwotfQotCi1m
dW5jdGlvbiBwcml2YXRlQnJvd3NpbmdTdWNjZXNzRnVuY3Rpb24odHgsIHJlc3VsdCkKLXsKLSAg
ICArK2NvbXBsZXRlZDsKLSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiUHJpdmF0ZSBicm93c2luZyBz
dGF0ZW1lbnQgIiArIGNvbXBsZXRlZCArICIgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIpOwotfQot
Ci1mdW5jdGlvbiBwcml2YXRlQnJvd3NpbmdFcnJvckZ1bmN0aW9uKHR4LCBlcnJvcikKLXsKLSAg
ICArK2NvbXBsZXRlZDsKLSAgICB3cml0ZU1lc3NhZ2VUb0xvZygiUHJpdmF0ZSBicm93c2luZyBz
dGF0ZW1lbnQgIiArIGNvbXBsZXRlZCArICIgY29tcGxldGVkIHdpdGggYW4gZXJyb3JcbiIgKyBl
cnJvci5tZXNzYWdlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIHJ1blNldHVw
KHRyYW5zYWN0aW9uKQotewotICAgIHRoZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247Ci0gICAg
Zm9yIChpIGluIHNldHVwU3RhdGVtZW50cykKLSAgICAgICAgdGhlVHJhbnNhY3Rpb24uZXhlY3V0
ZVNxbChzZXR1cFN0YXRlbWVudHNbaV0sIFtdLCBzZXR1cFN1Y2Nlc3NGdW5jdGlvbiwgc2V0dXBF
cnJvckZ1bmN0aW9uKTsKLX0KLQotZnVuY3Rpb24gY2hlY2tTZXR1cENvbXBsZXRlKCkKLXsKLSAg
ICBpZiAoY29tcGxldGVkID09IHNldHVwU3RhdGVtZW50cy5sZW5ndGgpCi0gICAgICAgIHJ1blBy
aXZhdGVCcm93c2luZ1Rlc3RzKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blByaXZhdGVCcm93c2luZ1Rl
c3RzKCkKLXsKLSAgICBjb21wbGV0ZWQgPSAwOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCh0cnVlKTsKLSAgICAKLSAgICBmb3IgKGkgaW4gcHJpdmF0ZUJyb3dzaW5nU3Rh
dGVtZW50cykKLSAgICAgICAgdGhlVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbChwcml2YXRlQnJvd3Np
bmdTdGF0ZW1lbnRzW2ldLCBbXSwgcHJpdmF0ZUJyb3dzaW5nU3VjY2Vzc0Z1bmN0aW9uLCBwcml2
YXRlQnJvd3NpbmdFcnJvckZ1bmN0aW9uKTsKLX0KLQotZnVuY3Rpb24gZW5kVGVzdCgpCi17Ci0g
ICAgd3JpdGVNZXNzYWdlVG9Mb2coIlRlc3QgZW5kZWQiKTsKLSAgICAKLSAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQotewotICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0g
ICAgfQotCi0gICAgdmFyIGRhdGFiYXNlID0gb3BlbkRhdGFiYXNlKCJQcml2YXRlQnJvd3NpbmdS
ZWFkT25seVRlc3QiLCAiMS4wIiwgIlRlc3QgcHJpdmF0ZSBicm93c2luZyByZWFkLW9ubHkgc2Fm
ZXR5IiwgMSk7Ci0gICAgZGF0YWJhc2UudHJhbnNhY3Rpb24ocnVuU2V0dXAsIGVuZFRlc3QsIGVu
ZFRlc3QpOwotfQotCi08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgp
OyI+Ci1UaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgZGF0
YWJhc2UgZHVyaW5nIHByaXZhdGUgYnJvd3NpbmcgZmFpbC48YnI+Ci08ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>