<?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>109575</bug_id>
          
          <creation_ts>2013-02-12 05:37:41 -0800</creation_ts>
          <short_desc>[chromium] move text dump generation to TestRunner library</short_desc>
          <delta_ts>2013-02-12 15:47:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109622</dependson>
          <blocked>108469</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>830826</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-02-12 05:37:41 -0800</bug_when>
    <thetext>[chromium] move text dump generation to TestRunner library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830827</commentid>
    <comment_count>1</comment_count>
      <attachid>187843</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-12 05:38:07 -0800</bug_when>
    <thetext>Created attachment 187843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830831</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 05:41:26 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830833</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 05:41:43 -0800</bug_when>
    <thetext>Attachment 187843 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/DumpRenderTree.gypi&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestShell.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestShell.h&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.h&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:338:  Use equivelent function in &lt;wtf/ASCIICType.h&gt; instead of the tolower() function.  [runtime/ctype_function] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830834</commentid>
    <comment_count>4</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-02-12 05:42:35 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:338:  Use equivelent function in &lt;wtf/ASCIICType.h&gt; instead of the tolower() function.  [runtime/ctype_function] [4]

I copied the code from TestShell (and I can&apos;t use wtf from TestRunner anyway)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830838</commentid>
    <comment_count>5</comment_count>
      <attachid>187843</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-12 05:47:49 -0800</bug_when>
    <thetext>Comment on attachment 187843
Patch

Attachment 187843 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16454236</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830839</commentid>
    <comment_count>6</comment_count>
      <attachid>187846</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-12 05:49:22 -0800</bug_when>
    <thetext>Created attachment 187846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830846</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 05:52:21 -0800</bug_when>
    <thetext>Attachment 187846 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/DumpRenderTree.gypi&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestShell.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestShell.h&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.h&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:339:  Use equivelent function in &lt;wtf/ASCIICType.h&gt; instead of the tolower() function.  [runtime/ctype_function] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830883</commentid>
    <comment_count>8</comment_count>
      <attachid>187846</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 06:31:44 -0800</bug_when>
    <thetext>Comment on attachment 187846
Patch

Attachment 187846 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16483199

New failing tests:
fast/overflow/scrollRevealButton.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830884</commentid>
    <comment_count>9</comment_count>
      <attachid>187857</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-12 06:36:34 -0800</bug_when>
    <thetext>Created attachment 187857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830888</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 06:41:53 -0800</bug_when>
    <thetext>Attachment 187857 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/DumpRenderTree.gypi&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestShell.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestShell.h&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.h&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:339:  Use equivelent function in &lt;wtf/ASCIICType.h&gt; instead of the tolower() function.  [runtime/ctype_function] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831082</commentid>
    <comment_count>11</comment_count>
      <attachid>187857</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-12 10:52:21 -0800</bug_when>
    <thetext>Comment on attachment 187857
Patch

Clearing flags on attachment: 187857

Committed r142643: &lt;http://trac.webkit.org/changeset/142643&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831083</commentid>
    <comment_count>12</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-02-12 10:52:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831343</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 15:27:59 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 109622</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831368</commentid>
    <comment_count>14</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-02-12 15:47:03 -0800</bug_when>
    <thetext>breakage fixed in 109623</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187843</attachid>
            <date>2013-02-12 05:38:07 -0800</date>
            <delta_ts>2013-02-12 05:49:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109575-20130212143437.patch</filename>
            <type>text/plain</type>
            <size>34806</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDdmYzIzMDY0YTAxNzkyNjVhMTEwNWRiMmVmM2U0M2U1
NjZjMmM3NS4uODVhZDM2MGJmMWEwNWJjMjk4MmJhYzg4NzA3NDBjMjMwMWIxNGQ1ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0
IEBACiAyMDEzLTAyLTEyICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgog
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSB0ZXh0IGR1bXAgZ2VuZXJhdGlvbiB0byBUZXN0UnVu
bmVyIGxpYnJhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0RGVsZWdh
dGU6OmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmg6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5oLgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6bm9ybWFsaXplTGF5b3V0VGVzdFVSTCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9UZXN0Q29tbW9uLmg6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcDoKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNoZWNrUmVzcG9uc2VNaW1lVHlwZSk6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OnNob3VsZER1bXBBc1RleHQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6c2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFRlc3RSdW5u
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlBlcm1pc3Npb25zLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2Vi
VGVzdFByb3h5QmFzZTo6Y2FwdHVyZVRyZWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAg
KFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgIChUZXN0U2hlbGw6OmNhcHR1cmVIaXN0b3J5Rm9y
V2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoK
KyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OmNhcHR1cmVIaXN0b3J5Rm9y
V2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5o
OgorCisyMDEzLTAyLTEyICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSB3ZWJydGMgbW9ja3MgdG8gdGVzdHJ1bm5lciBsaWJy
YXJ5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkw
NDEKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKaW5kZXggMzA0NjA1
Y2ViNjhkOGRjOTU2NzgyNzlhOWMwOGFjYTRjMjJhNmIwYS4uNDFiMTg0MzBkOWMxMjZmNmNiYTQ5
OTVjOTY0YzhlZTY4N2IyMTg2NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuZ3lwaQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZS5neXBpCkBAIC03OSw2ICs3OSw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50LmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAnLAogICAgICAgICAgICAg
J2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgnLApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERl
bGVnYXRlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1Ymxp
Yy9XZWJUZXN0RGVsZWdhdGUuaAppbmRleCA3YTA2M2EzZTBhMGE3Y2Y5MmUyYzZjNzcwMTYxNDVl
ZjUxMGVjODc4Li44MmJhYjU3ODIxMGU1Yzg2MTJkYjA3YzYwNTMyN2E4MjQ0MTI3YzViIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0RGVsZWdhdGUuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaApAQCAtMzksNiArMzksNyBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbjsKIGNsYXNzIFdlYkdhbWVw
YWRzOworY2xhc3MgV2ViSGlzdG9yeUl0ZW07CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJV
UkxFcnJvcjsKIH0KQEAgLTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbG9hZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2Vi
S2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBh
bGxvd0V4dGVybmFsUGFnZXMoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
YXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXplX3Qgd2luZG93SW5kZXgsIFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0+KiBoaXN0b3J5LCBzaXplX3QqIGN1cnJlbnRFbnRy
eUluZGV4KSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKaW5kZXggMzUw
ZTEzNzE0OTY1Zjc1OWYwYzJmMGI0ZDJkMTExMDUzZGRkZWY4Zi4uYjIyZWQ5NDlmOGI3NmRhMmEx
OGY0NjU1MzkzYjdlNzA3Mjk1NjMyNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKQEAg
LTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFpbnRSZWN0KGNvbnN0IFdlYktp
dDo6V2ViUmVjdCYpOwogICAgIFdlYktpdDo6V2ViUmVjdCBwYWludFJlY3QoKSBjb25zdDsKIAor
ICAgIHN0ZDo6c3RyaW5nIGNhcHR1cmVUcmVlKGJvb2wgZGVidWdSZW5kZXJUcmVlKTsKKwogICAg
IHZvaWQgc2V0TG9nQ29uc29sZU91dHB1dChib29sIGVuYWJsZWQpOwogCiBwcm90ZWN0ZWQ6CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1Ymxp
Yy9XZWJUZXN0UnVubmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmgKaW5kZXggYjQwZDZmOTAyYzA1MjNlYmI3YjI4Mzcw
OGZkNDhkMjY1MGZlZDVmYi4uODhkNGFlNWI3YTY2NThjMDk5ZDY5MWY5MGMxNTI3NmU0YzY4NTk5
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9w
dWJsaWMvV2ViVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RSdW5uZXIuaApAQCAtNDAsMTQgKzQwLDEwIEBAIG5h
bWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKIAogY2xhc3MgV2ViVGVzdFJ1bm5lciB7CiBwdWJsaWM6
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cygpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50KiB3ZWJQZXJtaXNz
aW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJk
TGlzdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcFNlbGVjdGlvblJl
Y3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHRlc3RSZXBhaW50KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBzd2VlcEhvcml6b250YWxseSgpIGNvbnN0ID0gMDsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RD
b21tb24uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhhMWExYzYxMzUxOGQ4YTMwYzE4MmIyNDJiYjhk
ZDg3M2I2ZjMxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdENvbW1vbi5oIgorCit1c2luZyBuYW1lc3BhY2Ug
c3RkOworCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK25hbWVzcGFjZSB7CisKK2NvbnN0
IGNoYXIgbGF5b3V0VGVzdHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Citjb25zdCBzdHJp
bmc6OnNpemVfdHlwZSBsYXlvdXRUZXN0c1BhdHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3Rz
UGF0dGVybikgLSAxOworY29uc3QgY2hhciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Citj
b25zdCBjaGFyIGZpbGVUZXN0UHJlZml4W10gPSAiKGZpbGUgdGVzdCk6IjsKK2NvbnN0IGNoYXIg
ZGF0YVVybFBhdHRlcm5bXSA9ICJkYXRhOiI7Citjb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRh
VXJsUGF0dGVyblNpemUgPSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKKworfQorCitzdHJp
bmcgbm9ybWFsaXplTGF5b3V0VGVzdFVSTChjb25zdCBzdHJpbmcmIHVybCkKK3sKKyAgICBzdHJp
bmcgcmVzdWx0ID0gdXJsOworICAgIHNpemVfdCBwb3M7CisgICAgaWYgKCF1cmwuZmluZChmaWxl
VXJsUGF0dGVybikgJiYgKChwb3MgPSB1cmwuZmluZChsYXlvdXRUZXN0c1BhdHRlcm4pKSAhPSBz
dHJpbmc6Om5wb3MpKSB7CisgICAgICAgIC8vIGFkanVzdCBmaWxlIFVSTHMgdG8gbWF0Y2ggdXBz
dHJlYW0gcmVzdWx0cy4KKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoMCwgcG9zICsgbGF5b3V0VGVz
dHNQYXR0ZXJuU2l6ZSwgZmlsZVRlc3RQcmVmaXgpOworICAgIH0gZWxzZSBpZiAoIXVybC5maW5k
KGRhdGFVcmxQYXR0ZXJuKSkgeworICAgICAgICAvLyBVUkwtZXNjYXBlIGRhdGEgVVJMcyB0byBt
YXRjaCByZXN1bHRzIHVwc3RyZWFtLgorICAgICAgICBzdHJpbmcgcGF0aCA9IHVybC5zdWJzdHIo
ZGF0YVVybFBhdHRlcm5TaXplKTsKKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoZGF0YVVybFBhdHRl
cm5TaXplLCB1cmwubGVuZ3RoKCksIHBhdGgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9UZXN0Q29tbW9uLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9UZXN0Q29tbW9uLmgKaW5kZXggYjFmNzZmODRlMjc2NGUxY2IwYjRiYTQxNzAz
OTljY2I3ZGVlNTJkMS4uZjVmMDBmMjYzNTg4OTdmNjEzMjY2ZWFjNzY3M2EzMzEyYWY2MjE5ZCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdENvbW1vbi5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL1Rlc3RDb21tb24uaApAQCAtMzQsMTMgKzM0LDIwIEBACiAjaW5jbHVkZSA8YmFzZS9j
b21waWxlcl9zcGVjaWZpYy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJDb21tb24uaD4KICNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZz4KIAogI2lmIGRlZmluZWQoV0lOMzIpCiAj
ZGVmaW5lIHNucHJpbnRmKHN0ciwgc2l6ZSwgLi4uKSBfc25wcmludGZfcyhzdHIsIHNpemUsIHNp
emUsIF9fVkFfQVJHU19fKQogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKKwog
aW5saW5lIGJvb2wgaXNBU0NJSUFscGhhKGNoYXIgY2gpIHsgcmV0dXJuIChjaCB8IDB4MjApID49
ICdhJyAmJiAoY2ggfCAweDIwKSA8PSAneic7IH0KIAogaW5saW5lIGJvb2wgaXNOb3RBU0NJSUFs
cGhhKGNoYXIgY2gpIHsgcmV0dXJuICFpc0FTQ0lJQWxwaGEoY2gpOyB9CiAKK3N0ZDo6c3RyaW5n
IG5vcm1hbGl6ZUxheW91dFRlc3RVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7CisKK30KKwog
I2VuZGlmIC8vIFRlc3RDb21tb25faApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCBlZjJmYzJj
MzRlYmVkNmI4MTMyMDYyOTE2MThlMTEyN2E0NDdkNGQ5Li5mODk4ZTFjZTMwYjhkZGMzMjUwNDM4
NDMzNTRhZDNhMDM0ZjhkMGJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgi
CisjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJFbGVtZW50Lmgi
CkBAIC01NSw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJEYXRhLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlBvaW50Lmg+CisjaW5jbHVkZSA8cHVibGlj
L1dlYlVSTFJlc3BvbnNlLmg+CiAKICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChB
TkRST0lEKQogI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCIKQEAgLTQyNSw4ICs0
MjcsMjIgQEAgYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7CiB9CiAKLWJvb2wgVGVzdFJ1
bm5lcjo6c2hvdWxkRHVtcEFzVGV4dCgpIGNvbnN0Cit2b2lkIFRlc3RSdW5uZXI6OmNoZWNrUmVz
cG9uc2VNaW1lVHlwZSgpCiB7CisgICAgLy8gVGV4dCBvdXRwdXQ6IHRoZSB0ZXN0IHBhZ2UgY2Fu
IHJlcXVlc3QgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1dAorICAgIC8vIHdoaWNoIHdlIGhhbmRs
ZSBoZXJlLgorICAgIGlmICghbV9kdW1wQXNUZXh0KSB7CisgICAgICAgIHN0cmluZyBtaW1lVHlw
ZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmRhdGFTb3VyY2UoKS0+cmVzcG9uc2UoKS5taW1l
VHlwZSgpLnV0ZjgoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikgewor
ICAgICAgICAgICAgbV9kdW1wQXNUZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHMgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUZXN0UnVu
bmVyOjpzaG91bGREdW1wQXNUZXh0KCkKK3sKKyAgICBjaGVja1Jlc3BvbnNlTWltZVR5cGUoKTsK
ICAgICByZXR1cm4gbV9kdW1wQXNUZXh0OwogfQogCkBAIC00MzUsOCArNDUxLDkgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGREdW1wQXNUZXh0KGJvb2wgdmFsdWUpCiAgICAgbV9kdW1wQXNU
ZXh0ID0gdmFsdWU7CiB9CiAKLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSBjb25zdAorYm9vbCBUZXN0UnVubmVyOjpzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0
cygpCiB7CisgICAgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7CiAgICAgcmV0dXJuIG1fZ2VuZXJh
dGVQaXhlbFJlc3VsdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAppbmRleCBiNDRhMzdkNzJkYjZm
ZjE3YjMwOTkzYmQwNDc4YTg4ZjU2OWExMTk0Li42NjA1ODQ1ODAzYzRmMmYwOTRkNWJkNmU4ZmY1
NDEzOGRjN2RhZjRlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCkBAIC03MSwyMCArNzEsMjAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGVzdElzUnVubmluZyhib29sKTsKIAogICAgIC8vIFdlYlRlc3RS
dW5uZXIgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc1RleHQo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIHNob3VsZER1bXBBc0F1ZGlvKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBj
b25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYlBlcm1pc3Npb25DbGllbnQqIHdlYlBlcm1pc3Np
b25zKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcFNl
bGVjdGlvblJlY3QoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdGVzdFJlcGFp
bnQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHko
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmludGluZygpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgLy8gTWV0aG9kcyB1c2VkIGJ5IFdlYlRlc3RQcm94eUJhc2UuCisgICAg
Ym9vbCBzaG91bGREdW1wQXNUZXh0KCk7CisgICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRM
aXN0KCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Q7
CiAgICAgdm9pZCBzaG93RGV2VG9vbHMoKTsKICAgICB2b2lkIHNldFNob3VsZER1bXBBc1RleHQo
Ym9vbCk7CiAgICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhib29sKTsKQEAg
LTQ4Niw2ICs0ODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAg
Ly8gSW50ZXJuYWwgaGVscGVycworICAgIHZvaWQgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7CiAg
ICAgdm9pZCBjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpOwogICAgIGNsYXNzIE5v
dGlmeURvbmVUaW1lZE91dFRhc2s6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+IHsK
ICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAKaW5kZXggYTE1ZDliOTI0
NThjMjVjN2NmZTQzZTMyMWU2OWJhNjE2OTM2OTkyOC4uMTYxY2JjNzU0YTI5NGZiNjBkNTBjYTY4
MDE0OGE0NDFmZGFkMjBiYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBlcm1pc3Npb25zLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25z
LmgiCiAKKyNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRl
LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VVJMLmg+CkBAIC0zOSwzMiArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViVGVzdFJ1bm5lciB7CiAKLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IGNoYXIgbGF5b3V0VGVz
dHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBs
YXlvdXRUZXN0c1BhdHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3RzUGF0dGVybikgLSAxOwot
Y29uc3QgY2hhciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Ci1jb25zdCBjaGFyIGZpbGVU
ZXN0UHJlZml4W10gPSAiKGZpbGUgdGVzdCk6IjsKLWNvbnN0IGNoYXIgZGF0YVVybFBhdHRlcm5b
XSA9ICJkYXRhOiI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRhVXJsUGF0dGVyblNpemUg
PSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKLQotc3RyaW5nIG5vcm1hbGl6ZUxheW91dFRl
c3RVUkwoY29uc3Qgc3RyaW5nJiB1cmwpCi17Ci0gICAgc3RyaW5nIHJlc3VsdCA9IHVybDsKLSAg
ICBzaXplX3QgcG9zOwotICAgIGlmICghdXJsLmZpbmQoZmlsZVVybFBhdHRlcm4pICYmICgocG9z
ID0gdXJsLmZpbmQobGF5b3V0VGVzdHNQYXR0ZXJuKSkgIT0gc3RyaW5nOjpucG9zKSkgewotICAg
ICAgICAvLyBhZGp1c3QgZmlsZSBVUkxzIHRvIG1hdGNoIHVwc3RyZWFtIHJlc3VsdHMuCi0gICAg
ICAgIHJlc3VsdC5yZXBsYWNlKDAsIHBvcyArIGxheW91dFRlc3RzUGF0dGVyblNpemUsIGZpbGVU
ZXN0UHJlZml4KTsKLSAgICB9IGVsc2UgaWYgKCF1cmwuZmluZChkYXRhVXJsUGF0dGVybikpIHsK
LSAgICAgICAgLy8gVVJMLWVzY2FwZSBkYXRhIFVSTHMgdG8gbWF0Y2ggcmVzdWx0cyB1cHN0cmVh
bS4KLSAgICAgICAgc3RyaW5nIHBhdGggPSB1cmwuc3Vic3RyKGRhdGFVcmxQYXR0ZXJuU2l6ZSk7
Ci0gICAgICAgIHJlc3VsdC5yZXBsYWNlKGRhdGFVcmxQYXR0ZXJuU2l6ZSwgdXJsLmxlbmd0aCgp
LCBwYXRoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfQotCiBXZWJQZXJtaXNz
aW9uczo6V2ViUGVybWlzc2lvbnMoKQogICAgIDogbV9kZWxlZ2F0ZSgwKQogewpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBy
b3h5LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlRlc3RQcm94eS5jcHAKaW5kZXggMDgxOGQyMWYxY2Q4NzU2NzNiYjVlNGQwOTE5ZjZlZTMzNDRh
YjRmNC4uYzc1YjAyYWJlMGNlODM2YmVkMGZlNDM3NzI3NGIwOGE3ZDY1OGJjYiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBy
b3h5LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9XZWJUZXN0UHJveHkuY3BwCkBAIC00MywxMiArNDMsMTUgQEAKICNpbmNsdWRlICJXZWJDYWNo
ZWRVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRl
ICJXZWJEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJX
ZWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJIaXN0b3J5
SXRlbS5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5QYXJhbXMu
aCIKICNpbmNsdWRlICJXZWJQcmludFBhcmFtcy5oIgogI2luY2x1ZGUgIldlYlJhbmdlLmgiCisj
aW5jbHVkZSAiV2ViU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0
ZS5oIgogI2luY2x1ZGUgIldlYlRlc3RJbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiV2ViVGVzdFJ1
bm5lci5oIgpAQCAtMjU0LDYgKzI1NywxNTYgQEAgY29uc3QgY2hhciogd2ViTmF2aWdhdGlvblR5
cGVUb1N0cmluZyhXZWJOYXZpZ2F0aW9uVHlwZSB0eXBlKQogICAgIHJldHVybiBpbGxlZ2FsU3Ry
aW5nOwogfQogCitzdHJpbmcgZHVtcERvY3VtZW50VGV4dChXZWJGcmFtZSogZnJhbWUpCit7Cisg
ICAgLy8gV2UgdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50J3MgdGV4dCBpbnN0ZWFkIG9mIHRoZSBi
b2R5IHRleHQgaGVyZSBiZWNhdXNlCisgICAgLy8gbm90IGFsbCBkb2N1bWVudHMgaGF2ZSBhIGJv
ZHksIHN1Y2ggYXMgWE1MIGRvY3VtZW50cy4KKyAgICBXZWJFbGVtZW50IGRvY3VtZW50RWxlbWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOworICAgIGlmIChkb2N1bWVu
dEVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBzdHJpbmcoKTsKKyAgICByZXR1cm4g
ZG9jdW1lbnRFbGVtZW50LmlubmVyVGV4dCgpLnV0ZjgoKTsKK30KKworc3RyaW5nIGR1bXBGcmFt
ZXNBc1RleHQoV2ViRnJhbWUqIGZyYW1lLCBib29sIHJlY3Vyc2l2ZSkKK3sKKyAgICBzdHJpbmcg
cmVzdWx0OworCisgICAgLy8gQWRkIGhlYWRlciBmb3IgYWxsIGJ1dCB0aGUgbWFpbiBmcmFtZS4g
U2tpcCBlbXB0eSBmcmFtZXMuCisgICAgaWYgKGZyYW1lLT5wYXJlbnQoKSAmJiAhZnJhbWUtPmRv
Y3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkuaXNOdWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiXG4tLS0tLS0tLVxuRnJhbWU6ICciKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFt
ZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCIn
XG4tLS0tLS0tLVxuIik7CisgICAgfQorCisgICAgcmVzdWx0LmFwcGVuZChkdW1wRG9jdW1lbnRU
ZXh0KGZyYW1lKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKworICAgIGlmIChyZWN1cnNp
dmUpIHsKKyAgICAgICAgZm9yIChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoZHVtcEZyYW1lc0FzVGV4dChjaGlsZCwgcmVjdXJzaXZlKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RyaW5nIGR1bXBGcmFtZXNBc1ByaW50ZWRUZXh0KFdl
YkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCit7CisgICAgc3RyaW5nIHJlc3VsdDsKKwor
ICAgIC8vIENhbm5vdCBkbyBwcmludGVkIGZvcm1hdCBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBI
VE1MCisgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQorICAgICAg
ICByZXR1cm4gc3RyaW5nKCk7CisKKyAgICAvLyBBZGQgaGVhZGVyIGZvciBhbGwgYnV0IHRoZSBt
YWluIGZyYW1lLiBTa2lwIGVtcHR5IGZyYW1lcy4KKyAgICBpZiAoZnJhbWUtPnBhcmVudCgpICYm
ICFmcmFtZS0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS5pc051bGwoKSkgeworICAgICAg
ICByZXN1bHQuYXBwZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIpOworICAgICAgICByZXN1bHQu
YXBwZW5kKGZyYW1lLT51bmlxdWVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIidcbi0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKGZy
YW1lLT5yZW5kZXJUcmVlQXNUZXh0KFdlYkZyYW1lOjpSZW5kZXJBc1RleHRQcmludGluZykudXRm
OCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworCisgICAgaWYgKHJlY3Vyc2l2ZSkgewor
ICAgICAgICBmb3IgKFdlYkZyYW1lKiBjaGlsZCA9IGZyYW1lLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChkdW1wRnJhbWVzQXNQcmludGVkVGV4dChjaGlsZCwgcmVjdXJzaXZlKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RyaW5nIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdl
YkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCit7CisgICAgc3RyaW5nIHJlc3VsdDsKKyAg
ICBXZWJTaXplIG9mZnNldCA9IGZyYW1lLT5zY3JvbGxPZmZzZXQoKTsKKyAgICBpZiAob2Zmc2V0
LndpZHRoID4gMCB8fCBvZmZzZXQuaGVpZ2h0ID4gMCkgeworICAgICAgICBpZiAoZnJhbWUtPnBh
cmVudCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5nKCJmcmFtZSAnIikgKyBmcmFtZS0+
dW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkgKyAiJyAiOworICAgICAgICBjaGFyIGRhdGFbMTAw
XTsKKyAgICAgICAgc25wcmludGYoZGF0YSwgc2l6ZW9mKGRhdGEpLCAic2Nyb2xsZWQgdG8gJWQs
JWRcbiIsIG9mZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodCk7CisgICAgICAgIHJlc3VsdCArPSBk
YXRhOworICAgIH0KKworICAgIGlmICghcmVjdXJzaXZlKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJlc3VsdCArPSBkdW1wRnJh
bWVTY3JvbGxQb3NpdGlvbihjaGlsZCwgcmVjdXJzaXZlKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdHJ1Y3QgVG9Mb3dlciB7CisgICAgY2hhcjE2IG9wZXJhdG9yKCkoY2hhcjE2IGMpIHsg
cmV0dXJuIHRvbG93ZXIoYyk7IH0KK307CisKKy8vIFJldHVybnMgVHJ1ZSBpZiBpdGVtMSA8IGl0
ZW0yLgorYm9vbCBIaXN0b3J5SXRlbUNvbXBhcmVMZXNzKGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBp
dGVtMSwgY29uc3QgV2ViSGlzdG9yeUl0ZW0mIGl0ZW0yKQoreworICAgIHN0cmluZzE2IHRhcmdl
dDEgPSBpdGVtMS50YXJnZXQoKTsKKyAgICBzdHJpbmcxNiB0YXJnZXQyID0gaXRlbTIudGFyZ2V0
KCk7CisgICAgc3RkOjp0cmFuc2Zvcm0odGFyZ2V0MS5iZWdpbigpLCB0YXJnZXQxLmVuZCgpLCB0
YXJnZXQxLmJlZ2luKCksIFRvTG93ZXIoKSk7CisgICAgc3RkOjp0cmFuc2Zvcm0odGFyZ2V0Mi5i
ZWdpbigpLCB0YXJnZXQyLmVuZCgpLCB0YXJnZXQyLmJlZ2luKCksIFRvTG93ZXIoKSk7CisgICAg
cmV0dXJuIHRhcmdldDEgPCB0YXJnZXQyOworfQorCitzdHJpbmcgZHVtcEhpc3RvcnlJdGVtKGNv
bnN0IFdlYkhpc3RvcnlJdGVtJiBpdGVtLCBpbnQgaW5kZW50LCBib29sIGlzQ3VycmVudCkKK3sK
KyAgICBzdHJpbmcgcmVzdWx0OworCisgICAgaWYgKGlzQ3VycmVudCkgeworICAgICAgICByZXN1
bHQuYXBwZW5kKCJjdXJyLT4iKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpbmRlbnQgLSA2LCAn
ICcpOyAvLyA2ID09ICJjdXJyLT4iLmxlbmd0aCgpCisgICAgfSBlbHNlCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaW5kZW50LCAnICcpOworCisgICAgc3RyaW5nIHVybCA9IG5vcm1hbGl6ZUxheW91
dFRlc3RVUkwoaXRlbS51cmxTdHJpbmcoKS51dGY4KCkpOworICAgIHJlc3VsdC5hcHBlbmQodXJs
KTsKKyAgICBpZiAoIWl0ZW0udGFyZ2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIiAoaW4gZnJhbWUgXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnRhcmdl
dCgpLnV0ZjgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiKSIpOworICAgIH0KKyAgICBp
ZiAoaXRlbS5pc1RhcmdldEl0ZW0oKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAqKm5hdiB0
YXJnZXQqKiIpOworICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisKKyAgICBjb25zdCBXZWJWZWN0
b3I8V2ViSGlzdG9yeUl0ZW0+JiBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4oKTsKKyAgICBpZiAo
IWNoaWxkcmVuLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBNdXN0IHNvcnQgdG8gZWxpbWluYXRl
IGFyYml0cmFyeSByZXN1bHQgb3JkZXJpbmcgd2hpY2ggZGVmZWF0cworICAgICAgICAvLyByZXBy
b2R1Y2libGUgdGVzdGluZy4KKyAgICAgICAgLy8gRklYTUU6IFdlYlZlY3RvciBzaG91bGQgcHJv
YmFibHkganVzdCBiZSBhIHN0ZDo6dmVjdG9yISEKKyAgICAgICAgc3RkOjp2ZWN0b3I8V2ViSGlz
dG9yeUl0ZW0+IHNvcnRlZENoaWxkcmVuOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc29ydGVkQ2hpbGRyZW4ucHVzaF9i
YWNrKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgc3RkOjpzb3J0KHNvcnRlZENoaWxkcmVuLmJlZ2lu
KCksIHNvcnRlZENoaWxkcmVuLmVuZCgpLCBIaXN0b3J5SXRlbUNvbXBhcmVMZXNzKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3J0ZWRDaGlsZHJlbi5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBkdW1wSGlzdG9yeUl0ZW0oc29ydGVkQ2hpbGRyZW5baV0sIGlu
ZGVudCArIDQsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IGR1bXBCYWNrRm9yd2FyZExpc3QoY29uc3QgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiYgaGlz
dG9yeSwgc2l6ZV90IGN1cnJlbnRFbnRyeUluZGV4LCBzdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQuYXBwZW5kKCJcbj09PT09PT09PT09PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09
PT09PT09XG4iKTsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgaGlzdG9yeS5zaXpl
KCk7ICsraW5kZXgpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoZHVtcEhpc3RvcnlJdGVtKGhpc3Rv
cnlbaW5kZXhdLCA4LCBpbmRleCA9PSBjdXJyZW50RW50cnlJbmRleCkpOworICAgIHJlc3VsdC5h
cHBlbmQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4i
KTsKK30KKworc3RyaW5nIGR1bXBBbGxCYWNrRm9yd2FyZExpc3RzKFdlYlRlc3REZWxlZ2F0ZSog
ZGVsZWdhdGUpCit7CisgICAgc3RyaW5nIHJlc3VsdDsKKyAgICB1bnNpZ25lZCB3aW5kb3dDb3Vu
dCA9IGRlbGVnYXRlLT53aW5kb3dDb3VudCgpOworICAgIGZwcmludGYoc3RkZXJyLCAid2luZG93
Q291bnQgPSAlZFxuIiwgd2luZG93Q291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB3aW5kb3dDb3VudDsgKytpKSB7CisgICAgICAgIHNpemVfdCBjdXJyZW50RW50cnlJbmRleCA9
IDA7CisgICAgICAgIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4gaGlzdG9yeTsKKyAgICAgICAg
ZGVsZWdhdGUtPmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KGksICZoaXN0b3J5LCAmY3VycmVudEVu
dHJ5SW5kZXgpOworICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0KGhpc3RvcnksIGN1cnJlbnRF
bnRyeUluZGV4LCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CiAK
IFdlYlRlc3RQcm94eUJhc2U6OldlYlRlc3RQcm94eUJhc2UoKQpAQCAtMzAxLDYgKzQ1NCwzMyBA
QCBXZWJSZWN0IFdlYlRlc3RQcm94eUJhc2U6OnBhaW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fcGFpbnRSZWN0OwogfQogCitzdHJpbmcgV2ViVGVzdFByb3h5QmFzZTo6Y2FwdHVyZVRyZWUo
Ym9vbCBkZWJ1Z1JlbmRlclRyZWUpCit7CisgICAgV2ViU2NyaXB0Q29udHJvbGxlcjo6Zmx1c2hD
b25zb2xlTWVzc2FnZXMoKTsKKworICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCA9IG1fdGVzdElu
dGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFzVGV4dCgpOworICAgIGJvb2wgc2hv
dWxkRHVtcEFzUHJpbnRlZCA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+aXNQcmlu
dGluZygpOworICAgIGJvb2wgcmVjdXJzaXZlID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBXZWJGcmFtZSogZnJhbWUg
PSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOworICAgIHN0cmluZyBk
YXRhVXRmODsKKyAgICBpZiAoc2hvdWxkRHVtcEFzVGV4dCkKKyAgICAgICAgZGF0YVV0ZjggPSBz
aG91bGREdW1wQXNQcmludGVkID8gZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoZnJhbWUsIHJlY3Vy
c2l2ZSkgOiBkdW1wRnJhbWVzQXNUZXh0KGZyYW1lLCByZWN1cnNpdmUpOworICAgIGVsc2Ugewor
ICAgICAgICBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0Q29udHJvbHMgcmVuZGVyVGV4dEJlaGF2aW9y
ID0gV2ViRnJhbWU6OlJlbmRlckFzVGV4dE5vcm1hbDsKKyAgICAgICAgaWYgKHNob3VsZER1bXBB
c1ByaW50ZWQpCisgICAgICAgICAgICByZW5kZXJUZXh0QmVoYXZpb3IgfD0gV2ViRnJhbWU6OlJl
bmRlckFzVGV4dFByaW50aW5nOworICAgICAgICBpZiAoZGVidWdSZW5kZXJUcmVlKQorICAgICAg
ICAgICAgcmVuZGVyVGV4dEJlaGF2aW9yIHw9IFdlYkZyYW1lOjpSZW5kZXJBc1RleHREZWJ1ZzsK
KyAgICAgICAgZGF0YVV0ZjggPSBmcmFtZS0+cmVuZGVyVHJlZUFzVGV4dChyZW5kZXJUZXh0QmVo
YXZpb3IpLnV0ZjgoKTsKKyAgICAgICAgZGF0YVV0ZjggKz0gZHVtcEZyYW1lU2Nyb2xsUG9zaXRp
b24oZnJhbWUsIHJlY3Vyc2l2ZSk7CisgICAgfQorCisgICAgaWYgKG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpKQorICAgICAgICBkYXRh
VXRmOCArPSBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cyhtX2RlbGVnYXRlKTsKKworICAgIHJldHVy
biBkYXRhVXRmODsKK30KKwogdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRMb2dDb25zb2xlT3V0
cHV0KGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2xvZ0NvbnNvbGVPdXRwdXQgPSBlbmFibGVkOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggMTMzNmIw
MDhhNTRiODcxYTU1MjI3ZDEyMDljODI5MjQ5MTZjNGQ3MS4uMWE2YmNkODdlODMzYTFiNjBjMDE3
NWMzM2RhODMyYmM0MmE0ZTQ3NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiV2ViSURCRmFjdG9yeS5o
IgogI2luY2x1ZGUgIldlYlRlc3RpbmdTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViUnVudGltZUZl
YXR1cmVzLmgiCi0jaW5jbHVkZSAiV2ViU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldl
YlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViVGVzdFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViVGVz
dFJ1bm5lci5oIgpAQCAtMzkyLDE4MiArMzkxLDE0IEBAIHZvaWQgVGVzdFNoZWxsOjp0ZXN0VGlt
ZWRPdXQoKQogICAgIHRlc3RGaW5pc2hlZCh3ZWJWaWV3SG9zdCgpKTsKIH0KIAotc3RhdGljIHN0
cmluZyBkdW1wRG9jdW1lbnRUZXh0KFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICAvLyBXZSB1c2Ug
dGhlIGRvY3VtZW50IGVsZW1lbnQncyB0ZXh0IGluc3RlYWQgb2YgdGhlIGJvZHkgdGV4dCBoZXJl
IGJlY2F1c2UKLSAgICAvLyBub3QgYWxsIGRvY3VtZW50cyBoYXZlIGEgYm9keSwgc3VjaCBhcyBY
TUwgZG9jdW1lbnRzLgotICAgIFdlYkVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50RWxlbWVudC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZygpOwotICAgIHJldHVybiBkb2N1bWVudEVsZW1l
bnQuaW5uZXJUZXh0KCkudXRmOCgpOwotfQotCi1zdGF0aWMgc3RyaW5nIGR1bXBGcmFtZXNBc1Rl
eHQoV2ViRnJhbWUqIGZyYW1lLCBib29sIHJlY3Vyc2l2ZSkKLXsKLSAgICBzdHJpbmcgcmVzdWx0
OwotCi0gICAgLy8gQWRkIGhlYWRlciBmb3IgYWxsIGJ1dCB0aGUgbWFpbiBmcmFtZS4gU2tpcCBl
bXB0eSBmcmFtZXMuCi0gICAgaWYgKGZyYW1lLT5wYXJlbnQoKSAmJiAhZnJhbWUtPmRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
XG4tLS0tLS0tLVxuRnJhbWU6ICciKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFtZS0+dW5p
cXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCInXG4tLS0t
LS0tLVxuIik7Ci0gICAgfQotCi0gICAgcmVzdWx0LmFwcGVuZChkdW1wRG9jdW1lbnRUZXh0KGZy
YW1lKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLQotICAgIGlmIChyZWN1cnNpdmUpIHsK
LSAgICAgICAgZm9yIChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoZHVtcEZyYW1lc0FzVGV4dChjaGlsZCwgcmVjdXJzaXZlKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHN0cmluZyBkdW1wRnJhbWVzQXNQcmludGVkVGV4dChX
ZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0K
LSAgICAvLyBDYW5ub3QgZG8gcHJpbnRlZCBmb3JtYXQgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4g
SFRNTAotICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIHN0cmluZygpOwotCi0gICAgLy8gQWRkIGhlYWRlciBmb3IgYWxsIGJ1dCB0aGUg
bWFpbiBmcmFtZS4gU2tpcCBlbXB0eSBmcmFtZXMuCi0gICAgaWYgKGZyYW1lLT5wYXJlbnQoKSAm
JiAhZnJhbWUtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiXG4tLS0tLS0tLVxuRnJhbWU6ICciKTsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChmcmFtZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXN1
bHQuYXBwZW5kKCInXG4tLS0tLS0tLVxuIik7Ci0gICAgfQotCi0gICAgcmVzdWx0LmFwcGVuZChm
cmFtZS0+cmVuZGVyVHJlZUFzVGV4dChXZWJGcmFtZTo6UmVuZGVyQXNUZXh0UHJpbnRpbmcpLnV0
ZjgoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLQotICAgIGlmIChyZWN1cnNpdmUpIHsK
LSAgICAgICAgZm9yIChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0
aW9uKFdlYkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCi17Ci0gICAgV2ViU2l6ZSBvZmZz
ZXQgPSBmcmFtZS0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgaWYgKG9mZnNldC53aWR0aCA+IDAgfHwg
b2Zmc2V0LmhlaWdodCA+IDApIHsKLSAgICAgICAgaWYgKGZyYW1lLT5wYXJlbnQoKSkKLSAgICAg
ICAgICAgIHByaW50ZigiZnJhbWUgJyVzJyAiLCBmcmFtZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBwcmludGYoInNjcm9sbGVkIHRvICVkLCVkXG4iLCBvZmZzZXQud2lk
dGgsIG9mZnNldC5oZWlnaHQpOwotICAgIH0KLQotICAgIGlmICghcmVjdXJzaXZlKQotICAgICAg
ICByZXR1cm47Ci0gICAgZm9yIChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgZHVtcEZyYW1l
U2Nyb2xsUG9zaXRpb24oY2hpbGQsIHJlY3Vyc2l2ZSk7Ci19Ci0KLXN0cnVjdCBUb0xvd2VyIHsK
LSAgICBjaGFyMTYgb3BlcmF0b3IoKShjaGFyMTYgYykgeyByZXR1cm4gdG9sb3dlcihjKTsgfQot
fTsKLQotLy8gRklYTUU6IEVsaW1pbmF0ZSBzdGQ6OnRyYW5zZm9ybSgpLCBzdGQ6OnZlY3Rvciwg
YW5kIHN0ZDo6c29ydCgpLgotCi0vLyBSZXR1cm5zIFRydWUgaWYgaXRlbTEgPCBpdGVtMi4KLXN0
YXRpYyBib29sIEhpc3RvcnlJdGVtQ29tcGFyZUxlc3MoY29uc3QgV2ViSGlzdG9yeUl0ZW0mIGl0
ZW0xLCBjb25zdCBXZWJIaXN0b3J5SXRlbSYgaXRlbTIpCi17Ci0gICAgc3RyaW5nMTYgdGFyZ2V0
MSA9IGl0ZW0xLnRhcmdldCgpOwotICAgIHN0cmluZzE2IHRhcmdldDIgPSBpdGVtMi50YXJnZXQo
KTsKLSAgICBzdGQ6OnRyYW5zZm9ybSh0YXJnZXQxLmJlZ2luKCksIHRhcmdldDEuZW5kKCksIHRh
cmdldDEuYmVnaW4oKSwgVG9Mb3dlcigpKTsKLSAgICBzdGQ6OnRyYW5zZm9ybSh0YXJnZXQyLmJl
Z2luKCksIHRhcmdldDIuZW5kKCksIHRhcmdldDIuYmVnaW4oKSwgVG9Mb3dlcigpKTsKLSAgICBy
ZXR1cm4gdGFyZ2V0MSA8IHRhcmdldDI7Ci19Ci0KLXN0YXRpYyBzdHJpbmcgbm9ybWFsaXplTGF5
b3V0VGVzdFVSTEludGVybmFsKGNvbnN0IHN0cmluZyYgdXJsKQotewotICAgIHN0cmluZyByZXN1
bHQgPSB1cmw7Ci0gICAgc2l6ZV90IHBvczsKLSAgICBpZiAoIXVybC5maW5kKGZpbGVVcmxQYXR0
ZXJuKSAmJiAoKHBvcyA9IHVybC5maW5kKGxheW91dFRlc3RzUGF0dGVybikpICE9IHN0cmluZzo6
bnBvcykpIHsKLSAgICAgICAgLy8gYWRqdXN0IGZpbGUgVVJMcyB0byBtYXRjaCB1cHN0cmVhbSBy
ZXN1bHRzLgotICAgICAgICByZXN1bHQucmVwbGFjZSgwLCBwb3MgKyBsYXlvdXRUZXN0c1BhdHRl
cm5TaXplLCBmaWxlVGVzdFByZWZpeCk7Ci0gICAgfSBlbHNlIGlmICghdXJsLmZpbmQoZGF0YVVy
bFBhdHRlcm4pKSB7Ci0gICAgICAgIC8vIFVSTC1lc2NhcGUgZGF0YSBVUkxzIHRvIG1hdGNoIHJl
c3VsdHMgdXBzdHJlYW0uCi0gICAgICAgIHN0cmluZyBwYXRoID0gdXJsLnN1YnN0cihkYXRhVXJs
UGF0dGVyblNpemUpOwotICAgICAgICByZXN1bHQucmVwbGFjZShkYXRhVXJsUGF0dGVyblNpemUs
IHVybC5sZW5ndGgoKSwgcGF0aCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBzdHJpbmcgZHVtcEhpc3RvcnlJdGVtKGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBpdGVtLCBp
bnQgaW5kZW50LCBib29sIGlzQ3VycmVudCkKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotCi0gICAg
aWYgKGlzQ3VycmVudCkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCJjdXJyLT4iKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmRlbnQgLSA2LCAnICcpOyAvLyA2ID09ICJjdXJyLT4iLmxlbmd0
aCgpCi0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoaW5kZW50LCAnICcpOwotCi0g
ICAgc3RyaW5nIHVybCA9IG5vcm1hbGl6ZUxheW91dFRlc3RVUkxJbnRlcm5hbChpdGVtLnVybFN0
cmluZygpLnV0ZjgoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCh1cmwpOwotICAgIGlmICghaXRlbS50
YXJnZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiIChpbiBmcmFtZSBc
IiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udGFyZ2V0KCkudXRmOCgpKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiXCIpIik7Ci0gICAgfQotICAgIGlmIChpdGVtLmlzVGFyZ2V0SXRl
bSgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCIgICoqbmF2IHRhcmdldCoqIik7Ci0gICAgcmVz
dWx0LmFwcGVuZCgiXG4iKTsKLQotICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4m
IGNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbigpOwotICAgIGlmICghY2hpbGRyZW4uaXNFbXB0eSgp
KSB7Ci0gICAgICAgIC8vIE11c3Qgc29ydCB0byBlbGltaW5hdGUgYXJiaXRyYXJ5IHJlc3VsdCBv
cmRlcmluZyB3aGljaCBkZWZlYXRzCi0gICAgICAgIC8vIHJlcHJvZHVjaWJsZSB0ZXN0aW5nLgot
ICAgICAgICAvLyBGSVhNRTogV2ViVmVjdG9yIHNob3VsZCBwcm9iYWJseSBqdXN0IGJlIGEgc3Rk
Ojp2ZWN0b3IhIQotICAgICAgICBzdGQ6OnZlY3RvcjxXZWJIaXN0b3J5SXRlbT4gc29ydGVkQ2hp
bGRyZW47Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBzb3J0ZWRDaGlsZHJlbi5wdXNoX2JhY2soY2hpbGRyZW5baV0pOwot
ICAgICAgICBzdGQ6OnNvcnQoc29ydGVkQ2hpbGRyZW4uYmVnaW4oKSwgc29ydGVkQ2hpbGRyZW4u
ZW5kKCksIEhpc3RvcnlJdGVtQ29tcGFyZUxlc3MpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNvcnRlZENoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcmVzdWx0ICs9
IGR1bXBIaXN0b3J5SXRlbShzb3J0ZWRDaGlsZHJlbltpXSwgaW5kZW50ICsgNCwgZmFsc2UpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBCYWNrRm9y
d2FyZExpc3QoY29uc3QgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyJiBuYXZpZ2F0aW9uQ29udHJv
bGxlciwgc3RyaW5nJiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LmFwcGVuZCgiXG49PT09PT09PT09
PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIik7Ci0gICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5Q291bnQoKTsgKytp
bmRleCkgewotICAgICAgICBpbnQgY3VycmVudEluZGV4ID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIu
bGFzdENvbW1pdHRlZEVudHJ5SW5kZXgoKTsKLSAgICAgICAgV2ViSGlzdG9yeUl0ZW0gaGlzdG9y
eUl0ZW0gPSBuYXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUF0SW5kZXgoaW5kZXgpLT5jb250ZW50
U3RhdGUoKTsKLSAgICAgICAgaWYgKGhpc3RvcnlJdGVtLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBoaXN0b3J5SXRlbS5pbml0aWFsaXplKCk7Ci0gICAgICAgICAgICBoaXN0b3J5SXRlbS5zZXRV
UkxTdHJpbmcobmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50cnlBdEluZGV4KGluZGV4KS0+VVJMKCku
c3BlYygpLnV0ZjE2KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZHVtcEhp
c3RvcnlJdGVtKGhpc3RvcnlJdGVtLCA4LCBpbmRleCA9PSBjdXJyZW50SW5kZXgpKTsKLSAgICB9
Ci0gICAgcmVzdWx0LmFwcGVuZCgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT1cbiIpOwotfQotCi1zdHJpbmcgVGVzdFNoZWxsOjpkdW1wQWxsQmFja0Zvcndh
cmRMaXN0cygpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV93aW5kb3dMaXN0LnNpemUoKTsgKytpKQotICAgICAgICBkdW1wQmFja0ZvcndhcmRM
aXN0KCptX3dpbmRvd0xpc3RbaV0tPm5hdmlnYXRpb25Db250cm9sbGVyKCksIHJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogewotICAgIFdl
YlNjcmlwdENvbnRyb2xsZXI6OmZsdXNoQ29uc29sZU1lc3NhZ2VzKCk7Ci0KICAgICAvLyBEdW1w
IHRoZSByZXF1ZXN0ZWQgcmVwcmVzZW50YXRpb24uCiAgICAgV2ViRnJhbWUqIGZyYW1lID0gbV93
ZWJWaWV3LT5tYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0g
ICAgYm9vbCBzaG91bGREdW1wQXNUZXh0ID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wQXNUZXh0KCk7CiAgICAgYm9vbCBzaG91bGREdW1wQXNBdWRpbyA9IG1fdGVz
dEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFzQXVkaW8oKTsKICAgICBib29s
IHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5zaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cygpOwotICAgIGJvb2wgc2hvdWxkRHVtcEFz
UHJpbnRlZCA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+aXNQcmludGluZygpOwog
ICAgIGJvb2wgZHVtcGVkQW55dGhpbmcgPSBmYWxzZTsKIAogICAgIGlmIChzaG91bGREdW1wQXNB
dWRpbykgewpAQCAtNTg0LDMzICs0MTUsOSBAQCB2b2lkIFRlc3RTaGVsbDo6ZHVtcCgpCiAgICAg
aWYgKG1fcGFyYW1zLmR1bXBUcmVlKSB7CiAgICAgICAgIGR1bXBlZEFueXRoaW5nID0gdHJ1ZTsK
ICAgICAgICAgbV9wcmludGVyLmhhbmRsZVRleHRIZWFkZXIoKTsKLSAgICAgICAgLy8gVGV4dCBv
dXRwdXQ6IHRoZSB0ZXN0IHBhZ2UgY2FuIHJlcXVlc3QgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1
dAotICAgICAgICAvLyB3aGljaCB3ZSBoYW5kbGUgaGVyZS4KLSAgICAgICAgaWYgKCFzaG91bGRE
dW1wQXNUZXh0KSB7Ci0gICAgICAgICAgICAvLyBQbGFpbiB0ZXh0IHBhZ2VzIHNob3VsZCBiZSBk
dW1wZWQgYXMgdGV4dAotICAgICAgICAgICAgc3RyaW5nIG1pbWVUeXBlID0gZnJhbWUtPmRhdGFT
b3VyY2UoKS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLnV0ZjgoKTsKLSAgICAgICAgICAgIGlmICht
aW1lVHlwZSA9PSAidGV4dC9wbGFpbiIpIHsKLSAgICAgICAgICAgICAgICBzaG91bGREdW1wQXNU
ZXh0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyA9
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzaG91bGREdW1w
QXNUZXh0KSB7Ci0gICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Ci0gICAgICAgICAg
ICBzdHJpbmcgZGF0YVV0ZjggPSBzaG91bGREdW1wQXNQcmludGVkID8gZHVtcEZyYW1lc0FzUHJp
bnRlZFRleHQoZnJhbWUsIHJlY3Vyc2l2ZSkgOiBkdW1wRnJhbWVzQXNUZXh0KGZyYW1lLCByZWN1
cnNpdmUpOwotICAgICAgICAgICAgaWYgKGZ3cml0ZShkYXRhVXRmOC5jX3N0cigpLCAxLCBkYXRh
VXRmOC5zaXplKCksIHN0ZG91dCkgIT0gZGF0YVV0Zjguc2l6ZSgpKQotICAgICAgICAgICAgICAg
IEZBVEFMKCJTaG9ydCB3cml0ZSB0byBzdGRvdXQsIGRpc2sgZnVsbD9cbiIpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIFdlYkZyYW1lOjpSZW5kZXJBc1RleHRDb250cm9scyByZW5kZXJU
ZXh0QmVoYXZpb3IgPSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0Tm9ybWFsOwotICAgICAgICAgICAg
aWYgKHNob3VsZER1bXBBc1ByaW50ZWQpCi0gICAgICAgICAgICAgICAgcmVuZGVyVGV4dEJlaGF2
aW9yIHw9IFdlYkZyYW1lOjpSZW5kZXJBc1RleHRQcmludGluZzsKLSAgICAgICAgICAgIGlmICht
X3BhcmFtcy5kZWJ1Z1JlbmRlclRyZWUpCi0gICAgICAgICAgICAgICAgcmVuZGVyVGV4dEJlaGF2
aW9yIHw9IFdlYkZyYW1lOjpSZW5kZXJBc1RleHREZWJ1ZzsKLSAgICAgICAgICAgIHByaW50Zigi
JXMiLCBmcmFtZS0+cmVuZGVyVHJlZUFzVGV4dChyZW5kZXJUZXh0QmVoYXZpb3IpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUgPSBtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCk7Ci0gICAg
ICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihmcmFtZSwgcmVjdXJzaXZlKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wQmFja0ZvcndhcmRMaXN0KCkpCi0gICAgICAgICAgICBwcmludGYoIiVzIiwgZHVtcEFsbEJh
Y2tGb3J3YXJkTGlzdHMoKS5jX3N0cigpKTsKKyAgICAgICAgc3RyaW5nIGRhdGFVdGY4ID0gbV93
ZWJWaWV3SG9zdC0+cHJveHkoKS0+Y2FwdHVyZVRyZWUobV9wYXJhbXMuZGVidWdSZW5kZXJUcmVl
KTsKKyAgICAgICAgaWYgKGZ3cml0ZShkYXRhVXRmOC5jX3N0cigpLCAxLCBkYXRhVXRmOC5zaXpl
KCksIHN0ZG91dCkgIT0gZGF0YVV0Zjguc2l6ZSgpKQorICAgICAgICAgICAgRkFUQUwoIlNob3J0
IHdyaXRlIHRvIHN0ZG91dCwgZGlzayBmdWxsP1xuIik7CiAgICAgfQogICAgIGlmIChkdW1wZWRB
bnl0aGluZyAmJiBtX3BhcmFtcy5wcmludFNlcGFyYXRvcnMpCiAgICAgICAgIG1fcHJpbnRlci5o
YW5kbGVUZXh0Rm9vdGVyKCk7CkBAIC04MTAsMyArNjE3LDI0IEBAIGludCBUZXN0U2hlbGw6Ondp
bmRvd0NvdW50KCkKIHsKICAgICByZXR1cm4gbV93aW5kb3dMaXN0LnNpemUoKTsKIH0KKwordm9p
ZCBUZXN0U2hlbGw6OmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KHNpemVfdCB3aW5kb3dJbmRleCwg
V2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiogaGlzdG9yeSwgc2l6ZV90KiBjdXJyZW50RW50cnlJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaGlzdG9yeSk7CisgICAgQVNTRVJUKGN1cnJlbnRFbnRyeUlu
ZGV4KTsKKyAgICBpZiAod2luZG93SW5kZXggPj0gbV93aW5kb3dMaXN0LnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlciYgbmF2aWdhdGlvbkNvbnRy
b2xsZXIgPSAqbV93aW5kb3dMaXN0W3dpbmRvd0luZGV4XS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIo
KTsKKyAgICBzaXplX3QgZW50cnlDb3VudCA9IG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5Q291
bnQoKTsKKyAgICBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IHJlc3VsdChlbnRyeUNvdW50KTsK
KyAgICAqY3VycmVudEVudHJ5SW5kZXggPSBuYXZpZ2F0aW9uQ29udHJvbGxlci5sYXN0Q29tbWl0
dGVkRW50cnlJbmRleCgpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBlbnRy
eUNvdW50OyArK2luZGV4KSB7CisgICAgICAgIFdlYkhpc3RvcnlJdGVtIGhpc3RvcnlJdGVtID0g
bmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50cnlBdEluZGV4KGluZGV4KS0+Y29udGVudFN0YXRlKCk7
CisgICAgICAgIGlmIChoaXN0b3J5SXRlbS5pc051bGwoKSkgeworICAgICAgICAgICAgaGlzdG9y
eUl0ZW0uaW5pdGlhbGl6ZSgpOworICAgICAgICAgICAgaGlzdG9yeUl0ZW0uc2V0VVJMU3RyaW5n
KG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5QXRJbmRleChpbmRleCktPlVSTCgpLnNwZWMoKS51
dGYxNigpKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRbaW5kZXhdID0gaGlzdG9yeUl0ZW07
CisgICAgfQorICAgIGhpc3RvcnktPnN3YXAocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXggZDEzYTMyOWIzNzg1OWZiYjI1MzhiMDQ5ZGI2
ZTgxNGU0MDc0YzE1Yy4uMzA5MWNlNzE5YWZhNjE0NDliMTM3NTNkZTNkNmE5NWRkOTc1ODc2YyAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTE2NSw2ICsx
NjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbG9zZVdpbmRvdyhXZWJWaWV3SG9zdCopOwogICAg
IHZvaWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7CiAgICAgaW50IHdpbmRvd0NvdW50KCk7Cisg
ICAgdm9pZCBjYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXplX3Qgd2luZG93SW5kZXgsIFdlYktp
dDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0+Kiwgc2l6ZV90KiBjdXJyZW50RW50
cnlJbmRleCk7CiAgICAgc3RhdGljIHZvaWQgcmVzaXplV2luZG93Rm9yVGVzdChXZWJWaWV3SG9z
dCosIGNvbnN0IFdlYktpdDo6V2ViVVJMJik7CiAKICAgICB2b2lkIHNob3dEZXZUb29scygpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGM1
NDU5MzBhYWQzZTZiMmNmYThhZjVmNTRkM2QwOWJkYjI3NzUwOTAuLmZkY2I3ZWIzNmJmNjE5ZWMy
NGFhMTg0ZTNiNDU1NGY2MjQ3MDIwZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTkyMyw2ICs5MjMsMTEgQEAgYm9vbCBXZWJWaWV3SG9z
dDo6YWxsb3dFeHRlcm5hbFBhZ2VzKCkKICAgICByZXR1cm4gbV9zaGVsbC0+YWxsb3dFeHRlcm5h
bFBhZ2VzKCk7CiB9CiAKK3ZvaWQgV2ViVmlld0hvc3Q6OmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93
KHNpemVfdCB3aW5kb3dJbmRleCwgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiogaGlzdG9yeSwg
c2l6ZV90KiBjdXJyZW50RW50cnlJbmRleCkKK3sKKyAgICBtX3NoZWxsLT5jYXB0dXJlSGlzdG9y
eUZvcldpbmRvdyh3aW5kb3dJbmRleCwgaGlzdG9yeSwgY3VycmVudEVudHJ5SW5kZXgpOworfQor
CiAvLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdlYlZpZXdIb3N0OjpXZWJWaWV3SG9zdChUZXN0
U2hlbGwqIHNoZWxsKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmgKaW5kZXggZDNhZTljMjM0YTYzNmE1YzZjODRjZWVmM2JkYjkzZDk3MjgyODYwZC4uZjczMDJl
ZTJjZTAzM2Y3Nzk2YTg5OWQ5YTdhZWYwYzg5ZGMxNWM2NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCkBAIC0xNzAsNiArMTcwLDcgQEAgY2xhc3MgV2Vi
Vmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpX
ZWJGcmFtZUNsaWVudCwKICAgICB2aXJ0dWFsIHZvaWQgcmVsb2FkKCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIGxvYWRVUkxGb3JGcmFtZShjb25zdCBXZWJLaXQ6OldlYlVSTCYsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBmcmFtZU5hbWUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBhbGxv
d0V4dGVybmFsUGFnZXMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZUhpc3Rv
cnlGb3JXaW5kb3coc2l6ZV90IHdpbmRvd0luZGV4LCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6
OldlYkhpc3RvcnlJdGVtPiosIHNpemVfdCogY3VycmVudEVudHJ5SW5kZXgpIE9WRVJSSURFOwog
CiAgICAgLy8gTmF2aWdhdGlvbkhvc3QKICAgICB2aXJ0dWFsIGJvb2wgbmF2aWdhdGUoY29uc3Qg
VGVzdE5hdmlnYXRpb25FbnRyeSYsIGJvb2wgcmVsb2FkKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187846</attachid>
            <date>2013-02-12 05:49:22 -0800</date>
            <delta_ts>2013-02-12 06:36:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109575-20130212144551.patch</filename>
            <type>text/plain</type>
            <size>34984</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDdmYzIzMDY0YTAxNzkyNjVhMTEwNWRiMmVmM2U0M2U1
NjZjMmM3NS4uODVhZDM2MGJmMWEwNWJjMjk4MmJhYzg4NzA3NDBjMjMwMWIxNGQ1ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0
IEBACiAyMDEzLTAyLTEyICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgog
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSB0ZXh0IGR1bXAgZ2VuZXJhdGlvbiB0byBUZXN0UnVu
bmVyIGxpYnJhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0RGVsZWdh
dGU6OmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmg6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5oLgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6bm9ybWFsaXplTGF5b3V0VGVzdFVSTCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9UZXN0Q29tbW9uLmg6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcDoKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNoZWNrUmVzcG9uc2VNaW1lVHlwZSk6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OnNob3VsZER1bXBBc1RleHQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6c2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFRlc3RSdW5u
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlBlcm1pc3Npb25zLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2Vi
VGVzdFByb3h5QmFzZTo6Y2FwdHVyZVRyZWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAg
KFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgIChUZXN0U2hlbGw6OmNhcHR1cmVIaXN0b3J5Rm9y
V2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoK
KyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OmNhcHR1cmVIaXN0b3J5Rm9y
V2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5o
OgorCisyMDEzLTAyLTEyICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSB3ZWJydGMgbW9ja3MgdG8gdGVzdHJ1bm5lciBsaWJy
YXJ5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkw
NDEKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKaW5kZXggMzA0NjA1
Y2ViNjhkOGRjOTU2NzgyNzlhOWMwOGFjYTRjMjJhNmIwYS4uNDFiMTg0MzBkOWMxMjZmNmNiYTQ5
OTVjOTY0YzhlZTY4N2IyMTg2NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuZ3lwaQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZS5neXBpCkBAIC03OSw2ICs3OSw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50LmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAnLAogICAgICAgICAgICAg
J2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgnLApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERl
bGVnYXRlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1Ymxp
Yy9XZWJUZXN0RGVsZWdhdGUuaAppbmRleCA3YTA2M2EzZTBhMGE3Y2Y5MmUyYzZjNzcwMTYxNDVl
ZjUxMGVjODc4Li44MmJhYjU3ODIxMGU1Yzg2MTJkYjA3YzYwNTMyN2E4MjQ0MTI3YzViIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0RGVsZWdhdGUuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaApAQCAtMzksNiArMzksNyBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbjsKIGNsYXNzIFdlYkdhbWVw
YWRzOworY2xhc3MgV2ViSGlzdG9yeUl0ZW07CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJV
UkxFcnJvcjsKIH0KQEAgLTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbG9hZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2Vi
S2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBh
bGxvd0V4dGVybmFsUGFnZXMoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
YXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXplX3Qgd2luZG93SW5kZXgsIFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0+KiBoaXN0b3J5LCBzaXplX3QqIGN1cnJlbnRFbnRy
eUluZGV4KSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKaW5kZXggMzUw
ZTEzNzE0OTY1Zjc1OWYwYzJmMGI0ZDJkMTExMDUzZGRkZWY4Zi4uYjIyZWQ5NDlmOGI3NmRhMmEx
OGY0NjU1MzkzYjdlNzA3Mjk1NjMyNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKQEAg
LTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFpbnRSZWN0KGNvbnN0IFdlYktp
dDo6V2ViUmVjdCYpOwogICAgIFdlYktpdDo6V2ViUmVjdCBwYWludFJlY3QoKSBjb25zdDsKIAor
ICAgIHN0ZDo6c3RyaW5nIGNhcHR1cmVUcmVlKGJvb2wgZGVidWdSZW5kZXJUcmVlKTsKKwogICAg
IHZvaWQgc2V0TG9nQ29uc29sZU91dHB1dChib29sIGVuYWJsZWQpOwogCiBwcm90ZWN0ZWQ6CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1Ymxp
Yy9XZWJUZXN0UnVubmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmgKaW5kZXggYjQwZDZmOTAyYzA1MjNlYmI3YjI4Mzcw
OGZkNDhkMjY1MGZlZDVmYi4uODhkNGFlNWI3YTY2NThjMDk5ZDY5MWY5MGMxNTI3NmU0YzY4NTk5
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9w
dWJsaWMvV2ViVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RSdW5uZXIuaApAQCAtNDAsMTQgKzQwLDEwIEBAIG5h
bWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKIAogY2xhc3MgV2ViVGVzdFJ1bm5lciB7CiBwdWJsaWM6
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cygpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50KiB3ZWJQZXJtaXNz
aW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJk
TGlzdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcFNlbGVjdGlvblJl
Y3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHRlc3RSZXBhaW50KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBzd2VlcEhvcml6b250YWxseSgpIGNvbnN0ID0gMDsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RD
b21tb24uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhhMWExYzYxMzUxOGQ4YTMwYzE4MmIyNDJiYjhk
ZDg3M2I2ZjMxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdENvbW1vbi5oIgorCit1c2luZyBuYW1lc3BhY2Ug
c3RkOworCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK25hbWVzcGFjZSB7CisKK2NvbnN0
IGNoYXIgbGF5b3V0VGVzdHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Citjb25zdCBzdHJp
bmc6OnNpemVfdHlwZSBsYXlvdXRUZXN0c1BhdHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3Rz
UGF0dGVybikgLSAxOworY29uc3QgY2hhciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Citj
b25zdCBjaGFyIGZpbGVUZXN0UHJlZml4W10gPSAiKGZpbGUgdGVzdCk6IjsKK2NvbnN0IGNoYXIg
ZGF0YVVybFBhdHRlcm5bXSA9ICJkYXRhOiI7Citjb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRh
VXJsUGF0dGVyblNpemUgPSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKKworfQorCitzdHJp
bmcgbm9ybWFsaXplTGF5b3V0VGVzdFVSTChjb25zdCBzdHJpbmcmIHVybCkKK3sKKyAgICBzdHJp
bmcgcmVzdWx0ID0gdXJsOworICAgIHNpemVfdCBwb3M7CisgICAgaWYgKCF1cmwuZmluZChmaWxl
VXJsUGF0dGVybikgJiYgKChwb3MgPSB1cmwuZmluZChsYXlvdXRUZXN0c1BhdHRlcm4pKSAhPSBz
dHJpbmc6Om5wb3MpKSB7CisgICAgICAgIC8vIGFkanVzdCBmaWxlIFVSTHMgdG8gbWF0Y2ggdXBz
dHJlYW0gcmVzdWx0cy4KKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoMCwgcG9zICsgbGF5b3V0VGVz
dHNQYXR0ZXJuU2l6ZSwgZmlsZVRlc3RQcmVmaXgpOworICAgIH0gZWxzZSBpZiAoIXVybC5maW5k
KGRhdGFVcmxQYXR0ZXJuKSkgeworICAgICAgICAvLyBVUkwtZXNjYXBlIGRhdGEgVVJMcyB0byBt
YXRjaCByZXN1bHRzIHVwc3RyZWFtLgorICAgICAgICBzdHJpbmcgcGF0aCA9IHVybC5zdWJzdHIo
ZGF0YVVybFBhdHRlcm5TaXplKTsKKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoZGF0YVVybFBhdHRl
cm5TaXplLCB1cmwubGVuZ3RoKCksIHBhdGgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9UZXN0Q29tbW9uLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9UZXN0Q29tbW9uLmgKaW5kZXggYjFmNzZmODRlMjc2NGUxY2IwYjRiYTQxNzAz
OTljY2I3ZGVlNTJkMS4uZjVmMDBmMjYzNTg4OTdmNjEzMjY2ZWFjNzY3M2EzMzEyYWY2MjE5ZCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdENvbW1vbi5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL1Rlc3RDb21tb24uaApAQCAtMzQsMTMgKzM0LDIwIEBACiAjaW5jbHVkZSA8YmFzZS9j
b21waWxlcl9zcGVjaWZpYy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJDb21tb24uaD4KICNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZz4KIAogI2lmIGRlZmluZWQoV0lOMzIpCiAj
ZGVmaW5lIHNucHJpbnRmKHN0ciwgc2l6ZSwgLi4uKSBfc25wcmludGZfcyhzdHIsIHNpemUsIHNp
emUsIF9fVkFfQVJHU19fKQogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKKwog
aW5saW5lIGJvb2wgaXNBU0NJSUFscGhhKGNoYXIgY2gpIHsgcmV0dXJuIChjaCB8IDB4MjApID49
ICdhJyAmJiAoY2ggfCAweDIwKSA8PSAneic7IH0KIAogaW5saW5lIGJvb2wgaXNOb3RBU0NJSUFs
cGhhKGNoYXIgY2gpIHsgcmV0dXJuICFpc0FTQ0lJQWxwaGEoY2gpOyB9CiAKK3N0ZDo6c3RyaW5n
IG5vcm1hbGl6ZUxheW91dFRlc3RVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7CisKK30KKwog
I2VuZGlmIC8vIFRlc3RDb21tb25faApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCBlZjJmYzJj
MzRlYmVkNmI4MTMyMDYyOTE2MThlMTEyN2E0NDdkNGQ5Li5mODk4ZTFjZTMwYjhkZGMzMjUwNDM4
NDMzNTRhZDNhMDM0ZjhkMGJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgi
CisjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJFbGVtZW50Lmgi
CkBAIC01NSw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJEYXRhLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlBvaW50Lmg+CisjaW5jbHVkZSA8cHVibGlj
L1dlYlVSTFJlc3BvbnNlLmg+CiAKICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChB
TkRST0lEKQogI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCIKQEAgLTQyNSw4ICs0
MjcsMjIgQEAgYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7CiB9CiAKLWJvb2wgVGVzdFJ1
bm5lcjo6c2hvdWxkRHVtcEFzVGV4dCgpIGNvbnN0Cit2b2lkIFRlc3RSdW5uZXI6OmNoZWNrUmVz
cG9uc2VNaW1lVHlwZSgpCiB7CisgICAgLy8gVGV4dCBvdXRwdXQ6IHRoZSB0ZXN0IHBhZ2UgY2Fu
IHJlcXVlc3QgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1dAorICAgIC8vIHdoaWNoIHdlIGhhbmRs
ZSBoZXJlLgorICAgIGlmICghbV9kdW1wQXNUZXh0KSB7CisgICAgICAgIHN0cmluZyBtaW1lVHlw
ZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmRhdGFTb3VyY2UoKS0+cmVzcG9uc2UoKS5taW1l
VHlwZSgpLnV0ZjgoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikgewor
ICAgICAgICAgICAgbV9kdW1wQXNUZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHMgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUZXN0UnVu
bmVyOjpzaG91bGREdW1wQXNUZXh0KCkKK3sKKyAgICBjaGVja1Jlc3BvbnNlTWltZVR5cGUoKTsK
ICAgICByZXR1cm4gbV9kdW1wQXNUZXh0OwogfQogCkBAIC00MzUsOCArNDUxLDkgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGREdW1wQXNUZXh0KGJvb2wgdmFsdWUpCiAgICAgbV9kdW1wQXNU
ZXh0ID0gdmFsdWU7CiB9CiAKLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSBjb25zdAorYm9vbCBUZXN0UnVubmVyOjpzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0
cygpCiB7CisgICAgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7CiAgICAgcmV0dXJuIG1fZ2VuZXJh
dGVQaXhlbFJlc3VsdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAppbmRleCBiNDRhMzdkNzJkYjZm
ZjE3YjMwOTkzYmQwNDc4YTg4ZjU2OWExMTk0Li42NjA1ODQ1ODAzYzRmMmYwOTRkNWJkNmU4ZmY1
NDEzOGRjN2RhZjRlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCkBAIC03MSwyMCArNzEsMjAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGVzdElzUnVubmluZyhib29sKTsKIAogICAgIC8vIFdlYlRlc3RS
dW5uZXIgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc1RleHQo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIHNob3VsZER1bXBBc0F1ZGlvKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBj
b25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYlBlcm1pc3Npb25DbGllbnQqIHdlYlBlcm1pc3Np
b25zKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcFNl
bGVjdGlvblJlY3QoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdGVzdFJlcGFp
bnQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHko
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmludGluZygpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgLy8gTWV0aG9kcyB1c2VkIGJ5IFdlYlRlc3RQcm94eUJhc2UuCisgICAg
Ym9vbCBzaG91bGREdW1wQXNUZXh0KCk7CisgICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRM
aXN0KCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Q7
CiAgICAgdm9pZCBzaG93RGV2VG9vbHMoKTsKICAgICB2b2lkIHNldFNob3VsZER1bXBBc1RleHQo
Ym9vbCk7CiAgICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhib29sKTsKQEAg
LTQ4Niw2ICs0ODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAg
Ly8gSW50ZXJuYWwgaGVscGVycworICAgIHZvaWQgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7CiAg
ICAgdm9pZCBjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpOwogICAgIGNsYXNzIE5v
dGlmeURvbmVUaW1lZE91dFRhc2s6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+IHsK
ICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAKaW5kZXggYTE1ZDliOTI0
NThjMjVjN2NmZTQzZTMyMWU2OWJhNjE2OTM2OTkyOC4uMTYxY2JjNzU0YTI5NGZiNjBkNTBjYTY4
MDE0OGE0NDFmZGFkMjBiYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBlcm1pc3Npb25zLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25z
LmgiCiAKKyNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRl
LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VVJMLmg+CkBAIC0zOSwzMiArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViVGVzdFJ1bm5lciB7CiAKLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IGNoYXIgbGF5b3V0VGVz
dHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBs
YXlvdXRUZXN0c1BhdHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3RzUGF0dGVybikgLSAxOwot
Y29uc3QgY2hhciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Ci1jb25zdCBjaGFyIGZpbGVU
ZXN0UHJlZml4W10gPSAiKGZpbGUgdGVzdCk6IjsKLWNvbnN0IGNoYXIgZGF0YVVybFBhdHRlcm5b
XSA9ICJkYXRhOiI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRhVXJsUGF0dGVyblNpemUg
PSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKLQotc3RyaW5nIG5vcm1hbGl6ZUxheW91dFRl
c3RVUkwoY29uc3Qgc3RyaW5nJiB1cmwpCi17Ci0gICAgc3RyaW5nIHJlc3VsdCA9IHVybDsKLSAg
ICBzaXplX3QgcG9zOwotICAgIGlmICghdXJsLmZpbmQoZmlsZVVybFBhdHRlcm4pICYmICgocG9z
ID0gdXJsLmZpbmQobGF5b3V0VGVzdHNQYXR0ZXJuKSkgIT0gc3RyaW5nOjpucG9zKSkgewotICAg
ICAgICAvLyBhZGp1c3QgZmlsZSBVUkxzIHRvIG1hdGNoIHVwc3RyZWFtIHJlc3VsdHMuCi0gICAg
ICAgIHJlc3VsdC5yZXBsYWNlKDAsIHBvcyArIGxheW91dFRlc3RzUGF0dGVyblNpemUsIGZpbGVU
ZXN0UHJlZml4KTsKLSAgICB9IGVsc2UgaWYgKCF1cmwuZmluZChkYXRhVXJsUGF0dGVybikpIHsK
LSAgICAgICAgLy8gVVJMLWVzY2FwZSBkYXRhIFVSTHMgdG8gbWF0Y2ggcmVzdWx0cyB1cHN0cmVh
bS4KLSAgICAgICAgc3RyaW5nIHBhdGggPSB1cmwuc3Vic3RyKGRhdGFVcmxQYXR0ZXJuU2l6ZSk7
Ci0gICAgICAgIHJlc3VsdC5yZXBsYWNlKGRhdGFVcmxQYXR0ZXJuU2l6ZSwgdXJsLmxlbmd0aCgp
LCBwYXRoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfQotCiBXZWJQZXJtaXNz
aW9uczo6V2ViUGVybWlzc2lvbnMoKQogICAgIDogbV9kZWxlZ2F0ZSgwKQogewpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBy
b3h5LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlRlc3RQcm94eS5jcHAKaW5kZXggMDgxOGQyMWYxY2Q4NzU2NzNiYjVlNGQwOTE5ZjZlZTMzNDRh
YjRmNC4uYWI4NWU0YjI4MDllOWExYTFjZjBmYThiZWU2NDA5NzVkMTI0MzRiMyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBy
b3h5LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9XZWJUZXN0UHJveHkuY3BwCkBAIC00MywxNyArNDMsMjEgQEAKICNpbmNsdWRlICJXZWJDYWNo
ZWRVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRl
ICJXZWJEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJX
ZWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJIaXN0b3J5
SXRlbS5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5QYXJhbXMu
aCIKICNpbmNsdWRlICJXZWJQcmludFBhcmFtcy5oIgogI2luY2x1ZGUgIldlYlJhbmdlLmgiCisj
aW5jbHVkZSAiV2ViU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0
ZS5oIgogI2luY2x1ZGUgIldlYlRlc3RJbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiV2ViVGVzdFJ1
bm5lci5oIgogI2luY2x1ZGUgIldlYlVzZXJNZWRpYUNsaWVudE1vY2suaCIKICNpbmNsdWRlICJX
ZWJWaWV3LmgiCisjaW5jbHVkZSA8Y2N0eXBlPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTEVycm9yLmg+CiAjaW5jbHVkZSA8cHVibGljL1dl
YlVSTFJlcXVlc3QuaD4KQEAgLTI1NCw2ICsyNTgsMTU2IEBAIGNvbnN0IGNoYXIqIHdlYk5hdmln
YXRpb25UeXBlVG9TdHJpbmcoV2ViTmF2aWdhdGlvblR5cGUgdHlwZSkKICAgICByZXR1cm4gaWxs
ZWdhbFN0cmluZzsKIH0KIAorc3RyaW5nIGR1bXBEb2N1bWVudFRleHQoV2ViRnJhbWUqIGZyYW1l
KQoreworICAgIC8vIFdlIHVzZSB0aGUgZG9jdW1lbnQgZWxlbWVudCdzIHRleHQgaW5zdGVhZCBv
ZiB0aGUgYm9keSB0ZXh0IGhlcmUgYmVjYXVzZQorICAgIC8vIG5vdCBhbGwgZG9jdW1lbnRzIGhh
dmUgYSBib2R5LCBzdWNoIGFzIFhNTCBkb2N1bWVudHMuCisgICAgV2ViRWxlbWVudCBkb2N1bWVu
dEVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAo
ZG9jdW1lbnRFbGVtZW50LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gc3RyaW5nKCk7CisgICAg
cmV0dXJuIGRvY3VtZW50RWxlbWVudC5pbm5lclRleHQoKS51dGY4KCk7Cit9CisKK3N0cmluZyBk
dW1wRnJhbWVzQXNUZXh0KFdlYkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCit7CisgICAg
c3RyaW5nIHJlc3VsdDsKKworICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1haW4g
ZnJhbWUuIFNraXAgZW1wdHkgZnJhbWVzLgorICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYgIWZy
YW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiJ1xuLS0tLS0tLS1cbiIpOworICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoZHVtcERv
Y3VtZW50VGV4dChmcmFtZSkpOworICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisKKyAgICBpZiAo
cmVjdXJzaXZlKSB7CisgICAgICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGR1bXBGcmFtZXNBc1RleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cmluZyBkdW1wRnJhbWVzQXNQcmludGVk
VGV4dChXZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQoreworICAgIHN0cmluZyByZXN1
bHQ7CisKKyAgICAvLyBDYW5ub3QgZG8gcHJpbnRlZCBmb3JtYXQgZm9yIGFueXRoaW5nIG90aGVy
IHRoYW4gSFRNTAorICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIHN0cmluZygpOworCisgICAgLy8gQWRkIGhlYWRlciBmb3IgYWxsIGJ1
dCB0aGUgbWFpbiBmcmFtZS4gU2tpcCBlbXB0eSBmcmFtZXMuCisgICAgaWYgKGZyYW1lLT5wYXJl
bnQoKSAmJiAhZnJhbWUtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkuaXNOdWxsKCkpIHsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4tLS0tLS0tLVxuRnJhbWU6ICciKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChmcmFtZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKCInXG4tLS0tLS0tLVxuIik7CisgICAgfQorCisgICAgcmVzdWx0LmFw
cGVuZChmcmFtZS0+cmVuZGVyVHJlZUFzVGV4dChXZWJGcmFtZTo6UmVuZGVyQXNUZXh0UHJpbnRp
bmcpLnV0ZjgoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKworICAgIGlmIChyZWN1cnNp
dmUpIHsKKyAgICAgICAgZm9yIChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cmluZyBkdW1wRnJhbWVTY3JvbGxQb3Np
dGlvbihXZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQoreworICAgIHN0cmluZyByZXN1
bHQ7CisgICAgV2ViU2l6ZSBvZmZzZXQgPSBmcmFtZS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaWYg
KG9mZnNldC53aWR0aCA+IDAgfHwgb2Zmc2V0LmhlaWdodCA+IDApIHsKKyAgICAgICAgaWYgKGZy
YW1lLT5wYXJlbnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZygiZnJhbWUgJyIpICsg
ZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpICsgIicgIjsKKyAgICAgICAgY2hhciBk
YXRhWzEwMF07CisgICAgICAgIHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgInNjcm9sbGVk
IHRvICVkLCVkXG4iLCBvZmZzZXQud2lkdGgsIG9mZnNldC5oZWlnaHQpOworICAgICAgICByZXN1
bHQgKz0gZGF0YTsKKyAgICB9CisKKyAgICBpZiAoIXJlY3Vyc2l2ZSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBmb3IgKFdlYkZyYW1lKiBjaGlsZCA9IGZyYW1lLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICByZXN1bHQgKz0g
ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oY2hpbGQsIHJlY3Vyc2l2ZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RydWN0IFRvTG93ZXIgeworICAgIGNoYXIxNiBvcGVyYXRvcigpKGNoYXIx
NiBjKSB7IHJldHVybiB0b2xvd2VyKGMpOyB9Cit9OworCisvLyBSZXR1cm5zIFRydWUgaWYgaXRl
bTEgPCBpdGVtMi4KK2Jvb2wgSGlzdG9yeUl0ZW1Db21wYXJlTGVzcyhjb25zdCBXZWJIaXN0b3J5
SXRlbSYgaXRlbTEsIGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBpdGVtMikKK3sKKyAgICBzdHJpbmcx
NiB0YXJnZXQxID0gaXRlbTEudGFyZ2V0KCk7CisgICAgc3RyaW5nMTYgdGFyZ2V0MiA9IGl0ZW0y
LnRhcmdldCgpOworICAgIHN0ZDo6dHJhbnNmb3JtKHRhcmdldDEuYmVnaW4oKSwgdGFyZ2V0MS5l
bmQoKSwgdGFyZ2V0MS5iZWdpbigpLCBUb0xvd2VyKCkpOworICAgIHN0ZDo6dHJhbnNmb3JtKHRh
cmdldDIuYmVnaW4oKSwgdGFyZ2V0Mi5lbmQoKSwgdGFyZ2V0Mi5iZWdpbigpLCBUb0xvd2VyKCkp
OworICAgIHJldHVybiB0YXJnZXQxIDwgdGFyZ2V0MjsKK30KKworc3RyaW5nIGR1bXBIaXN0b3J5
SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYgaXRlbSwgaW50IGluZGVudCwgYm9vbCBpc0N1cnJl
bnQpCit7CisgICAgc3RyaW5nIHJlc3VsdDsKKworICAgIGlmIChpc0N1cnJlbnQpIHsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiY3Vyci0+Iik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaW5kZW50
IC0gNiwgJyAnKTsgLy8gNiA9PSAiY3Vyci0+Ii5sZW5ndGgoKQorICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHQuYXBwZW5kKGluZGVudCwgJyAnKTsKKworICAgIHN0cmluZyB1cmwgPSBub3JtYWxp
emVMYXlvdXRUZXN0VVJMKGl0ZW0udXJsU3RyaW5nKCkudXRmOCgpKTsKKyAgICByZXN1bHQuYXBw
ZW5kKHVybCk7CisgICAgaWYgKCFpdGVtLnRhcmdldCgpLmlzRW1wdHkoKSkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCIgKGluIGZyYW1lIFwiIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRl
bS50YXJnZXQoKS51dGY4KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIikiKTsKKyAgICB9
CisgICAgaWYgKGl0ZW0uaXNUYXJnZXRJdGVtKCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAg
KipuYXYgdGFyZ2V0KioiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworCisgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiYgY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuKCk7Cisg
ICAgaWYgKCFjaGlsZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gTXVzdCBzb3J0IHRvIGVs
aW1pbmF0ZSBhcmJpdHJhcnkgcmVzdWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVhdHMKKyAgICAgICAg
Ly8gcmVwcm9kdWNpYmxlIHRlc3RpbmcuCisgICAgICAgIC8vIEZJWE1FOiBXZWJWZWN0b3Igc2hv
dWxkIHByb2JhYmx5IGp1c3QgYmUgYSBzdGQ6OnZlY3RvciEhCisgICAgICAgIHN0ZDo6dmVjdG9y
PFdlYkhpc3RvcnlJdGVtPiBzb3J0ZWRDaGlsZHJlbjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHNvcnRlZENoaWxkcmVu
LnB1c2hfYmFjayhjaGlsZHJlbltpXSk7CisgICAgICAgIHN0ZDo6c29ydChzb3J0ZWRDaGlsZHJl
bi5iZWdpbigpLCBzb3J0ZWRDaGlsZHJlbi5lbmQoKSwgSGlzdG9yeUl0ZW1Db21wYXJlTGVzcyk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc29ydGVkQ2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICByZXN1bHQgKz0gZHVtcEhpc3RvcnlJdGVtKHNvcnRlZENoaWxkcmVu
W2ldLCBpbmRlbnQgKyA0LCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRl
bT4mIGhpc3RvcnksIHNpemVfdCBjdXJyZW50RW50cnlJbmRleCwgc3RyaW5nJiByZXN1bHQpCit7
CisgICAgcmVzdWx0LmFwcGVuZCgiXG49PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9
PT09PT09PT09PT09PVxuIik7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGhpc3Rv
cnkuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICByZXN1bHQuYXBwZW5kKGR1bXBIaXN0b3J5SXRl
bShoaXN0b3J5W2luZGV4XSwgOCwgaW5kZXggPT0gY3VycmVudEVudHJ5SW5kZXgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PVxuIik7Cit9CisKK3N0cmluZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cyhXZWJUZXN0RGVs
ZWdhdGUqIGRlbGVnYXRlKQoreworICAgIHN0cmluZyByZXN1bHQ7CisgICAgdW5zaWduZWQgd2lu
ZG93Q291bnQgPSBkZWxlZ2F0ZS0+d2luZG93Q291bnQoKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IndpbmRvd0NvdW50ID0gJWRcbiIsIHdpbmRvd0NvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgd2luZG93Q291bnQ7ICsraSkgeworICAgICAgICBzaXplX3QgY3VycmVudEVudHJ5
SW5kZXggPSAwOworICAgICAgICBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IGhpc3Rvcnk7Cisg
ICAgICAgIGRlbGVnYXRlLT5jYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhpLCAmaGlzdG9yeSwgJmN1
cnJlbnRFbnRyeUluZGV4KTsKKyAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdChoaXN0b3J5LCBj
dXJyZW50RW50cnlJbmRleCwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogfQogCiBXZWJUZXN0UHJveHlCYXNlOjpXZWJUZXN0UHJveHlCYXNlKCkKQEAgLTMwMSw2ICs0
NTUsMzMgQEAgV2ViUmVjdCBXZWJUZXN0UHJveHlCYXNlOjpwYWludFJlY3QoKSBjb25zdAogICAg
IHJldHVybiBtX3BhaW50UmVjdDsKIH0KIAorc3RyaW5nIFdlYlRlc3RQcm94eUJhc2U6OmNhcHR1
cmVUcmVlKGJvb2wgZGVidWdSZW5kZXJUcmVlKQoreworICAgIFdlYlNjcmlwdENvbnRyb2xsZXI6
OmZsdXNoQ29uc29sZU1lc3NhZ2VzKCk7CisKKyAgICBib29sIHNob3VsZER1bXBBc1RleHQgPSBt
X3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBc1RleHQoKTsKKyAgICBi
b29sIHNob3VsZER1bXBBc1ByaW50ZWQgPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCkt
PmlzUHJpbnRpbmcoKTsKKyAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdEludGVyZmFjZXMtPnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgV2ViRnJhbWUq
IGZyYW1lID0gbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKKyAgICBz
dHJpbmcgZGF0YVV0Zjg7CisgICAgaWYgKHNob3VsZER1bXBBc1RleHQpCisgICAgICAgIGRhdGFV
dGY4ID0gc2hvdWxkRHVtcEFzUHJpbnRlZCA/IGR1bXBGcmFtZXNBc1ByaW50ZWRUZXh0KGZyYW1l
LCByZWN1cnNpdmUpIDogZHVtcEZyYW1lc0FzVGV4dChmcmFtZSwgcmVjdXJzaXZlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgV2ViRnJhbWU6OlJlbmRlckFzVGV4dENvbnRyb2xzIHJlbmRlclRleHRC
ZWhhdmlvciA9IFdlYkZyYW1lOjpSZW5kZXJBc1RleHROb3JtYWw7CisgICAgICAgIGlmIChzaG91
bGREdW1wQXNQcmludGVkKQorICAgICAgICAgICAgcmVuZGVyVGV4dEJlaGF2aW9yIHw9IFdlYkZy
YW1lOjpSZW5kZXJBc1RleHRQcmludGluZzsKKyAgICAgICAgaWYgKGRlYnVnUmVuZGVyVHJlZSkK
KyAgICAgICAgICAgIHJlbmRlclRleHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0
RGVidWc7CisgICAgICAgIGRhdGFVdGY4ID0gZnJhbWUtPnJlbmRlclRyZWVBc1RleHQocmVuZGVy
VGV4dEJlaGF2aW9yKS51dGY4KCk7CisgICAgICAgIGRhdGFVdGY4ICs9IGR1bXBGcmFtZVNjcm9s
bFBvc2l0aW9uKGZyYW1lLCByZWN1cnNpdmUpOworICAgIH0KKworICAgIGlmIChtX3Rlc3RJbnRl
cmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3QoKSkKKyAgICAg
ICAgZGF0YVV0ZjggKz0gZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMobV9kZWxlZ2F0ZSk7CisKKyAg
ICByZXR1cm4gZGF0YVV0Zjg7Cit9CisKIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6c2V0TG9nQ29u
c29sZU91dHB1dChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9sb2dDb25zb2xlT3V0cHV0ID0gZW5h
YmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4
IDEzMzZiMDA4YTU0Yjg3MWE1NTIyN2QxMjA5YzgyOTI0OTE2YzRkNzEuLjFhNmJjZDg3ZTgzM2Ex
YjYwYzAxNzVjMzNkYTgzMmJjNDJhNGU0NzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIldlYklEQkZh
Y3RvcnkuaCIKICNpbmNsdWRlICJXZWJUZXN0aW5nU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlJ1
bnRpbWVGZWF0dXJlcy5oIgotI2luY2x1ZGUgIldlYlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJXZWJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldlYlRlc3RQcm94eS5oIgogI2luY2x1ZGUg
IldlYlRlc3RSdW5uZXIuaCIKQEAgLTM5MiwxODIgKzM5MSwxNCBAQCB2b2lkIFRlc3RTaGVsbDo6
dGVzdFRpbWVkT3V0KCkKICAgICB0ZXN0RmluaXNoZWQod2ViVmlld0hvc3QoKSk7CiB9CiAKLXN0
YXRpYyBzdHJpbmcgZHVtcERvY3VtZW50VGV4dChXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgLy8g
V2UgdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50J3MgdGV4dCBpbnN0ZWFkIG9mIHRoZSBib2R5IHRl
eHQgaGVyZSBiZWNhdXNlCi0gICAgLy8gbm90IGFsbCBkb2N1bWVudHMgaGF2ZSBhIGJvZHksIHN1
Y2ggYXMgWE1MIGRvY3VtZW50cy4KLSAgICBXZWJFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmIChkb2N1bWVudEVsZW1l
bnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBzdHJpbmcoKTsKLSAgICByZXR1cm4gZG9jdW1l
bnRFbGVtZW50LmlubmVyVGV4dCgpLnV0ZjgoKTsKLX0KLQotc3RhdGljIHN0cmluZyBkdW1wRnJh
bWVzQXNUZXh0KFdlYkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCi17Ci0gICAgc3RyaW5n
IHJlc3VsdDsKLQotICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1haW4gZnJhbWUu
IFNraXAgZW1wdHkgZnJhbWVzLgotICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYgIWZyYW1lLT5k
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZnJh
bWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
J1xuLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoZHVtcERvY3VtZW50
VGV4dChmcmFtZSkpOwotICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBpZiAocmVjdXJz
aXZlKSB7Ci0gICAgICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGR1bXBGcmFtZXNBc1RleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBzdHJpbmcgZHVtcEZyYW1lc0FzUHJpbnRl
ZFRleHQoV2ViRnJhbWUqIGZyYW1lLCBib29sIHJlY3Vyc2l2ZSkKLXsKLSAgICBzdHJpbmcgcmVz
dWx0OwotCi0gICAgLy8gQ2Fubm90IGRvIHByaW50ZWQgZm9ybWF0IGZvciBhbnl0aGluZyBvdGhl
ciB0aGFuIEhUTUwKLSAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkp
Ci0gICAgICAgIHJldHVybiBzdHJpbmcoKTsKLQotICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBi
dXQgdGhlIG1haW4gZnJhbWUuIFNraXAgZW1wdHkgZnJhbWVzLgotICAgIGlmIChmcmFtZS0+cGFy
ZW50KCkgJiYgIWZyYW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiJ1xuLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAgIHJlc3VsdC5h
cHBlbmQoZnJhbWUtPnJlbmRlclRyZWVBc1RleHQoV2ViRnJhbWU6OlJlbmRlckFzVGV4dFByaW50
aW5nKS51dGY4KCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBpZiAocmVjdXJz
aXZlKSB7Ci0gICAgICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGR1bXBGcmFtZXNBc1ByaW50ZWRUZXh0KGNoaWxkLCByZWN1cnNpdmUpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3Jv
bGxQb3NpdGlvbihXZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQotewotICAgIFdlYlNp
emUgb2Zmc2V0ID0gZnJhbWUtPnNjcm9sbE9mZnNldCgpOwotICAgIGlmIChvZmZzZXQud2lkdGgg
PiAwIHx8IG9mZnNldC5oZWlnaHQgPiAwKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+cGFyZW50KCkp
Ci0gICAgICAgICAgICBwcmludGYoImZyYW1lICclcycgIiwgZnJhbWUtPnVuaXF1ZU5hbWUoKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcHJpbnRmKCJzY3JvbGxlZCB0byAlZCwlZFxuIiwgb2Zm
c2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlY3Vyc2l2ZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKGNoaWxkLCByZWN1cnNpdmUpOwotfQotCi1zdHJ1Y3QgVG9M
b3dlciB7Ci0gICAgY2hhcjE2IG9wZXJhdG9yKCkoY2hhcjE2IGMpIHsgcmV0dXJuIHRvbG93ZXIo
Yyk7IH0KLX07Ci0KLS8vIEZJWE1FOiBFbGltaW5hdGUgc3RkOjp0cmFuc2Zvcm0oKSwgc3RkOjp2
ZWN0b3IsIGFuZCBzdGQ6OnNvcnQoKS4KLQotLy8gUmV0dXJucyBUcnVlIGlmIGl0ZW0xIDwgaXRl
bTIuCi1zdGF0aWMgYm9vbCBIaXN0b3J5SXRlbUNvbXBhcmVMZXNzKGNvbnN0IFdlYkhpc3RvcnlJ
dGVtJiBpdGVtMSwgY29uc3QgV2ViSGlzdG9yeUl0ZW0mIGl0ZW0yKQotewotICAgIHN0cmluZzE2
IHRhcmdldDEgPSBpdGVtMS50YXJnZXQoKTsKLSAgICBzdHJpbmcxNiB0YXJnZXQyID0gaXRlbTIu
dGFyZ2V0KCk7Ci0gICAgc3RkOjp0cmFuc2Zvcm0odGFyZ2V0MS5iZWdpbigpLCB0YXJnZXQxLmVu
ZCgpLCB0YXJnZXQxLmJlZ2luKCksIFRvTG93ZXIoKSk7Ci0gICAgc3RkOjp0cmFuc2Zvcm0odGFy
Z2V0Mi5iZWdpbigpLCB0YXJnZXQyLmVuZCgpLCB0YXJnZXQyLmJlZ2luKCksIFRvTG93ZXIoKSk7
Ci0gICAgcmV0dXJuIHRhcmdldDEgPCB0YXJnZXQyOwotfQotCi1zdGF0aWMgc3RyaW5nIG5vcm1h
bGl6ZUxheW91dFRlc3RVUkxJbnRlcm5hbChjb25zdCBzdHJpbmcmIHVybCkKLXsKLSAgICBzdHJp
bmcgcmVzdWx0ID0gdXJsOwotICAgIHNpemVfdCBwb3M7Ci0gICAgaWYgKCF1cmwuZmluZChmaWxl
VXJsUGF0dGVybikgJiYgKChwb3MgPSB1cmwuZmluZChsYXlvdXRUZXN0c1BhdHRlcm4pKSAhPSBz
dHJpbmc6Om5wb3MpKSB7Ci0gICAgICAgIC8vIGFkanVzdCBmaWxlIFVSTHMgdG8gbWF0Y2ggdXBz
dHJlYW0gcmVzdWx0cy4KLSAgICAgICAgcmVzdWx0LnJlcGxhY2UoMCwgcG9zICsgbGF5b3V0VGVz
dHNQYXR0ZXJuU2l6ZSwgZmlsZVRlc3RQcmVmaXgpOwotICAgIH0gZWxzZSBpZiAoIXVybC5maW5k
KGRhdGFVcmxQYXR0ZXJuKSkgewotICAgICAgICAvLyBVUkwtZXNjYXBlIGRhdGEgVVJMcyB0byBt
YXRjaCByZXN1bHRzIHVwc3RyZWFtLgotICAgICAgICBzdHJpbmcgcGF0aCA9IHVybC5zdWJzdHIo
ZGF0YVVybFBhdHRlcm5TaXplKTsKLSAgICAgICAgcmVzdWx0LnJlcGxhY2UoZGF0YVVybFBhdHRl
cm5TaXplLCB1cmwubGVuZ3RoKCksIHBhdGgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgc3RyaW5nIGR1bXBIaXN0b3J5SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYg
aXRlbSwgaW50IGluZGVudCwgYm9vbCBpc0N1cnJlbnQpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsK
LQotICAgIGlmIChpc0N1cnJlbnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiY3Vyci0+Iik7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaW5kZW50IC0gNiwgJyAnKTsgLy8gNiA9PSAiY3Vyci0+
Ii5sZW5ndGgoKQotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQuYXBwZW5kKGluZGVudCwgJyAn
KTsKLQotICAgIHN0cmluZyB1cmwgPSBub3JtYWxpemVMYXlvdXRUZXN0VVJMSW50ZXJuYWwoaXRl
bS51cmxTdHJpbmcoKS51dGY4KCkpOwotICAgIHJlc3VsdC5hcHBlbmQodXJsKTsKLSAgICBpZiAo
IWl0ZW0udGFyZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiAoaW4g
ZnJhbWUgXCIiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnRhcmdldCgpLnV0ZjgoKSk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiKSIpOwotICAgIH0KLSAgICBpZiAoaXRlbS5pc1Rh
cmdldEl0ZW0oKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAqKm5hdiB0YXJnZXQqKiIpOwot
ICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBjb25zdCBXZWJWZWN0b3I8V2ViSGlzdG9y
eUl0ZW0+JiBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBNdXN0IHNvcnQgdG8gZWxpbWluYXRlIGFyYml0cmFyeSBy
ZXN1bHQgb3JkZXJpbmcgd2hpY2ggZGVmZWF0cwotICAgICAgICAvLyByZXByb2R1Y2libGUgdGVz
dGluZy4KLSAgICAgICAgLy8gRklYTUU6IFdlYlZlY3RvciBzaG91bGQgcHJvYmFibHkganVzdCBi
ZSBhIHN0ZDo6dmVjdG9yISEKLSAgICAgICAgc3RkOjp2ZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IHNv
cnRlZENoaWxkcmVuOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgc29ydGVkQ2hpbGRyZW4ucHVzaF9iYWNrKGNoaWxkcmVu
W2ldKTsKLSAgICAgICAgc3RkOjpzb3J0KHNvcnRlZENoaWxkcmVuLmJlZ2luKCksIHNvcnRlZENo
aWxkcmVuLmVuZCgpLCBIaXN0b3J5SXRlbUNvbXBhcmVMZXNzKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzb3J0ZWRDaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJl
c3VsdCArPSBkdW1wSGlzdG9yeUl0ZW0oc29ydGVkQ2hpbGRyZW5baV0sIGluZGVudCArIDQsIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBkdW1w
QmFja0ZvcndhcmRMaXN0KGNvbnN0IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlciYgbmF2aWdhdGlv
bkNvbnRyb2xsZXIsIHN0cmluZyYgcmVzdWx0KQotewotICAgIHJlc3VsdC5hcHBlbmQoIlxuPT09
PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIpOwotICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUNvdW50
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IG5hdmlnYXRpb25Db250
cm9sbGVyLmxhc3RDb21taXR0ZWRFbnRyeUluZGV4KCk7Ci0gICAgICAgIFdlYkhpc3RvcnlJdGVt
IGhpc3RvcnlJdGVtID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50cnlBdEluZGV4KGluZGV4KS0+
Y29udGVudFN0YXRlKCk7Ci0gICAgICAgIGlmIChoaXN0b3J5SXRlbS5pc051bGwoKSkgewotICAg
ICAgICAgICAgaGlzdG9yeUl0ZW0uaW5pdGlhbGl6ZSgpOwotICAgICAgICAgICAgaGlzdG9yeUl0
ZW0uc2V0VVJMU3RyaW5nKG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5QXRJbmRleChpbmRleCkt
PlVSTCgpLnNwZWMoKS51dGYxNigpKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5k
KGR1bXBIaXN0b3J5SXRlbShoaXN0b3J5SXRlbSwgOCwgaW5kZXggPT0gY3VycmVudEluZGV4KSk7
Ci0gICAgfQotICAgIHJlc3VsdC5hcHBlbmQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09XG4iKTsKLX0KLQotc3RyaW5nIFRlc3RTaGVsbDo6ZHVtcEFsbEJh
Y2tGb3J3YXJkTGlzdHMoKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fd2luZG93TGlzdC5zaXplKCk7ICsraSkKLSAgICAgICAgZHVtcEJhY2tG
b3J3YXJkTGlzdCgqbV93aW5kb3dMaXN0W2ldLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLCByZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKIHsK
LSAgICBXZWJTY3JpcHRDb250cm9sbGVyOjpmbHVzaENvbnNvbGVNZXNzYWdlcygpOwotCiAgICAg
Ly8gRHVtcCB0aGUgcmVxdWVzdGVkIHJlcHJlc2VudGF0aW9uLgogICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwotICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEFzVGV4dCgpOwogICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8g
PSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBc0F1ZGlvKCk7CiAg
ICAgYm9vbCBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IG1fdGVzdEludGVyZmFjZXMtPnRl
c3RSdW5uZXIoKS0+c2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoKTsKLSAgICBib29sIHNob3Vs
ZER1bXBBc1ByaW50ZWQgPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmlzUHJpbnRp
bmcoKTsKICAgICBib29sIGR1bXBlZEFueXRoaW5nID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxk
RHVtcEFzQXVkaW8pIHsKQEAgLTU4NCwzMyArNDE1LDkgQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAo
KQogICAgIGlmIChtX3BhcmFtcy5kdW1wVHJlZSkgewogICAgICAgICBkdW1wZWRBbnl0aGluZyA9
IHRydWU7CiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXh0SGVhZGVyKCk7Ci0gICAgICAgIC8v
IFRleHQgb3V0cHV0OiB0aGUgdGVzdCBwYWdlIGNhbiByZXF1ZXN0IGRpZmZlcmVudCB0eXBlcyBv
ZiBvdXRwdXQKLSAgICAgICAgLy8gd2hpY2ggd2UgaGFuZGxlIGhlcmUuCi0gICAgICAgIGlmICgh
c2hvdWxkRHVtcEFzVGV4dCkgewotICAgICAgICAgICAgLy8gUGxhaW4gdGV4dCBwYWdlcyBzaG91
bGQgYmUgZHVtcGVkIGFzIHRleHQKLSAgICAgICAgICAgIHN0cmluZyBtaW1lVHlwZSA9IGZyYW1l
LT5kYXRhU291cmNlKCktPnJlc3BvbnNlKCkubWltZVR5cGUoKS51dGY4KCk7Ci0gICAgICAgICAg
ICBpZiAobWltZVR5cGUgPT0gInRleHQvcGxhaW4iKSB7Ci0gICAgICAgICAgICAgICAgc2hvdWxk
RHVtcEFzVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2hv
dWxkRHVtcEFzVGV4dCkgewotICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUgPSBtX3Rlc3RJbnRl
cmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOwotICAg
ICAgICAgICAgc3RyaW5nIGRhdGFVdGY4ID0gc2hvdWxkRHVtcEFzUHJpbnRlZCA/IGR1bXBGcmFt
ZXNBc1ByaW50ZWRUZXh0KGZyYW1lLCByZWN1cnNpdmUpIDogZHVtcEZyYW1lc0FzVGV4dChmcmFt
ZSwgcmVjdXJzaXZlKTsKLSAgICAgICAgICAgIGlmIChmd3JpdGUoZGF0YVV0ZjguY19zdHIoKSwg
MSwgZGF0YVV0Zjguc2l6ZSgpLCBzdGRvdXQpICE9IGRhdGFVdGY4LnNpemUoKSkKLSAgICAgICAg
ICAgICAgICBGQVRBTCgiU2hvcnQgd3JpdGUgdG8gc3Rkb3V0LCBkaXNrIGZ1bGw/XG4iKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0Q29udHJvbHMg
cmVuZGVyVGV4dEJlaGF2aW9yID0gV2ViRnJhbWU6OlJlbmRlckFzVGV4dE5vcm1hbDsKLSAgICAg
ICAgICAgIGlmIChzaG91bGREdW1wQXNQcmludGVkKQotICAgICAgICAgICAgICAgIHJlbmRlclRl
eHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0UHJpbnRpbmc7Ci0gICAgICAgICAg
ICBpZiAobV9wYXJhbXMuZGVidWdSZW5kZXJUcmVlKQotICAgICAgICAgICAgICAgIHJlbmRlclRl
eHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0RGVidWc7Ci0gICAgICAgICAgICBw
cmludGYoIiVzIiwgZnJhbWUtPnJlbmRlclRyZWVBc1RleHQocmVuZGVyVGV4dEJlaGF2aW9yKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlID0gbV90ZXN0SW50ZXJm
YWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygp
OwotICAgICAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oZnJhbWUsIHJlY3Vyc2l2ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICAgICAgcHJpbnRmKCIlcyIsIGR1
bXBBbGxCYWNrRm9yd2FyZExpc3RzKCkuY19zdHIoKSk7CisgICAgICAgIHN0cmluZyBkYXRhVXRm
OCA9IG1fd2ViVmlld0hvc3QtPnByb3h5KCktPmNhcHR1cmVUcmVlKG1fcGFyYW1zLmRlYnVnUmVu
ZGVyVHJlZSk7CisgICAgICAgIGlmIChmd3JpdGUoZGF0YVV0ZjguY19zdHIoKSwgMSwgZGF0YVV0
Zjguc2l6ZSgpLCBzdGRvdXQpICE9IGRhdGFVdGY4LnNpemUoKSkKKyAgICAgICAgICAgIEZBVEFM
KCJTaG9ydCB3cml0ZSB0byBzdGRvdXQsIGRpc2sgZnVsbD9cbiIpOwogICAgIH0KICAgICBpZiAo
ZHVtcGVkQW55dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBhcmF0b3JzKQogICAgICAgICBtX3By
aW50ZXIuaGFuZGxlVGV4dEZvb3RlcigpOwpAQCAtODEwLDMgKzYxNywyNCBAQCBpbnQgVGVzdFNo
ZWxsOjp3aW5kb3dDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fd2luZG93TGlzdC5zaXplKCk7CiB9
CisKK3ZvaWQgVGVzdFNoZWxsOjpjYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXplX3Qgd2luZG93
SW5kZXgsIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4qIGhpc3RvcnksIHNpemVfdCogY3VycmVu
dEVudHJ5SW5kZXgpCit7CisgICAgQVNTRVJUKGhpc3RvcnkpOworICAgIEFTU0VSVChjdXJyZW50
RW50cnlJbmRleCk7CisgICAgaWYgKHdpbmRvd0luZGV4ID49IG1fd2luZG93TGlzdC5zaXplKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXImIG5hdmlnYXRp
b25Db250cm9sbGVyID0gKm1fd2luZG93TGlzdFt3aW5kb3dJbmRleF0tPm5hdmlnYXRpb25Db250
cm9sbGVyKCk7CisgICAgc2l6ZV90IGVudHJ5Q291bnQgPSBuYXZpZ2F0aW9uQ29udHJvbGxlci5l
bnRyeUNvdW50KCk7CisgICAgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiByZXN1bHQoZW50cnlD
b3VudCk7CisgICAgKmN1cnJlbnRFbnRyeUluZGV4ID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIubGFz
dENvbW1pdHRlZEVudHJ5SW5kZXgoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgZW50cnlDb3VudDsgKytpbmRleCkgeworICAgICAgICBXZWJIaXN0b3J5SXRlbSBoaXN0b3J5
SXRlbSA9IG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5QXRJbmRleChpbmRleCktPmNvbnRlbnRT
dGF0ZSgpOworICAgICAgICBpZiAoaGlzdG9yeUl0ZW0uaXNOdWxsKCkpIHsKKyAgICAgICAgICAg
IGhpc3RvcnlJdGVtLmluaXRpYWxpemUoKTsKKyAgICAgICAgICAgIGhpc3RvcnlJdGVtLnNldFVS
TFN0cmluZyhuYXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUF0SW5kZXgoaW5kZXgpLT5VUkwoKS5z
cGVjKCkudXRmMTYoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2luZGV4XSA9IGhpc3Rv
cnlJdGVtOworICAgIH0KKyAgICBoaXN0b3J5LT5zd2FwKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IGQxM2EzMjliMzc4NTlmYmIyNTM4
YjA0OWRiNmU4MTRlNDA3NGMxNWMuLjMwOTFjZTcxOWFmYTYxNDQ5YjEzNzUzZGUzZDZhOTVkZDk3
NTg3NmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCkBAIC0x
NjUsNiArMTY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VXaW5kb3coV2ViVmlld0hvc3Qq
KTsKICAgICB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwogICAgIGludCB3aW5kb3dDb3Vu
dCgpOworICAgIHZvaWQgY2FwdHVyZUhpc3RvcnlGb3JXaW5kb3coc2l6ZV90IHdpbmRvd0luZGV4
LCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkhpc3RvcnlJdGVtPiosIHNpemVfdCogY3Vy
cmVudEVudHJ5SW5kZXgpOwogICAgIHN0YXRpYyB2b2lkIHJlc2l6ZVdpbmRvd0ZvclRlc3QoV2Vi
Vmlld0hvc3QqLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYpOwogCiAgICAgdm9pZCBzaG93RGV2VG9v
bHMoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApp
bmRleCBjNTQ1OTMwYWFkM2U2YjJjZmE4YWY1ZjU0ZDNkMDliZGIyNzc1MDkwLi5mZGNiN2ViMzZi
ZjYxOWVjMjRhYTE4NGUzYjQ1NTRmNjI0NzAyMGRiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC05MjMsNiArOTIzLDExIEBAIGJvb2wgV2Vi
Vmlld0hvc3Q6OmFsbG93RXh0ZXJuYWxQYWdlcygpCiAgICAgcmV0dXJuIG1fc2hlbGwtPmFsbG93
RXh0ZXJuYWxQYWdlcygpOwogfQogCit2b2lkIFdlYlZpZXdIb3N0OjpjYXB0dXJlSGlzdG9yeUZv
cldpbmRvdyhzaXplX3Qgd2luZG93SW5kZXgsIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4qIGhp
c3RvcnksIHNpemVfdCogY3VycmVudEVudHJ5SW5kZXgpCit7CisgICAgbV9zaGVsbC0+Y2FwdHVy
ZUhpc3RvcnlGb3JXaW5kb3cod2luZG93SW5kZXgsIGhpc3RvcnksIGN1cnJlbnRFbnRyeUluZGV4
KTsKK30KKwogLy8gUHVibGljIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXZWJWaWV3SG9zdDo6V2ViVmlld0hv
c3QoVGVzdFNoZWxsKiBzaGVsbCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5oCmluZGV4IGQzYWU5YzIzNGE2MzZhNWM2Yzg0Y2VlZjNiZGI5M2Q5NzI4Mjg2MGQu
LmY3MzAyZWUyY2UwMzNmNzc5NmE4OTlkOWE3YWVmMGM4OWRjMTVjNjQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaApAQCAtMTcwLDYgKzE3MCw3IEBAIGNs
YXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdl
YktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCB2b2lkIHJlbG9hZCgpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2ViS2l0OjpXZWJVUkwm
LCBjb25zdCBzdGQ6OnN0cmluZyYgZnJhbWVOYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dFeHRlcm5hbFBhZ2VzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNhcHR1
cmVIaXN0b3J5Rm9yV2luZG93KHNpemVfdCB3aW5kb3dJbmRleCwgV2ViS2l0OjpXZWJWZWN0b3I8
V2ViS2l0OjpXZWJIaXN0b3J5SXRlbT4qLCBzaXplX3QqIGN1cnJlbnRFbnRyeUluZGV4KSBPVkVS
UklERTsKIAogICAgIC8vIE5hdmlnYXRpb25Ib3N0CiAgICAgdmlydHVhbCBib29sIG5hdmlnYXRl
KGNvbnN0IFRlc3ROYXZpZ2F0aW9uRW50cnkmLCBib29sIHJlbG9hZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187857</attachid>
            <date>2013-02-12 06:36:34 -0800</date>
            <delta_ts>2013-02-12 10:52:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109575-20130212153303.patch</filename>
            <type>text/plain</type>
            <size>35089</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDdmYzIzMDY0YTAxNzkyNjVhMTEwNWRiMmVmM2U0M2U1
NjZjMmM3NS4uODVhZDM2MGJmMWEwNWJjMjk4MmJhYzg4NzA3NDBjMjMwMWIxNGQ1ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0
IEBACiAyMDEzLTAyLTEyICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgog
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSB0ZXh0IGR1bXAgZ2VuZXJhdGlvbiB0byBUZXN0UnVu
bmVyIGxpYnJhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0RGVsZWdh
dGU6OmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmg6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5oLgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6bm9ybWFsaXplTGF5b3V0VGVzdFVSTCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9UZXN0Q29tbW9uLmg6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcDoKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNoZWNrUmVzcG9uc2VNaW1lVHlwZSk6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OnNob3VsZER1bXBBc1RleHQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6c2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFRlc3RSdW5u
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlBlcm1pc3Npb25zLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2Vi
VGVzdFByb3h5QmFzZTo6Y2FwdHVyZVRyZWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAg
KFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgIChUZXN0U2hlbGw6OmNhcHR1cmVIaXN0b3J5Rm9y
V2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoK
KyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OmNhcHR1cmVIaXN0b3J5Rm9y
V2luZG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5o
OgorCisyMDEzLTAyLTEyICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSB3ZWJydGMgbW9ja3MgdG8gdGVzdHJ1bm5lciBsaWJy
YXJ5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkw
NDEKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKaW5kZXggMzA0NjA1
Y2ViNjhkOGRjOTU2NzgyNzlhOWMwOGFjYTRjMjJhNmIwYS4uNDFiMTg0MzBkOWMxMjZmNmNiYTQ5
OTVjOTY0YzhlZTY4N2IyMTg2NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuZ3lwaQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZS5neXBpCkBAIC03OSw2ICs3OSw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50LmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAnLAogICAgICAgICAgICAg
J2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgnLApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERl
bGVnYXRlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1Ymxp
Yy9XZWJUZXN0RGVsZWdhdGUuaAppbmRleCA3YTA2M2EzZTBhMGE3Y2Y5MmUyYzZjNzcwMTYxNDVl
ZjUxMGVjODc4Li44MmJhYjU3ODIxMGU1Yzg2MTJkYjA3YzYwNTMyN2E4MjQ0MTI3YzViIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0RGVsZWdhdGUuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaApAQCAtMzksNiArMzksNyBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbjsKIGNsYXNzIFdlYkdhbWVw
YWRzOworY2xhc3MgV2ViSGlzdG9yeUl0ZW07CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJV
UkxFcnJvcjsKIH0KQEAgLTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbG9hZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2Vi
S2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBh
bGxvd0V4dGVybmFsUGFnZXMoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
YXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXplX3Qgd2luZG93SW5kZXgsIFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0+KiBoaXN0b3J5LCBzaXplX3QqIGN1cnJlbnRFbnRy
eUluZGV4KSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKaW5kZXggMzUw
ZTEzNzE0OTY1Zjc1OWYwYzJmMGI0ZDJkMTExMDUzZGRkZWY4Zi4uYjIyZWQ5NDlmOGI3NmRhMmEx
OGY0NjU1MzkzYjdlNzA3Mjk1NjMyNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKQEAg
LTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFpbnRSZWN0KGNvbnN0IFdlYktp
dDo6V2ViUmVjdCYpOwogICAgIFdlYktpdDo6V2ViUmVjdCBwYWludFJlY3QoKSBjb25zdDsKIAor
ICAgIHN0ZDo6c3RyaW5nIGNhcHR1cmVUcmVlKGJvb2wgZGVidWdSZW5kZXJUcmVlKTsKKwogICAg
IHZvaWQgc2V0TG9nQ29uc29sZU91dHB1dChib29sIGVuYWJsZWQpOwogCiBwcm90ZWN0ZWQ6CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1Ymxp
Yy9XZWJUZXN0UnVubmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmgKaW5kZXggYjQwZDZmOTAyYzA1MjNlYmI3YjI4Mzcw
OGZkNDhkMjY1MGZlZDVmYi4uODhkNGFlNWI3YTY2NThjMDk5ZDY5MWY5MGMxNTI3NmU0YzY4NTk5
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9w
dWJsaWMvV2ViVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RSdW5uZXIuaApAQCAtNDAsMTQgKzQwLDEwIEBAIG5h
bWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKIAogY2xhc3MgV2ViVGVzdFJ1bm5lciB7CiBwdWJsaWM6
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cygpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50KiB3ZWJQZXJtaXNz
aW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJk
TGlzdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcFNlbGVjdGlvblJl
Y3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHRlc3RSZXBhaW50KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBzd2VlcEhvcml6b250YWxseSgpIGNvbnN0ID0gMDsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RD
b21tb24uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhhMWExYzYxMzUxOGQ4YTMwYzE4MmIyNDJiYjhk
ZDg3M2I2ZjMxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdENvbW1vbi5oIgorCit1c2luZyBuYW1lc3BhY2Ug
c3RkOworCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK25hbWVzcGFjZSB7CisKK2NvbnN0
IGNoYXIgbGF5b3V0VGVzdHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Citjb25zdCBzdHJp
bmc6OnNpemVfdHlwZSBsYXlvdXRUZXN0c1BhdHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3Rz
UGF0dGVybikgLSAxOworY29uc3QgY2hhciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Citj
b25zdCBjaGFyIGZpbGVUZXN0UHJlZml4W10gPSAiKGZpbGUgdGVzdCk6IjsKK2NvbnN0IGNoYXIg
ZGF0YVVybFBhdHRlcm5bXSA9ICJkYXRhOiI7Citjb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRh
VXJsUGF0dGVyblNpemUgPSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKKworfQorCitzdHJp
bmcgbm9ybWFsaXplTGF5b3V0VGVzdFVSTChjb25zdCBzdHJpbmcmIHVybCkKK3sKKyAgICBzdHJp
bmcgcmVzdWx0ID0gdXJsOworICAgIHNpemVfdCBwb3M7CisgICAgaWYgKCF1cmwuZmluZChmaWxl
VXJsUGF0dGVybikgJiYgKChwb3MgPSB1cmwuZmluZChsYXlvdXRUZXN0c1BhdHRlcm4pKSAhPSBz
dHJpbmc6Om5wb3MpKSB7CisgICAgICAgIC8vIGFkanVzdCBmaWxlIFVSTHMgdG8gbWF0Y2ggdXBz
dHJlYW0gcmVzdWx0cy4KKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoMCwgcG9zICsgbGF5b3V0VGVz
dHNQYXR0ZXJuU2l6ZSwgZmlsZVRlc3RQcmVmaXgpOworICAgIH0gZWxzZSBpZiAoIXVybC5maW5k
KGRhdGFVcmxQYXR0ZXJuKSkgeworICAgICAgICAvLyBVUkwtZXNjYXBlIGRhdGEgVVJMcyB0byBt
YXRjaCByZXN1bHRzIHVwc3RyZWFtLgorICAgICAgICBzdHJpbmcgcGF0aCA9IHVybC5zdWJzdHIo
ZGF0YVVybFBhdHRlcm5TaXplKTsKKyAgICAgICAgcmVzdWx0LnJlcGxhY2UoZGF0YVVybFBhdHRl
cm5TaXplLCB1cmwubGVuZ3RoKCksIHBhdGgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9UZXN0Q29tbW9uLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9UZXN0Q29tbW9uLmgKaW5kZXggYjFmNzZmODRlMjc2NGUxY2IwYjRiYTQxNzAz
OTljY2I3ZGVlNTJkMS4uZjVmMDBmMjYzNTg4OTdmNjEzMjY2ZWFjNzY3M2EzMzEyYWY2MjE5ZCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdENvbW1vbi5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL1Rlc3RDb21tb24uaApAQCAtMzQsMTMgKzM0LDIwIEBACiAjaW5jbHVkZSA8YmFzZS9j
b21waWxlcl9zcGVjaWZpYy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJDb21tb24uaD4KICNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZz4KIAogI2lmIGRlZmluZWQoV0lOMzIpCiAj
ZGVmaW5lIHNucHJpbnRmKHN0ciwgc2l6ZSwgLi4uKSBfc25wcmludGZfcyhzdHIsIHNpemUsIHNp
emUsIF9fVkFfQVJHU19fKQogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKKwog
aW5saW5lIGJvb2wgaXNBU0NJSUFscGhhKGNoYXIgY2gpIHsgcmV0dXJuIChjaCB8IDB4MjApID49
ICdhJyAmJiAoY2ggfCAweDIwKSA8PSAneic7IH0KIAogaW5saW5lIGJvb2wgaXNOb3RBU0NJSUFs
cGhhKGNoYXIgY2gpIHsgcmV0dXJuICFpc0FTQ0lJQWxwaGEoY2gpOyB9CiAKK3N0ZDo6c3RyaW5n
IG5vcm1hbGl6ZUxheW91dFRlc3RVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7CisKK30KKwog
I2VuZGlmIC8vIFRlc3RDb21tb25faApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCBlZjJmYzJj
MzRlYmVkNmI4MTMyMDYyOTE2MThlMTEyN2E0NDdkNGQ5Li5mODk4ZTFjZTMwYjhkZGMzMjUwNDM4
NDMzNTRhZDNhMDM0ZjhkMGJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgi
CisjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJFbGVtZW50Lmgi
CkBAIC01NSw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJEYXRhLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlBvaW50Lmg+CisjaW5jbHVkZSA8cHVibGlj
L1dlYlVSTFJlc3BvbnNlLmg+CiAKICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChB
TkRST0lEKQogI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCIKQEAgLTQyNSw4ICs0
MjcsMjIgQEAgYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7CiB9CiAKLWJvb2wgVGVzdFJ1
bm5lcjo6c2hvdWxkRHVtcEFzVGV4dCgpIGNvbnN0Cit2b2lkIFRlc3RSdW5uZXI6OmNoZWNrUmVz
cG9uc2VNaW1lVHlwZSgpCiB7CisgICAgLy8gVGV4dCBvdXRwdXQ6IHRoZSB0ZXN0IHBhZ2UgY2Fu
IHJlcXVlc3QgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1dAorICAgIC8vIHdoaWNoIHdlIGhhbmRs
ZSBoZXJlLgorICAgIGlmICghbV9kdW1wQXNUZXh0KSB7CisgICAgICAgIHN0cmluZyBtaW1lVHlw
ZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmRhdGFTb3VyY2UoKS0+cmVzcG9uc2UoKS5taW1l
VHlwZSgpLnV0ZjgoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikgewor
ICAgICAgICAgICAgbV9kdW1wQXNUZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHMgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUZXN0UnVu
bmVyOjpzaG91bGREdW1wQXNUZXh0KCkKK3sKKyAgICBjaGVja1Jlc3BvbnNlTWltZVR5cGUoKTsK
ICAgICByZXR1cm4gbV9kdW1wQXNUZXh0OwogfQogCkBAIC00MzUsOCArNDUxLDkgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGREdW1wQXNUZXh0KGJvb2wgdmFsdWUpCiAgICAgbV9kdW1wQXNU
ZXh0ID0gdmFsdWU7CiB9CiAKLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSBjb25zdAorYm9vbCBUZXN0UnVubmVyOjpzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0
cygpCiB7CisgICAgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7CiAgICAgcmV0dXJuIG1fZ2VuZXJh
dGVQaXhlbFJlc3VsdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAppbmRleCBiNDRhMzdkNzJkYjZm
ZjE3YjMwOTkzYmQwNDc4YTg4ZjU2OWExMTk0Li42NjA1ODQ1ODAzYzRmMmYwOTRkNWJkNmU4ZmY1
NDEzOGRjN2RhZjRlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCkBAIC03MSwyMCArNzEsMjAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGVzdElzUnVubmluZyhib29sKTsKIAogICAgIC8vIFdlYlRlc3RS
dW5uZXIgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc1RleHQo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIHNob3VsZER1bXBBc0F1ZGlvKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBj
b25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYlBlcm1pc3Npb25DbGllbnQqIHdlYlBlcm1pc3Np
b25zKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcFNl
bGVjdGlvblJlY3QoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdGVzdFJlcGFp
bnQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHko
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmludGluZygpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgLy8gTWV0aG9kcyB1c2VkIGJ5IFdlYlRlc3RQcm94eUJhc2UuCisgICAg
Ym9vbCBzaG91bGREdW1wQXNUZXh0KCk7CisgICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRM
aXN0KCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Q7
CiAgICAgdm9pZCBzaG93RGV2VG9vbHMoKTsKICAgICB2b2lkIHNldFNob3VsZER1bXBBc1RleHQo
Ym9vbCk7CiAgICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhib29sKTsKQEAg
LTQ4Niw2ICs0ODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAg
Ly8gSW50ZXJuYWwgaGVscGVycworICAgIHZvaWQgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7CiAg
ICAgdm9pZCBjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpOwogICAgIGNsYXNzIE5v
dGlmeURvbmVUaW1lZE91dFRhc2s6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+IHsK
ICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAKaW5kZXggYTE1ZDliOTI0
NThjMjVjN2NmZTQzZTMyMWU2OWJhNjE2OTM2OTkyOC4uMTYxY2JjNzU0YTI5NGZiNjBkNTBjYTY4
MDE0OGE0NDFmZGFkMjBiYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBlcm1pc3Npb25zLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25z
LmgiCiAKKyNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRl
LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VVJMLmg+CkBAIC0zOSwzMiArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViVGVzdFJ1bm5lciB7CiAKLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IGNoYXIgbGF5b3V0VGVz
dHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBs
YXlvdXRUZXN0c1BhdHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3RzUGF0dGVybikgLSAxOwot
Y29uc3QgY2hhciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Ci1jb25zdCBjaGFyIGZpbGVU
ZXN0UHJlZml4W10gPSAiKGZpbGUgdGVzdCk6IjsKLWNvbnN0IGNoYXIgZGF0YVVybFBhdHRlcm5b
XSA9ICJkYXRhOiI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRhVXJsUGF0dGVyblNpemUg
PSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKLQotc3RyaW5nIG5vcm1hbGl6ZUxheW91dFRl
c3RVUkwoY29uc3Qgc3RyaW5nJiB1cmwpCi17Ci0gICAgc3RyaW5nIHJlc3VsdCA9IHVybDsKLSAg
ICBzaXplX3QgcG9zOwotICAgIGlmICghdXJsLmZpbmQoZmlsZVVybFBhdHRlcm4pICYmICgocG9z
ID0gdXJsLmZpbmQobGF5b3V0VGVzdHNQYXR0ZXJuKSkgIT0gc3RyaW5nOjpucG9zKSkgewotICAg
ICAgICAvLyBhZGp1c3QgZmlsZSBVUkxzIHRvIG1hdGNoIHVwc3RyZWFtIHJlc3VsdHMuCi0gICAg
ICAgIHJlc3VsdC5yZXBsYWNlKDAsIHBvcyArIGxheW91dFRlc3RzUGF0dGVyblNpemUsIGZpbGVU
ZXN0UHJlZml4KTsKLSAgICB9IGVsc2UgaWYgKCF1cmwuZmluZChkYXRhVXJsUGF0dGVybikpIHsK
LSAgICAgICAgLy8gVVJMLWVzY2FwZSBkYXRhIFVSTHMgdG8gbWF0Y2ggcmVzdWx0cyB1cHN0cmVh
bS4KLSAgICAgICAgc3RyaW5nIHBhdGggPSB1cmwuc3Vic3RyKGRhdGFVcmxQYXR0ZXJuU2l6ZSk7
Ci0gICAgICAgIHJlc3VsdC5yZXBsYWNlKGRhdGFVcmxQYXR0ZXJuU2l6ZSwgdXJsLmxlbmd0aCgp
LCBwYXRoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfQotCiBXZWJQZXJtaXNz
aW9uczo6V2ViUGVybWlzc2lvbnMoKQogICAgIDogbV9kZWxlZ2F0ZSgwKQogewpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBy
b3h5LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlRlc3RQcm94eS5jcHAKaW5kZXggMDgxOGQyMWYxY2Q4NzU2NzNiYjVlNGQwOTE5ZjZlZTMzNDRh
YjRmNC4uYzk3NzA1NzU2ZGEzZWVjOTgxNjIzYjJlMDUxYmVkZTgwYTAzY2Y1NSAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBy
b3h5LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9XZWJUZXN0UHJveHkuY3BwCkBAIC00MywxNyArNDMsMjEgQEAKICNpbmNsdWRlICJXZWJDYWNo
ZWRVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRl
ICJXZWJEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJX
ZWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJIaXN0b3J5
SXRlbS5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5QYXJhbXMu
aCIKICNpbmNsdWRlICJXZWJQcmludFBhcmFtcy5oIgogI2luY2x1ZGUgIldlYlJhbmdlLmgiCisj
aW5jbHVkZSAiV2ViU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0
ZS5oIgogI2luY2x1ZGUgIldlYlRlc3RJbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiV2ViVGVzdFJ1
bm5lci5oIgogI2luY2x1ZGUgIldlYlVzZXJNZWRpYUNsaWVudE1vY2suaCIKICNpbmNsdWRlICJX
ZWJWaWV3LmgiCisjaW5jbHVkZSA8Y2N0eXBlPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTEVycm9yLmg+CiAjaW5jbHVkZSA8cHVibGljL1dl
YlVSTFJlcXVlc3QuaD4KQEAgLTI1NCw2ICsyNTgsMTU2IEBAIGNvbnN0IGNoYXIqIHdlYk5hdmln
YXRpb25UeXBlVG9TdHJpbmcoV2ViTmF2aWdhdGlvblR5cGUgdHlwZSkKICAgICByZXR1cm4gaWxs
ZWdhbFN0cmluZzsKIH0KIAorc3RyaW5nIGR1bXBEb2N1bWVudFRleHQoV2ViRnJhbWUqIGZyYW1l
KQoreworICAgIC8vIFdlIHVzZSB0aGUgZG9jdW1lbnQgZWxlbWVudCdzIHRleHQgaW5zdGVhZCBv
ZiB0aGUgYm9keSB0ZXh0IGhlcmUgYmVjYXVzZQorICAgIC8vIG5vdCBhbGwgZG9jdW1lbnRzIGhh
dmUgYSBib2R5LCBzdWNoIGFzIFhNTCBkb2N1bWVudHMuCisgICAgV2ViRWxlbWVudCBkb2N1bWVu
dEVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAo
ZG9jdW1lbnRFbGVtZW50LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gc3RyaW5nKCk7CisgICAg
cmV0dXJuIGRvY3VtZW50RWxlbWVudC5pbm5lclRleHQoKS51dGY4KCk7Cit9CisKK3N0cmluZyBk
dW1wRnJhbWVzQXNUZXh0KFdlYkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCit7CisgICAg
c3RyaW5nIHJlc3VsdDsKKworICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1haW4g
ZnJhbWUuIFNraXAgZW1wdHkgZnJhbWVzLgorICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYgIWZy
YW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiJ1xuLS0tLS0tLS1cbiIpOworICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoZHVtcERv
Y3VtZW50VGV4dChmcmFtZSkpOworICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisKKyAgICBpZiAo
cmVjdXJzaXZlKSB7CisgICAgICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGR1bXBGcmFtZXNBc1RleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cmluZyBkdW1wRnJhbWVzQXNQcmludGVk
VGV4dChXZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQoreworICAgIHN0cmluZyByZXN1
bHQ7CisKKyAgICAvLyBDYW5ub3QgZG8gcHJpbnRlZCBmb3JtYXQgZm9yIGFueXRoaW5nIG90aGVy
IHRoYW4gSFRNTAorICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIHN0cmluZygpOworCisgICAgLy8gQWRkIGhlYWRlciBmb3IgYWxsIGJ1
dCB0aGUgbWFpbiBmcmFtZS4gU2tpcCBlbXB0eSBmcmFtZXMuCisgICAgaWYgKGZyYW1lLT5wYXJl
bnQoKSAmJiAhZnJhbWUtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkuaXNOdWxsKCkpIHsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4tLS0tLS0tLVxuRnJhbWU6ICciKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChmcmFtZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKCInXG4tLS0tLS0tLVxuIik7CisgICAgfQorCisgICAgcmVzdWx0LmFw
cGVuZChmcmFtZS0+cmVuZGVyVHJlZUFzVGV4dChXZWJGcmFtZTo6UmVuZGVyQXNUZXh0UHJpbnRp
bmcpLnV0ZjgoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKworICAgIGlmIChyZWN1cnNp
dmUpIHsKKyAgICAgICAgZm9yIChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cmluZyBkdW1wRnJhbWVTY3JvbGxQb3Np
dGlvbihXZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQoreworICAgIHN0cmluZyByZXN1
bHQ7CisgICAgV2ViU2l6ZSBvZmZzZXQgPSBmcmFtZS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaWYg
KG9mZnNldC53aWR0aCA+IDAgfHwgb2Zmc2V0LmhlaWdodCA+IDApIHsKKyAgICAgICAgaWYgKGZy
YW1lLT5wYXJlbnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZygiZnJhbWUgJyIpICsg
ZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpICsgIicgIjsKKyAgICAgICAgY2hhciBk
YXRhWzEwMF07CisgICAgICAgIHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgInNjcm9sbGVk
IHRvICVkLCVkXG4iLCBvZmZzZXQud2lkdGgsIG9mZnNldC5oZWlnaHQpOworICAgICAgICByZXN1
bHQgKz0gZGF0YTsKKyAgICB9CisKKyAgICBpZiAoIXJlY3Vyc2l2ZSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBmb3IgKFdlYkZyYW1lKiBjaGlsZCA9IGZyYW1lLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICByZXN1bHQgKz0g
ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oY2hpbGQsIHJlY3Vyc2l2ZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RydWN0IFRvTG93ZXIgeworICAgIGNoYXIxNiBvcGVyYXRvcigpKGNoYXIx
NiBjKSB7IHJldHVybiB0b2xvd2VyKGMpOyB9Cit9OworCisvLyBSZXR1cm5zIFRydWUgaWYgaXRl
bTEgPCBpdGVtMi4KK2Jvb2wgSGlzdG9yeUl0ZW1Db21wYXJlTGVzcyhjb25zdCBXZWJIaXN0b3J5
SXRlbSYgaXRlbTEsIGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBpdGVtMikKK3sKKyAgICBzdHJpbmcx
NiB0YXJnZXQxID0gaXRlbTEudGFyZ2V0KCk7CisgICAgc3RyaW5nMTYgdGFyZ2V0MiA9IGl0ZW0y
LnRhcmdldCgpOworICAgIHN0ZDo6dHJhbnNmb3JtKHRhcmdldDEuYmVnaW4oKSwgdGFyZ2V0MS5l
bmQoKSwgdGFyZ2V0MS5iZWdpbigpLCBUb0xvd2VyKCkpOworICAgIHN0ZDo6dHJhbnNmb3JtKHRh
cmdldDIuYmVnaW4oKSwgdGFyZ2V0Mi5lbmQoKSwgdGFyZ2V0Mi5iZWdpbigpLCBUb0xvd2VyKCkp
OworICAgIHJldHVybiB0YXJnZXQxIDwgdGFyZ2V0MjsKK30KKworc3RyaW5nIGR1bXBIaXN0b3J5
SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYgaXRlbSwgaW50IGluZGVudCwgYm9vbCBpc0N1cnJl
bnQpCit7CisgICAgc3RyaW5nIHJlc3VsdDsKKworICAgIGlmIChpc0N1cnJlbnQpIHsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiY3Vyci0+Iik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaW5kZW50
IC0gNiwgJyAnKTsgLy8gNiA9PSAiY3Vyci0+Ii5sZW5ndGgoKQorICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHQuYXBwZW5kKGluZGVudCwgJyAnKTsKKworICAgIHN0cmluZyB1cmwgPSBub3JtYWxp
emVMYXlvdXRUZXN0VVJMKGl0ZW0udXJsU3RyaW5nKCkudXRmOCgpKTsKKyAgICByZXN1bHQuYXBw
ZW5kKHVybCk7CisgICAgaWYgKCFpdGVtLnRhcmdldCgpLmlzRW1wdHkoKSkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCIgKGluIGZyYW1lIFwiIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRl
bS50YXJnZXQoKS51dGY4KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIikiKTsKKyAgICB9
CisgICAgaWYgKGl0ZW0uaXNUYXJnZXRJdGVtKCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAg
KipuYXYgdGFyZ2V0KioiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworCisgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiYgY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuKCk7Cisg
ICAgaWYgKCFjaGlsZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gTXVzdCBzb3J0IHRvIGVs
aW1pbmF0ZSBhcmJpdHJhcnkgcmVzdWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVhdHMKKyAgICAgICAg
Ly8gcmVwcm9kdWNpYmxlIHRlc3RpbmcuCisgICAgICAgIC8vIEZJWE1FOiBXZWJWZWN0b3Igc2hv
dWxkIHByb2JhYmx5IGp1c3QgYmUgYSBzdGQ6OnZlY3RvciEhCisgICAgICAgIHN0ZDo6dmVjdG9y
PFdlYkhpc3RvcnlJdGVtPiBzb3J0ZWRDaGlsZHJlbjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHNvcnRlZENoaWxkcmVu
LnB1c2hfYmFjayhjaGlsZHJlbltpXSk7CisgICAgICAgIHN0ZDo6c29ydChzb3J0ZWRDaGlsZHJl
bi5iZWdpbigpLCBzb3J0ZWRDaGlsZHJlbi5lbmQoKSwgSGlzdG9yeUl0ZW1Db21wYXJlTGVzcyk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc29ydGVkQ2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICByZXN1bHQgKz0gZHVtcEhpc3RvcnlJdGVtKHNvcnRlZENoaWxkcmVu
W2ldLCBpbmRlbnQgKyA0LCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRl
bT4mIGhpc3RvcnksIHNpemVfdCBjdXJyZW50RW50cnlJbmRleCwgc3RyaW5nJiByZXN1bHQpCit7
CisgICAgcmVzdWx0LmFwcGVuZCgiXG49PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9
PT09PT09PT09PT09PVxuIik7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGhpc3Rv
cnkuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICByZXN1bHQuYXBwZW5kKGR1bXBIaXN0b3J5SXRl
bShoaXN0b3J5W2luZGV4XSwgOCwgaW5kZXggPT0gY3VycmVudEVudHJ5SW5kZXgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PVxuIik7Cit9CisKK3N0cmluZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cyhXZWJUZXN0RGVs
ZWdhdGUqIGRlbGVnYXRlKQoreworICAgIHN0cmluZyByZXN1bHQ7CisgICAgdW5zaWduZWQgd2lu
ZG93Q291bnQgPSBkZWxlZ2F0ZS0+d2luZG93Q291bnQoKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IndpbmRvd0NvdW50ID0gJWRcbiIsIHdpbmRvd0NvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgd2luZG93Q291bnQ7ICsraSkgeworICAgICAgICBzaXplX3QgY3VycmVudEVudHJ5
SW5kZXggPSAwOworICAgICAgICBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IGhpc3Rvcnk7Cisg
ICAgICAgIGRlbGVnYXRlLT5jYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhpLCAmaGlzdG9yeSwgJmN1
cnJlbnRFbnRyeUluZGV4KTsKKyAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdChoaXN0b3J5LCBj
dXJyZW50RW50cnlJbmRleCwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogfQogCiBXZWJUZXN0UHJveHlCYXNlOjpXZWJUZXN0UHJveHlCYXNlKCkKQEAgLTMwMSw2ICs0
NTUsMzQgQEAgV2ViUmVjdCBXZWJUZXN0UHJveHlCYXNlOjpwYWludFJlY3QoKSBjb25zdAogICAg
IHJldHVybiBtX3BhaW50UmVjdDsKIH0KIAorc3RyaW5nIFdlYlRlc3RQcm94eUJhc2U6OmNhcHR1
cmVUcmVlKGJvb2wgZGVidWdSZW5kZXJUcmVlKQoreworICAgIFdlYlNjcmlwdENvbnRyb2xsZXI6
OmZsdXNoQ29uc29sZU1lc3NhZ2VzKCk7CisKKyAgICBib29sIHNob3VsZER1bXBBc1RleHQgPSBt
X3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBc1RleHQoKTsKKyAgICBi
b29sIHNob3VsZER1bXBBc1ByaW50ZWQgPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCkt
PmlzUHJpbnRpbmcoKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3Rlc3RJbnRlcmZhY2VzLT53
ZWJWaWV3KCktPm1haW5GcmFtZSgpOworICAgIHN0cmluZyBkYXRhVXRmODsKKyAgICBpZiAoc2hv
dWxkRHVtcEFzVGV4dCkgeworICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdEludGVyZmFj
ZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAg
IGRhdGFVdGY4ID0gc2hvdWxkRHVtcEFzUHJpbnRlZCA/IGR1bXBGcmFtZXNBc1ByaW50ZWRUZXh0
KGZyYW1lLCByZWN1cnNpdmUpIDogZHVtcEZyYW1lc0FzVGV4dChmcmFtZSwgcmVjdXJzaXZlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKTsKKyAg
ICAgICAgV2ViRnJhbWU6OlJlbmRlckFzVGV4dENvbnRyb2xzIHJlbmRlclRleHRCZWhhdmlvciA9
IFdlYkZyYW1lOjpSZW5kZXJBc1RleHROb3JtYWw7CisgICAgICAgIGlmIChzaG91bGREdW1wQXNQ
cmludGVkKQorICAgICAgICAgICAgcmVuZGVyVGV4dEJlaGF2aW9yIHw9IFdlYkZyYW1lOjpSZW5k
ZXJBc1RleHRQcmludGluZzsKKyAgICAgICAgaWYgKGRlYnVnUmVuZGVyVHJlZSkKKyAgICAgICAg
ICAgIHJlbmRlclRleHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0RGVidWc7Cisg
ICAgICAgIGRhdGFVdGY4ID0gZnJhbWUtPnJlbmRlclRyZWVBc1RleHQocmVuZGVyVGV4dEJlaGF2
aW9yKS51dGY4KCk7CisgICAgICAgIGRhdGFVdGY4ICs9IGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9u
KGZyYW1lLCByZWN1cnNpdmUpOworICAgIH0KKworICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgZGF0YVV0
ZjggKz0gZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMobV9kZWxlZ2F0ZSk7CisKKyAgICByZXR1cm4g
ZGF0YVV0Zjg7Cit9CisKIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6c2V0TG9nQ29uc29sZU91dHB1
dChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9sb2dDb25zb2xlT3V0cHV0ID0gZW5hYmxlZDsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDEzMzZiMDA4
YTU0Yjg3MWE1NTIyN2QxMjA5YzgyOTI0OTE2YzRkNzEuLjFhNmJjZDg3ZTgzM2ExYjYwYzAxNzVj
MzNkYTgzMmJjNDJhNGU0NzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIldlYklEQkZhY3RvcnkuaCIK
ICNpbmNsdWRlICJXZWJUZXN0aW5nU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0
dXJlcy5oIgotI2luY2x1ZGUgIldlYlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIldlYlRlc3RQcm94eS5oIgogI2luY2x1ZGUgIldlYlRlc3RS
dW5uZXIuaCIKQEAgLTM5MiwxODIgKzM5MSwxNCBAQCB2b2lkIFRlc3RTaGVsbDo6dGVzdFRpbWVk
T3V0KCkKICAgICB0ZXN0RmluaXNoZWQod2ViVmlld0hvc3QoKSk7CiB9CiAKLXN0YXRpYyBzdHJp
bmcgZHVtcERvY3VtZW50VGV4dChXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgLy8gV2UgdXNlIHRo
ZSBkb2N1bWVudCBlbGVtZW50J3MgdGV4dCBpbnN0ZWFkIG9mIHRoZSBib2R5IHRleHQgaGVyZSBi
ZWNhdXNlCi0gICAgLy8gbm90IGFsbCBkb2N1bWVudHMgaGF2ZSBhIGJvZHksIHN1Y2ggYXMgWE1M
IGRvY3VtZW50cy4KLSAgICBXZWJFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmIChkb2N1bWVudEVsZW1lbnQuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBzdHJpbmcoKTsKLSAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50
LmlubmVyVGV4dCgpLnV0ZjgoKTsKLX0KLQotc3RhdGljIHN0cmluZyBkdW1wRnJhbWVzQXNUZXh0
KFdlYkZyYW1lKiBmcmFtZSwgYm9vbCByZWN1cnNpdmUpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsK
LQotICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1haW4gZnJhbWUuIFNraXAgZW1w
dHkgZnJhbWVzLgotICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYgIWZyYW1lLT5kb2N1bWVudCgp
LmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxu
LS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZnJhbWUtPnVuaXF1
ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiJ1xuLS0tLS0t
LS1cbiIpOwotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoZHVtcERvY3VtZW50VGV4dChmcmFt
ZSkpOwotICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBpZiAocmVjdXJzaXZlKSB7Ci0g
ICAgICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGR1bXBGcmFtZXNBc1RleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBzdHJpbmcgZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoV2Vi
RnJhbWUqIGZyYW1lLCBib29sIHJlY3Vyc2l2ZSkKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotCi0g
ICAgLy8gQ2Fubm90IGRvIHByaW50ZWQgZm9ybWF0IGZvciBhbnl0aGluZyBvdGhlciB0aGFuIEhU
TUwKLSAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBzdHJpbmcoKTsKLQotICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1h
aW4gZnJhbWUuIFNraXAgZW1wdHkgZnJhbWVzLgotICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYg
IWZyYW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiJ1xuLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoZnJh
bWUtPnJlbmRlclRyZWVBc1RleHQoV2ViRnJhbWU6OlJlbmRlckFzVGV4dFByaW50aW5nKS51dGY4
KCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBpZiAocmVjdXJzaXZlKSB7Ci0g
ICAgICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGR1bXBGcmFtZXNBc1ByaW50ZWRUZXh0KGNoaWxkLCByZWN1cnNpdmUpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlv
bihXZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQotewotICAgIFdlYlNpemUgb2Zmc2V0
ID0gZnJhbWUtPnNjcm9sbE9mZnNldCgpOwotICAgIGlmIChvZmZzZXQud2lkdGggPiAwIHx8IG9m
ZnNldC5oZWlnaHQgPiAwKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+cGFyZW50KCkpCi0gICAgICAg
ICAgICBwcmludGYoImZyYW1lICclcycgIiwgZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgcHJpbnRmKCJzY3JvbGxlZCB0byAlZCwlZFxuIiwgb2Zmc2V0LndpZHRo
LCBvZmZzZXQuaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlY3Vyc2l2ZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGZvciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKGNoaWxkLCByZWN1cnNpdmUpOwotfQotCi1zdHJ1Y3QgVG9Mb3dlciB7Ci0g
ICAgY2hhcjE2IG9wZXJhdG9yKCkoY2hhcjE2IGMpIHsgcmV0dXJuIHRvbG93ZXIoYyk7IH0KLX07
Ci0KLS8vIEZJWE1FOiBFbGltaW5hdGUgc3RkOjp0cmFuc2Zvcm0oKSwgc3RkOjp2ZWN0b3IsIGFu
ZCBzdGQ6OnNvcnQoKS4KLQotLy8gUmV0dXJucyBUcnVlIGlmIGl0ZW0xIDwgaXRlbTIuCi1zdGF0
aWMgYm9vbCBIaXN0b3J5SXRlbUNvbXBhcmVMZXNzKGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBpdGVt
MSwgY29uc3QgV2ViSGlzdG9yeUl0ZW0mIGl0ZW0yKQotewotICAgIHN0cmluZzE2IHRhcmdldDEg
PSBpdGVtMS50YXJnZXQoKTsKLSAgICBzdHJpbmcxNiB0YXJnZXQyID0gaXRlbTIudGFyZ2V0KCk7
Ci0gICAgc3RkOjp0cmFuc2Zvcm0odGFyZ2V0MS5iZWdpbigpLCB0YXJnZXQxLmVuZCgpLCB0YXJn
ZXQxLmJlZ2luKCksIFRvTG93ZXIoKSk7Ci0gICAgc3RkOjp0cmFuc2Zvcm0odGFyZ2V0Mi5iZWdp
bigpLCB0YXJnZXQyLmVuZCgpLCB0YXJnZXQyLmJlZ2luKCksIFRvTG93ZXIoKSk7Ci0gICAgcmV0
dXJuIHRhcmdldDEgPCB0YXJnZXQyOwotfQotCi1zdGF0aWMgc3RyaW5nIG5vcm1hbGl6ZUxheW91
dFRlc3RVUkxJbnRlcm5hbChjb25zdCBzdHJpbmcmIHVybCkKLXsKLSAgICBzdHJpbmcgcmVzdWx0
ID0gdXJsOwotICAgIHNpemVfdCBwb3M7Ci0gICAgaWYgKCF1cmwuZmluZChmaWxlVXJsUGF0dGVy
bikgJiYgKChwb3MgPSB1cmwuZmluZChsYXlvdXRUZXN0c1BhdHRlcm4pKSAhPSBzdHJpbmc6Om5w
b3MpKSB7Ci0gICAgICAgIC8vIGFkanVzdCBmaWxlIFVSTHMgdG8gbWF0Y2ggdXBzdHJlYW0gcmVz
dWx0cy4KLSAgICAgICAgcmVzdWx0LnJlcGxhY2UoMCwgcG9zICsgbGF5b3V0VGVzdHNQYXR0ZXJu
U2l6ZSwgZmlsZVRlc3RQcmVmaXgpOwotICAgIH0gZWxzZSBpZiAoIXVybC5maW5kKGRhdGFVcmxQ
YXR0ZXJuKSkgewotICAgICAgICAvLyBVUkwtZXNjYXBlIGRhdGEgVVJMcyB0byBtYXRjaCByZXN1
bHRzIHVwc3RyZWFtLgotICAgICAgICBzdHJpbmcgcGF0aCA9IHVybC5zdWJzdHIoZGF0YVVybFBh
dHRlcm5TaXplKTsKLSAgICAgICAgcmVzdWx0LnJlcGxhY2UoZGF0YVVybFBhdHRlcm5TaXplLCB1
cmwubGVuZ3RoKCksIHBhdGgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgc3RyaW5nIGR1bXBIaXN0b3J5SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYgaXRlbSwgaW50
IGluZGVudCwgYm9vbCBpc0N1cnJlbnQpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsKLQotICAgIGlm
IChpc0N1cnJlbnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiY3Vyci0+Iik7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoaW5kZW50IC0gNiwgJyAnKTsgLy8gNiA9PSAiY3Vyci0+Ii5sZW5ndGgo
KQotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQuYXBwZW5kKGluZGVudCwgJyAnKTsKLQotICAg
IHN0cmluZyB1cmwgPSBub3JtYWxpemVMYXlvdXRUZXN0VVJMSW50ZXJuYWwoaXRlbS51cmxTdHJp
bmcoKS51dGY4KCkpOwotICAgIHJlc3VsdC5hcHBlbmQodXJsKTsKLSAgICBpZiAoIWl0ZW0udGFy
Z2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiAoaW4gZnJhbWUgXCIi
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnRhcmdldCgpLnV0ZjgoKSk7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIlwiKSIpOwotICAgIH0KLSAgICBpZiAoaXRlbS5pc1RhcmdldEl0ZW0o
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAqKm5hdiB0YXJnZXQqKiIpOwotICAgIHJlc3Vs
dC5hcHBlbmQoIlxuIik7Ci0KLSAgICBjb25zdCBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+JiBj
aGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLmlzRW1wdHkoKSkg
ewotICAgICAgICAvLyBNdXN0IHNvcnQgdG8gZWxpbWluYXRlIGFyYml0cmFyeSByZXN1bHQgb3Jk
ZXJpbmcgd2hpY2ggZGVmZWF0cwotICAgICAgICAvLyByZXByb2R1Y2libGUgdGVzdGluZy4KLSAg
ICAgICAgLy8gRklYTUU6IFdlYlZlY3RvciBzaG91bGQgcHJvYmFibHkganVzdCBiZSBhIHN0ZDo6
dmVjdG9yISEKLSAgICAgICAgc3RkOjp2ZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IHNvcnRlZENoaWxk
cmVuOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgc29ydGVkQ2hpbGRyZW4ucHVzaF9iYWNrKGNoaWxkcmVuW2ldKTsKLSAg
ICAgICAgc3RkOjpzb3J0KHNvcnRlZENoaWxkcmVuLmJlZ2luKCksIHNvcnRlZENoaWxkcmVuLmVu
ZCgpLCBIaXN0b3J5SXRlbUNvbXBhcmVMZXNzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzb3J0ZWRDaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBk
dW1wSGlzdG9yeUl0ZW0oc29ydGVkQ2hpbGRyZW5baV0sIGluZGVudCArIDQsIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBkdW1wQmFja0Zvcndh
cmRMaXN0KGNvbnN0IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlciYgbmF2aWdhdGlvbkNvbnRyb2xs
ZXIsIHN0cmluZyYgcmVzdWx0KQotewotICAgIHJlc3VsdC5hcHBlbmQoIlxuPT09PT09PT09PT09
PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIpOwotICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBuYXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUNvdW50KCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IG5hdmlnYXRpb25Db250cm9sbGVyLmxh
c3RDb21taXR0ZWRFbnRyeUluZGV4KCk7Ci0gICAgICAgIFdlYkhpc3RvcnlJdGVtIGhpc3RvcnlJ
dGVtID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50cnlBdEluZGV4KGluZGV4KS0+Y29udGVudFN0
YXRlKCk7Ci0gICAgICAgIGlmIChoaXN0b3J5SXRlbS5pc051bGwoKSkgewotICAgICAgICAgICAg
aGlzdG9yeUl0ZW0uaW5pdGlhbGl6ZSgpOwotICAgICAgICAgICAgaGlzdG9yeUl0ZW0uc2V0VVJM
U3RyaW5nKG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5QXRJbmRleChpbmRleCktPlVSTCgpLnNw
ZWMoKS51dGYxNigpKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKGR1bXBIaXN0
b3J5SXRlbShoaXN0b3J5SXRlbSwgOCwgaW5kZXggPT0gY3VycmVudEluZGV4KSk7Ci0gICAgfQot
ICAgIHJlc3VsdC5hcHBlbmQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09XG4iKTsKLX0KLQotc3RyaW5nIFRlc3RTaGVsbDo6ZHVtcEFsbEJhY2tGb3J3YXJk
TGlzdHMoKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fd2luZG93TGlzdC5zaXplKCk7ICsraSkKLSAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlz
dCgqbV93aW5kb3dMaXN0W2ldLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLCByZXN1bHQpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKIHsKLSAgICBXZWJT
Y3JpcHRDb250cm9sbGVyOjpmbHVzaENvbnNvbGVNZXNzYWdlcygpOwotCiAgICAgLy8gRHVtcCB0
aGUgcmVxdWVzdGVkIHJlcHJlc2VudGF0aW9uLgogICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fd2Vi
Vmlldy0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAg
IGJvb2wgc2hvdWxkRHVtcEFzVGV4dCA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEFzVGV4dCgpOwogICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8gPSBtX3Rlc3RJ
bnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBc0F1ZGlvKCk7CiAgICAgYm9vbCBz
aG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIo
KS0+c2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoKTsKLSAgICBib29sIHNob3VsZER1bXBBc1By
aW50ZWQgPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKTsKICAg
ICBib29sIGR1bXBlZEFueXRoaW5nID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkRHVtcEFzQXVk
aW8pIHsKQEAgLTU4NCwzMyArNDE1LDkgQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAgIGlm
IChtX3BhcmFtcy5kdW1wVHJlZSkgewogICAgICAgICBkdW1wZWRBbnl0aGluZyA9IHRydWU7CiAg
ICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXh0SGVhZGVyKCk7Ci0gICAgICAgIC8vIFRleHQgb3V0
cHV0OiB0aGUgdGVzdCBwYWdlIGNhbiByZXF1ZXN0IGRpZmZlcmVudCB0eXBlcyBvZiBvdXRwdXQK
LSAgICAgICAgLy8gd2hpY2ggd2UgaGFuZGxlIGhlcmUuCi0gICAgICAgIGlmICghc2hvdWxkRHVt
cEFzVGV4dCkgewotICAgICAgICAgICAgLy8gUGxhaW4gdGV4dCBwYWdlcyBzaG91bGQgYmUgZHVt
cGVkIGFzIHRleHQKLSAgICAgICAgICAgIHN0cmluZyBtaW1lVHlwZSA9IGZyYW1lLT5kYXRhU291
cmNlKCktPnJlc3BvbnNlKCkubWltZVR5cGUoKS51dGY4KCk7Ci0gICAgICAgICAgICBpZiAobWlt
ZVR5cGUgPT0gInRleHQvcGxhaW4iKSB7Ci0gICAgICAgICAgICAgICAgc2hvdWxkRHVtcEFzVGV4
dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkRHVtcEFz
VGV4dCkgewotICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUgPSBtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOwotICAgICAgICAgICAg
c3RyaW5nIGRhdGFVdGY4ID0gc2hvdWxkRHVtcEFzUHJpbnRlZCA/IGR1bXBGcmFtZXNBc1ByaW50
ZWRUZXh0KGZyYW1lLCByZWN1cnNpdmUpIDogZHVtcEZyYW1lc0FzVGV4dChmcmFtZSwgcmVjdXJz
aXZlKTsKLSAgICAgICAgICAgIGlmIChmd3JpdGUoZGF0YVV0ZjguY19zdHIoKSwgMSwgZGF0YVV0
Zjguc2l6ZSgpLCBzdGRvdXQpICE9IGRhdGFVdGY4LnNpemUoKSkKLSAgICAgICAgICAgICAgICBG
QVRBTCgiU2hvcnQgd3JpdGUgdG8gc3Rkb3V0LCBkaXNrIGZ1bGw/XG4iKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0Q29udHJvbHMgcmVuZGVyVGV4
dEJlaGF2aW9yID0gV2ViRnJhbWU6OlJlbmRlckFzVGV4dE5vcm1hbDsKLSAgICAgICAgICAgIGlm
IChzaG91bGREdW1wQXNQcmludGVkKQotICAgICAgICAgICAgICAgIHJlbmRlclRleHRCZWhhdmlv
ciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0UHJpbnRpbmc7Ci0gICAgICAgICAgICBpZiAobV9w
YXJhbXMuZGVidWdSZW5kZXJUcmVlKQotICAgICAgICAgICAgICAgIHJlbmRlclRleHRCZWhhdmlv
ciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0RGVidWc7Ci0gICAgICAgICAgICBwcmludGYoIiVz
IiwgZnJhbWUtPnJlbmRlclRyZWVBc1RleHQocmVuZGVyVGV4dEJlaGF2aW9yKS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpOwotICAgICAg
ICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oZnJhbWUsIHJlY3Vyc2l2ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICAgICAgcHJpbnRmKCIlcyIsIGR1bXBBbGxCYWNr
Rm9yd2FyZExpc3RzKCkuY19zdHIoKSk7CisgICAgICAgIHN0cmluZyBkYXRhVXRmOCA9IG1fd2Vi
Vmlld0hvc3QtPnByb3h5KCktPmNhcHR1cmVUcmVlKG1fcGFyYW1zLmRlYnVnUmVuZGVyVHJlZSk7
CisgICAgICAgIGlmIChmd3JpdGUoZGF0YVV0ZjguY19zdHIoKSwgMSwgZGF0YVV0Zjguc2l6ZSgp
LCBzdGRvdXQpICE9IGRhdGFVdGY4LnNpemUoKSkKKyAgICAgICAgICAgIEZBVEFMKCJTaG9ydCB3
cml0ZSB0byBzdGRvdXQsIGRpc2sgZnVsbD9cbiIpOwogICAgIH0KICAgICBpZiAoZHVtcGVkQW55
dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBhcmF0b3JzKQogICAgICAgICBtX3ByaW50ZXIuaGFu
ZGxlVGV4dEZvb3RlcigpOwpAQCAtODEwLDMgKzYxNywyNCBAQCBpbnQgVGVzdFNoZWxsOjp3aW5k
b3dDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fd2luZG93TGlzdC5zaXplKCk7CiB9CisKK3ZvaWQg
VGVzdFNoZWxsOjpjYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXplX3Qgd2luZG93SW5kZXgsIFdl
YlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4qIGhpc3RvcnksIHNpemVfdCogY3VycmVudEVudHJ5SW5k
ZXgpCit7CisgICAgQVNTRVJUKGhpc3RvcnkpOworICAgIEFTU0VSVChjdXJyZW50RW50cnlJbmRl
eCk7CisgICAgaWYgKHdpbmRvd0luZGV4ID49IG1fd2luZG93TGlzdC5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXImIG5hdmlnYXRpb25Db250cm9s
bGVyID0gKm1fd2luZG93TGlzdFt3aW5kb3dJbmRleF0tPm5hdmlnYXRpb25Db250cm9sbGVyKCk7
CisgICAgc2l6ZV90IGVudHJ5Q291bnQgPSBuYXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUNvdW50
KCk7CisgICAgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiByZXN1bHQoZW50cnlDb3VudCk7Cisg
ICAgKmN1cnJlbnRFbnRyeUluZGV4ID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIubGFzdENvbW1pdHRl
ZEVudHJ5SW5kZXgoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZW50cnlD
b3VudDsgKytpbmRleCkgeworICAgICAgICBXZWJIaXN0b3J5SXRlbSBoaXN0b3J5SXRlbSA9IG5h
dmlnYXRpb25Db250cm9sbGVyLmVudHJ5QXRJbmRleChpbmRleCktPmNvbnRlbnRTdGF0ZSgpOwor
ICAgICAgICBpZiAoaGlzdG9yeUl0ZW0uaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGhpc3RvcnlJ
dGVtLmluaXRpYWxpemUoKTsKKyAgICAgICAgICAgIGhpc3RvcnlJdGVtLnNldFVSTFN0cmluZyhu
YXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUF0SW5kZXgoaW5kZXgpLT5VUkwoKS5zcGVjKCkudXRm
MTYoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2luZGV4XSA9IGhpc3RvcnlJdGVtOwor
ICAgIH0KKyAgICBoaXN0b3J5LT5zd2FwKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IGQxM2EzMjliMzc4NTlmYmIyNTM4YjA0OWRiNmU4
MTRlNDA3NGMxNWMuLjMwOTFjZTcxOWFmYTYxNDQ5YjEzNzUzZGUzZDZhOTVkZDk3NTg3NmMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCkBAIC0xNjUsNiArMTY1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VXaW5kb3coV2ViVmlld0hvc3QqKTsKICAgICB2
b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwogICAgIGludCB3aW5kb3dDb3VudCgpOworICAg
IHZvaWQgY2FwdHVyZUhpc3RvcnlGb3JXaW5kb3coc2l6ZV90IHdpbmRvd0luZGV4LCBXZWJLaXQ6
OldlYlZlY3RvcjxXZWJLaXQ6OldlYkhpc3RvcnlJdGVtPiosIHNpemVfdCogY3VycmVudEVudHJ5
SW5kZXgpOwogICAgIHN0YXRpYyB2b2lkIHJlc2l6ZVdpbmRvd0ZvclRlc3QoV2ViVmlld0hvc3Qq
LCBjb25zdCBXZWJLaXQ6OldlYlVSTCYpOwogCiAgICAgdm9pZCBzaG93RGV2VG9vbHMoKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBjNTQ1
OTMwYWFkM2U2YjJjZmE4YWY1ZjU0ZDNkMDliZGIyNzc1MDkwLi5mZGNiN2ViMzZiZjYxOWVjMjRh
YTE4NGUzYjQ1NTRmNjI0NzAyMGRiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCkBAIC05MjMsNiArOTIzLDExIEBAIGJvb2wgV2ViVmlld0hvc3Q6
OmFsbG93RXh0ZXJuYWxQYWdlcygpCiAgICAgcmV0dXJuIG1fc2hlbGwtPmFsbG93RXh0ZXJuYWxQ
YWdlcygpOwogfQogCit2b2lkIFdlYlZpZXdIb3N0OjpjYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhz
aXplX3Qgd2luZG93SW5kZXgsIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4qIGhpc3RvcnksIHNp
emVfdCogY3VycmVudEVudHJ5SW5kZXgpCit7CisgICAgbV9zaGVsbC0+Y2FwdHVyZUhpc3RvcnlG
b3JXaW5kb3cod2luZG93SW5kZXgsIGhpc3RvcnksIGN1cnJlbnRFbnRyeUluZGV4KTsKK30KKwog
Ly8gUHVibGljIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXZWJWaWV3SG9zdDo6V2ViVmlld0hvc3QoVGVzdFNo
ZWxsKiBzaGVsbCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5o
CmluZGV4IGQzYWU5YzIzNGE2MzZhNWM2Yzg0Y2VlZjNiZGI5M2Q5NzI4Mjg2MGQuLmY3MzAyZWUy
Y2UwMzNmNzc5NmE4OTlkOWE3YWVmMGM4OWRjMTVjNjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaApAQCAtMTcwLDYgKzE3MCw3IEBAIGNsYXNzIFdlYlZp
ZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2Vi
RnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCB2b2lkIHJlbG9hZCgpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBz
dGQ6OnN0cmluZyYgZnJhbWVOYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dF
eHRlcm5hbFBhZ2VzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVIaXN0b3J5
Rm9yV2luZG93KHNpemVfdCB3aW5kb3dJbmRleCwgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpX
ZWJIaXN0b3J5SXRlbT4qLCBzaXplX3QqIGN1cnJlbnRFbnRyeUluZGV4KSBPVkVSUklERTsKIAog
ICAgIC8vIE5hdmlnYXRpb25Ib3N0CiAgICAgdmlydHVhbCBib29sIG5hdmlnYXRlKGNvbnN0IFRl
c3ROYXZpZ2F0aW9uRW50cnkmLCBib29sIHJlbG9hZCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>