<?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>100818</bug_id>
          
          <creation_ts>2012-10-30 23:35:17 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add Ewk_File_Chooser_Request API</short_desc>
          <delta_ts>2012-10-31 12:17:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</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>
          
          <blocked>61838</blocked>
    
    <blocked>100822</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>754999</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-30 23:35:17 -0700</bug_when>
    <thetext>When the user click on an input button of type &quot;file&quot;, we should show a file chooser dialog. However, we don&apos;t currently provide an API allowing the browser to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755189</commentid>
    <comment_count>1</comment_count>
      <attachid>171625</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-31 05:37:23 -0700</bug_when>
    <thetext>Created attachment 171625
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755208</commentid>
    <comment_count>2</comment_count>
      <attachid>171625</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-31 06:15:17 -0700</bug_when>
    <thetext>Comment on attachment 171625
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp:72
&gt; +void Ewk_File_Chooser_Request::chooseFiles(Vector&lt; RefPtr&lt;APIObject&gt; &gt;&amp; fileURLs)

does not look like you&apos;re modifying fileURLs. Why not const ref?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp:143
&gt; +    EINA_LIST_FOREACH(chosenFiles, l, data) {

any check that data is not null, assertion?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request_private.h:52
&gt; +    inline bool wasHandled() const { return m_wasRequestHandled; }

is inline needed?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:38
&gt; +static void onFileChooserRequest(void* userData, Evas_Object*, void* eventInfo)

shouldn&apos;t input parameters been checked?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:43
&gt; +static int compareStrings(const void* string1, const void* string2)

same here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755229</commentid>
    <comment_count>3</comment_count>
      <attachid>171625</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-31 06:30:56 -0700</bug_when>
    <thetext>Comment on attachment 171625
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp:72
&gt;&gt; +void Ewk_File_Chooser_Request::chooseFiles(Vector&lt; RefPtr&lt;APIObject&gt; &gt;&amp; fileURLs)
&gt; 
&gt; does not look like you&apos;re modifying fileURLs. Why not const ref?

Needed by ImmutableArray::adopt()

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp:143
&gt;&gt; +    EINA_LIST_FOREACH(chosenFiles, l, data) {
&gt; 
&gt; any check that data is not null, assertion?

Yeah, I&apos;ll add a EINA_SAFETY_ON_NULL_RETURN_VAL().

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request_private.h:52
&gt;&gt; +    inline bool wasHandled() const { return m_wasRequestHandled; }
&gt; 
&gt; is inline needed?

It does not hurt.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:38
&gt;&gt; +static void onFileChooserRequest(void* userData, Evas_Object*, void* eventInfo)
&gt; 
&gt; shouldn&apos;t input parameters been checked?

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:43
&gt;&gt; +static int compareStrings(const void* string1, const void* string2)
&gt; 
&gt; same here

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755249</commentid>
    <comment_count>4</comment_count>
      <attachid>171642</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-31 06:55:33 -0700</bug_when>
    <thetext>Created attachment 171642
Patch

Take Mikhail&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755379</commentid>
    <comment_count>5</comment_count>
      <attachid>171642</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 09:37:52 -0700</bug_when>
    <thetext>Comment on attachment 171642
Patch

Rejecting attachment 171642 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t/git/webkit-commit-queue/Source/WebKit/chromium/v8 --revision 12787 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
50&gt;At revision 12787.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/14561278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755398</commentid>
    <comment_count>6</comment_count>
      <attachid>171675</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-31 09:50:09 -0700</bug_when>
    <thetext>Created attachment 171675
Patch for landing

Rebased on master and remove tabs.

Could someone please cq+ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755530</commentid>
    <comment_count>7</comment_count>
      <attachid>171675</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 12:17:36 -0700</bug_when>
    <thetext>Comment on attachment 171675
Patch for landing

Clearing flags on attachment: 171675

Committed r133057: &lt;http://trac.webkit.org/changeset/133057&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755531</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 12:17:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171625</attachid>
            <date>2012-10-31 05:37:23 -0700</date>
            <delta_ts>2012-10-31 06:55:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100818_ewk_file_chooser2.patch</filename>
            <type>text/plain</type>
            <size>30358</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmZmE5ZTM4Li5iNTNmODFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTItMTAtMzEgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Qg
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA4
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0IEFQSSBzbyB0aGF0IHRoZSBjbGllbnQKKyAgICAgICAg
Y2FuIGhhbmRsZSBmaWxlIGNob29zZXIgcmVxdWVzdHMgKGUuZy4gU2hvdyBhIGZpbGUKKyAgICAg
ICAgcGlja2VyIGRpYWxvZykgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYW4gaW5wdXQKKyAgICAg
ICAgZWxlbWVudCBvZiB0eXBlICJmaWxlIi4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxi
YWNrcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OkV3a19G
aWxlX0Nob29zZXJfUmVxdWVzdCk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6
On5Fd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QpOgorICAgICAgICAoRXdrX0ZpbGVfQ2hvb3Nlcl9S
ZXF1ZXN0OjphbGxvd011bHRpcGxlRmlsZXMpOgorICAgICAgICAoRXdrX0ZpbGVfQ2hvb3Nlcl9S
ZXF1ZXN0OjphY2NlcHRlZE1JTUVUeXBlcyk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3Q6OmNhbmNlbCk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmNob29z
ZUZpbGVzKToKKyAgICAgICAgKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9yZWYpOgorICAgICAg
ICAoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKToKKyAgICAgICAgKGV3a19maWxlX2No
b29zZXJfcmVxdWVzdF9hbGxvd19tdWx0aXBsZV9maWxlc19nZXQpOgorICAgICAgICAoZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWV0eXBlc19nZXQpOgorICAgICAgICAoZXdr
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgIChld2tfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZmlsZXNfY2hvb3NlKToKKyAgICAgICAgKGV3a19maWxlX2Nob29zZXJfcmVxdWVz
dF9maWxlX2Nob29zZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19m
aWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCk6CisgICAgICAgIChFd2tfRmlsZV9D
aG9vc2VyX1JlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVl
c3Q6Ondhc0hhbmRsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2ZpbGVfY2hvb3Nl
ci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwOiBBZGRlZCBjb3JyZXNwb25kaW5nCisgICAgICAg
IHVuaXQgdGVzdHMuCisgICAgICAgIChvbkZpbGVDaG9vc2VyUmVxdWVzdCk6CisgICAgICAgIChj
b21wYXJlU3RyaW5ncyk6CisgICAgICAgIChmcmVlU3RyaW5nTGlzdCk6CisgICAgICAgIChURVNU
X0YpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpydW5PcGVuUGFuZWwpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmg6CisgICAgICAgIChQ
YWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTEwLTMwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTWFrZSBXZWJLaXQyIEJ1aWxkIHdpdGggTkVU
V09SS19QUk9DRVNTIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDZjZWRl
ZDcuLjE1YjMyZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01MCw2ICs1MCw3IEBA
IExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
b3dubG9hZF9qb2IuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Vycm9yLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcAorICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2ludGVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50X3NlcnZp
Y2UuY3BwCkBAIC0yNDcsNiArMjQ4LDcgQEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRf
am9iLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZXJyb3IuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuaCIK
ICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19m
b3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmgiCkBAIC0z
NDksNiArMzUxLDcgQEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3azJf
ZG93bmxvYWRfam9iCiAgICAgdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0cmluZwogICAgIHRlc3Rf
ZXdrMl9mYXZpY29uX2RhdGFiYXNlCisgICAgdGVzdF9ld2syX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
CiAgICAgdGVzdF9ld2syX3JlZnB0cl9ldmFzX29iamVjdAogICAgIHRlc3RfZXdrMl9pbnRlbnRz
CiAgICAgdGVzdF9ld2syX3BvcHVwX21lbnUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCmluZGV4IDdmZGE3NTQuLmY5N2ViZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZXJyb3IuaCIKICNpbmNsdWRl
ICJld2tfZmF2aWNvbl9kYXRhYmFzZS5oIgorI2luY2x1ZGUgImV3a19maWxlX2Nob29zZXJfcmVx
dWVzdC5oIgogI2luY2x1ZGUgImV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIgogI2luY2x1
ZGUgImV3a19pbnRlbnQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3Mu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApp
bmRleCAxNWE3ODI4Li41NmQzNTdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAtMzMsNiArMzMsNyBAQAogCiBzdHJ1
Y3QgRXdrX0Rvd25sb2FkX0pvYjsKIHN0cnVjdCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yOworc3Ry
dWN0IEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdDsKIHN0cnVjdCBFd2tfRm9ybV9TdWJtaXNzaW9u
X1JlcXVlc3Q7CiBzdHJ1Y3QgRXdrX0Vycm9yOwogc3RydWN0IEV3a19SZXNvdXJjZV9SZXF1ZXN0
OwpAQCAtNTUsNiArNTYsNyBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgRG93bmxvYWRKb2JG
YWlsZWQsCiAgICAgRG93bmxvYWRKb2JGaW5pc2hlZCwKICAgICBEb3dubG9hZEpvYlJlcXVlc3Rl
ZCwKKyAgICBGaWxlQ2hvb3NlclJlcXVlc3QsCiAgICAgTmV3Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0
LAogICAgIExvYWRFcnJvciwKICAgICBMb2FkRmluaXNoZWQsCkBAIC0xNDksNiArMTUxLDcgQEAg
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYkNhbmNlbGxlZCwgImRvd25sb2Fk
LGNhbmNlbGxlZCIsIEV3a19Eb3dubG8KIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxv
YWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWlsZWQiLCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2Fk
LGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNL
KERvd25sb2FkSm9iUmVxdWVzdGVkLCAiZG93bmxvYWQscmVxdWVzdCIsIEV3a19Eb3dubG9hZF9K
b2IpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhGaWxlQ2hvb3NlclJlcXVlc3QsICJmaWxl
LGNob29zZXIscmVxdWVzdCIsIEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCk7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKE5ld0Zvcm1TdWJtaXNzaW9uUmVxdWVzdCwgImZvcm0sc3VibWlzc2lv
bixyZXF1ZXN0IiwgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0KTsKIERFQ0xBUkVfRVdLX1ZJ
RVdfQ0FMTEJBQ0soTG9hZEVycm9yLCAibG9hZCxlcnJvciIsIEV3a19FcnJvcik7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKExvYWRGaW5pc2hlZCwgImxvYWQsZmluaXNoZWQiLCB2b2lkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19maWxlX2No
b29zZXJfcmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNjM2Y4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgorI2lu
Y2x1ZGUgIk11dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiZXdrX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19GaWxlX0Nob29zZXJfUmVxdWVzdDo6
RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKQorICAgIDogbV9w
YXJhbWV0ZXJzKHBhcmFtZXRlcnMpCisgICAgLCBtX2xpc3RlbmVyKGxpc3RlbmVyKQorICAgICwg
bV93YXNSZXF1ZXN0SGFuZGxlZChmYWxzZSkKK3sKKyAgICBBU1NFUlQocGFyYW1ldGVycyk7Cisg
ICAgQVNTRVJUKGxpc3RlbmVyKTsKK30KKworRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0Ojp+RXdr
X0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KCkKK3sKKyAgICBpZiAoIW1fd2FzUmVxdWVzdEhhbmRsZWQp
CisgICAgICAgIG1fbGlzdGVuZXItPmNhbmNlbCgpOworfQorCitib29sIEV3a19GaWxlX0Nob29z
ZXJfUmVxdWVzdDo6YWxsb3dNdWx0aXBsZUZpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXJhbWV0ZXJzLT5hbGxvd011bHRpcGxlRmlsZXMoKTsKK30KKworUGFzc1JlZlB0cjxJbW11dGFi
bGVBcnJheT4gRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0OjphY2NlcHRlZE1JTUVUeXBlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGFyYW1ldGVycy0+YWNjZXB0TUlNRVR5cGVzKCk7Cit9CisK
K3ZvaWQgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0OjpjYW5jZWwoKQoreworICAgIG1fd2FzUmVx
dWVzdEhhbmRsZWQgPSB0cnVlOworCisgICAgcmV0dXJuIG1fbGlzdGVuZXItPmNhbmNlbCgpOwor
fQorCit2b2lkIEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdDo6Y2hvb3NlRmlsZXMoVmVjdG9yPCBS
ZWZQdHI8QVBJT2JqZWN0PiA+JiBmaWxlVVJMcykKK3sKKyAgICBBU1NFUlQoIWZpbGVVUkxzLmlz
RW1wdHkoKSk7CisgICAgQVNTRVJUKGZpbGVVUkxzLnNpemUoKSA9PSAxIHx8IG1fcGFyYW1ldGVy
cy0+YWxsb3dNdWx0aXBsZUZpbGVzKCkpOworCisgICAgbV93YXNSZXF1ZXN0SGFuZGxlZCA9IHRy
dWU7CisgICAgbV9saXN0ZW5lci0+Y2hvb3NlRmlsZXMoSW1tdXRhYmxlQXJyYXk6OmFkb3B0KGZp
bGVVUkxzKS5nZXQoKSk7Cit9CisKK0V3a19GaWxlX0Nob29zZXJfUmVxdWVzdCogZXdrX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3JlZihFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlcXVlc3QsIDApOworCisgICAg
cmVxdWVzdC0+cmVmKCk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBld2tfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfdW5yZWYoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHJlcXVlc3QpOworCisgICAgcmVx
dWVzdC0+ZGVyZWYoKTsKK30KKworRWluYV9Cb29sIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9h
bGxvd19tdWx0aXBsZV9maWxlc19nZXQoY29uc3QgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChyZXF1ZXN0LCBm
YWxzZSk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+YWxsb3dNdWx0aXBsZUZpbGVzKCk7Cit9CisK
K0VpbmFfTGlzdCogZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWV0eXBlc19n
ZXQoY29uc3QgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChyZXF1ZXN0LCAwKTsKKworICAgIEVpbmFfTGlzdCog
bWltZVR5cGVMaXN0ID0gMDsKKyAgICBSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IG1pbWVUeXBlcyA9
IHJlcXVlc3QtPmFjY2VwdGVkTUlNRVR5cGVzKCk7CisKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9
IG1pbWVUeXBlcy0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHN0YXRpY19jYXN0PFdlYlN0cmlu
Zyo+KG1pbWVUeXBlcy0+YXQoaSkpLT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3Ry
aW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtaW1lVHlwZUxp
c3QgPSBlaW5hX2xpc3RfYXBwZW5kKG1pbWVUeXBlTGlzdCwgZWluYV9zdHJpbmdzaGFyZV9hZGQo
bWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIH0KKworICAgIHJldHVybiBtaW1l
VHlwZUxpc3Q7Cit9CisKK0VpbmFfQm9vbCBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2Vs
KEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwocmVxdWVzdCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX1RS
VUVfUkVUVVJOX1ZBTChyZXF1ZXN0LT53YXNIYW5kbGVkKCksIGZhbHNlKTsKKworICAgIHJlcXVl
c3QtPmNhbmNlbCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBld2tfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCog
cmVxdWVzdCwgY29uc3QgRWluYV9MaXN0KiBjaG9zZW5GaWxlcykKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwocmVxdWVzdCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChjaG9zZW5GaWxlcywgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09O
X0ZBTFNFX1JFVFVSTl9WQUwoZWluYV9saXN0X2NvdW50KGNob3NlbkZpbGVzKSA9PSAxIHx8IHJl
cXVlc3QtPmFsbG93TXVsdGlwbGVGaWxlcygpLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05f
VFJVRV9SRVRVUk5fVkFMKHJlcXVlc3QtPndhc0hhbmRsZWQoKSwgZmFsc2UpOworCisgICAgVmVj
dG9yPCBSZWZQdHI8QVBJT2JqZWN0PiA+IGZpbGVVUkxzOworCisgICAgY29uc3QgRWluYV9MaXN0
KiBsOworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0goY2hvc2VuRmlsZXMs
IGwsIGRhdGEpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVVUkwgPSAiZmlsZTovLyIgKyBTdHJpbmc6
OmZyb21VVEY4KHN0YXRpY19jYXN0PGNoYXIqPihkYXRhKSk7CisgICAgICAgIGZpbGVVUkxzLmFw
cGVuZChXZWJVUkw6OmNyZWF0ZShmaWxlVVJMKSk7CisgICAgfQorCisgICAgcmVxdWVzdC0+Y2hv
b3NlRmlsZXMoZmlsZVVSTHMpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBl
d2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZV9jaG9vc2UoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1
ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBjaG9zZW5GaWxlKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChyZXF1ZXN0LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGNob3NlbkZpbGUsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9U
UlVFX1JFVFVSTl9WQUwocmVxdWVzdC0+d2FzSGFuZGxlZCgpLCBmYWxzZSk7CisKKyAgICBWZWN0
b3I8IFJlZlB0cjxBUElPYmplY3Q+ID4gZmlsZVVSTHM7CisgICAgU3RyaW5nIGZpbGVVUkwgPSAi
ZmlsZTovLyIgKyBTdHJpbmc6OmZyb21VVEY4KGNob3NlbkZpbGUpOworICAgIGZpbGVVUkxzLmFw
cGVuZChXZWJVUkw6OmNyZWF0ZShmaWxlVVJMKSk7CisKKyAgICByZXF1ZXN0LT5jaG9vc2VGaWxl
cyhmaWxlVVJMcyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhYzZjNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19maWxlX2Nob29zZXJf
cmVxdWVzdC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAq
IEBmaWxlICAgIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdC5oCisgKiBAYnJpZWYgICBEZXNjcmli
ZXMgdGhlIEV3ayBGaWxlIENob29zZXIgQVBJLgorICovCisKKyNpZm5kZWYgZXdrX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2gKKyNkZWZpbmUgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2gKKworI2lu
Y2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0
ICovCit0eXBlZGVmIHN0cnVjdCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgRXdrX0ZpbGVfQ2hv
b3Nlcl9SZXF1ZXN0OworCisvKioKKyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9m
IHRoZSBnaXZlbiBvYmplY3QuCisgKgorICogQHBhcmFtIHJlcXVlc3QgdGhlIHJlcXVlc3Qgb2Jq
ZWN0IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqCisgKiBAcmV0dXJuIGEgcG9p
bnRlciB0byB0aGUgb2JqZWN0IG9uIHN1Y2Nlc3MsIEBjIE5VTEwgb3RoZXJ3aXNlCisgKi8KK0VB
UEkgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcmVm
KEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqcmVxdWVzdCk7CisKKy8qKgorICogRGVjcmVhc2Vz
IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdCwgcG9zc2libHkgZnJlZWlu
ZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUgZmls
ZSBjaG9vc2VyIHJlcXVlc3QgaXMgZnJlZWQuIFRoZSByZXF1ZXN0CisgKiB3aWxsIGJlIGNhbmNl
bGxlZCBieSBkZWZhdWx0IGlmIHRoZSBjbGllbnQgZGlkIG5vdCBhY3Qgb24gaXQuCisgKgorICog
QHBhcmFtIHJlcXVlc3QgdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIGRlY3JlYXNlIHRoZSByZWZlcmVu
Y2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF91bnJlZihF
d2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgKnJlcXVlc3QpOworCisvKioKKyAqIFF1ZXJpZXMgaWYg
aXQgaXMgYWxsb3dlZCB0byBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgb3Igbm90LgorICoKKyAqIEBw
YXJhbSByZXF1ZXN0IHJlcXVlc3Qgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgaXQgaXMgYWxsb3dlZCB0byBzZWxlY3QgbXVsdGlwbGUgZmlsZXMsCisgKiAg
ICAgICAgIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19m
aWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd19tdWx0aXBsZV9maWxlc19nZXQoY29uc3QgRXdrX0Zp
bGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0KTsKKworLyoqCisgKiBRdWVyaWVzIHRoZSBsaXN0
IG9mIGFjY2VwdGVkIE1JTUUgdHlwZXMuCisgKgorICogUG9zc2libGUgTUlNRSB0eXBlcyBhcmU6
CisgKiAtICJhdWRpb1wvXCoiOglBbGwgc291bmQgZmlsZXMgYXJlIGFjY2VwdGVkCisgKiAtICJ2
aWRlb1wvXCoiOglBbGwgdmlkZW8gZmlsZXMgYXJlIGFjY2VwdGVkCisgKiAtICJpbWFnZVwvXCoi
OglBbGwgaW1hZ2UgZmlsZXMgYXJlIGFjY2VwdGVkCisgKiAtIHN0YW5kYXJkIElBTkEgTUlNRSB0
eXBlIChzZWUgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy8gZm9y
IGEgY29tcGxldGUgbGlzdCkKKyAqCisgKiBAcGFyYW0gcmVxdWVzdCByZXF1ZXN0IG9iamVjdCB0
byBxdWVyeQorICoKKyAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0eXBlcy4g
VGhlIGxpc3QgaXRlbXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkLgorICogVGhl
IGNhbGxlciBuZWVkcyB0byBmcmVlIHRoZSBsaXN0IGFuZCBpdHMgaXRlbXMgYWZ0ZXIgdXNlCisg
Ki8KK0VBUEkgRWluYV9MaXN0ICpld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWNjZXB0ZWRfbWlt
ZXR5cGVzX2dldChjb25zdCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgKnJlcXVlc3QpOworCisv
KioKKyAqIENhbmNlbHMgdGhlIGZpbGUgY2hvb3NlciByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSBy
ZXF1ZXN0IHJlcXVlc3Qgb2JqZWN0IHRvIGNhbmNlbAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9U
UlVFIGlmIHN1Y2Nlc3NmdWwsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkgRWlu
YV9Cb29sIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoRXdrX0ZpbGVfQ2hvb3Nlcl9S
ZXF1ZXN0ICpyZXF1ZXN0KTsKKworLyoqCisgKiBTZXRzIHRoZSBmaWxlcyBjaG9zZW4gYnkgdGhl
IHVzZXIuCisgKgorICogQHBhcmFtIHJlcXVlc3QgcmVxdWVzdCBvYmplY3QgdG8gdXBkYXRlCisg
KgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UKKyAqCisgKiBAc2VlIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlX2Nob29z
ZSgpCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlc19j
aG9vc2UoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0LCBjb25zdCBFaW5hX0xpc3Qg
KmNob3Nlbl9maWxlcyk7CisKKy8qKgorICogU2V0cyB0aGUgZmlsZSBjaG9zZW4gYnkgdGhlIHVz
ZXIuCisgKgorICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGluIGNhc2Ugb25seSBv
bmUgZmlsZSBuZWVkcyB0byBiZSBzZXQuCisgKgorICogQHBhcmFtIHJlcXVlc3QgcmVxdWVzdCBv
YmplY3QgdG8gdXBkYXRlCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc3VjY2Vzc2Z1
bCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqCisgKiBAc2VlIGV3a19maWxlX2Nob29zZXJf
cmVxdWVzdF9maWxlc19jaG9vc2UoKQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZmlsZV9jaG9vc2UoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0
LCBjb25zdCBjaGFyICpjaG9zZW5fZmlsZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2Vu
ZGlmCisKKyNlbmRpZiAvKiBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19maWxl
X2Nob29zZXJfcmVxdWVzdF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmFmYjdjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlLmgKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlX2gK
KworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIEltbXV0YWJs
ZUFycmF5OworY2xhc3MgV2ViT3BlblBhbmVsUGFyYW1ldGVyczsKK2NsYXNzIFdlYk9wZW5QYW5l
bFJlc3VsdExpc3RlbmVyUHJveHk7Cit9CisKK2NsYXNzIEV3a19GaWxlX0Nob29zZXJfUmVxdWVz
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdD4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdD4gY3JlYXRl
KFdlYktpdDo6V2ViT3BlblBhbmVsUGFyYW1ldGVycyogcGFyYW1ldGVycywgV2ViS2l0OjpXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5KiBsaXN0ZW5lcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KHBhcmFtZXRlcnMsIGxp
c3RlbmVyKSk7CisgICAgfQorCisgICAgfkV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCgpOworCisg
ICAgYm9vbCBhbGxvd011bHRpcGxlRmlsZXMoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFdlYktp
dDo6SW1tdXRhYmxlQXJyYXk+IGFjY2VwdGVkTUlNRVR5cGVzKCkgY29uc3Q7CisgICAgaW5saW5l
IGJvb2wgd2FzSGFuZGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzUmVxdWVzdEhhbmRsZWQ7IH0K
KyAgICB2b2lkIGNhbmNlbCgpOworICAgIHZvaWQgY2hvb3NlRmlsZXMoVmVjdG9yPCBSZWZQdHI8
V2ViS2l0OjpBUElPYmplY3Q+ID4mIGZpbGVVUkxzKTsKKworcHJpdmF0ZToKKyAgICBFd2tfRmls
ZV9DaG9vc2VyX1JlcXVlc3QoV2ViS2l0OjpXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzLCBXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKTsK
KworICAgIFJlZlB0cjxXZWJLaXQ6OldlYk9wZW5QYW5lbFBhcmFtZXRlcnM+IG1fcGFyYW1ldGVy
czsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5PiBt
X2xpc3RlbmVyOworICAgIGJvb2wgbV93YXNSZXF1ZXN0SGFuZGxlZDsKK307CisKKyNlbmRpZiAv
LyBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCBlZGZhZDBkLi41M2NhODNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKQEAgLTM0LDYgKzM0LDkg
QEAKICAqIC0gImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYio6IHJlcG9ydHMg
dGhhdCBhIGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCiAgKiAtICJkb3dubG9hZCxy
ZXF1ZXN0IiwgRXdrX0Rvd25sb2FkX0pvYio6IHJlcG9ydHMgdGhhdCBhIG5ldyBkb3dubG9hZCBo
YXMgYmVlbiByZXF1ZXN0ZWQuIFRoZSBjbGllbnQgc2hvdWxkIHNldCB0aGUKICAqICAgZGVzdGlu
YXRpb24gcGF0aCBieSBjYWxsaW5nIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KCkg
b3IgdGhlIGRvd25sb2FkIHdpbGwgZmFpbC4KKyAqIC0gImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwg
RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KjogcmVwb3J0cyB0aGF0IGEgcmVxdWVzdCBoYXMgYmVl
biBtYWRlIGZvciB0aGUgdXNlciB0byBjaG9vc2UKKyAqICAgYSBmaWxlIChvciBzZXZlcmFsKSBv
biB0aGUgZmlsZSBzeXN0ZW0uIENhbGwgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3JlZigpIG9u
IHRoZSByZXF1ZXN0IG9iamVjdCB0byBwcm9jZXNzIGl0CisgKiAgIGFzeW5jaHJvbm91c2x5Lgog
ICogLSAiZm9ybSxzdWJtaXNzaW9uLHJlcXVlc3QiLCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVl
c3QqOiBSZXBvcnRzIHRoYXQgYSBmb3JtIHJlcXVlc3QgaXMgYWJvdXQgdG8gYmUgc3VibWl0dGVk
LgogICogICBUaGUgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0IHBhc3NlZCBjb250YWlucyBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgdGV4dCBmaWVsZHMgb2YgdGhlIGZvcm0uIFRoaXMKICAqICAg
aXMgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgbG9naW4gaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUg
dXNlZCBsYXRlciB0byBwcmUtZmlsbCB0aGUgZm9ybS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9maWxlX2Nob29zZXIuaHRtbCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9maWxlX2No
b29zZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDE4YzY0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
cmVzb3VyY2VzL2ZpbGVfY2hvb3Nlci5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+RmlsZSBjaG9vc2VyIHRlc3Q8L3RpdGxlPgorPHNjcmlwdD4KK2Z1bmN0aW9u
IHVwZGF0ZVRpdGxlKCkKK3sKKyAgdmFyIG15aW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbXlJbnB1dCcpOworICB2YXIgdGl0bGUgPSAiIgorICBmb3IgKHZhciBpID0gMDsgaSA8IG15
aW5wdXQuZmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICB0aXRsZSArPSBteWlucHV0LmZpbGVzW2ld
Lm5hbWU7CisgICAgaWYgKGkgPCAobXlpbnB1dC5maWxlcy5sZW5ndGggLSAxKSkKKyAgICAgIHRp
dGxlICs9ICJ8IjsKKyAgfQorICBkb2N1bWVudC50aXRsZSA9IHRpdGxlOworfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0ibXlJbnB1dCIgbmFtZT0i
VXBsb2FkIG1lZGlhIiBhY2NlcHQ9ImltYWdlLyosdmlkZW8vKiIgbXVsdGlwbGU9Im11bHRpcGxl
IiBvbmNoYW5nZT0idXBkYXRlVGl0bGUoKSIgc3R5bGU9InRvcDogMTA7IGxlZnQ6IDEwOyIvPgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9maWxlX2Nob29zZXJfcmVx
dWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzYzBhNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9maWxlX2Nob29zZXJfcmVxdWVzdC5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0
VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVu
aXRUZXN0RW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVz
dFNlcnZlci5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmly
b25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGljIHZvaWQgb25GaWxlQ2hvb3NlclJlcXVlc3Qo
dm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgICpz
dGF0aWNfY2FzdDxFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqKj4odXNlckRhdGEpID0gZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X3JlZihzdGF0aWNfY2FzdDxFd2tfRmlsZV9DaG9vc2VyX1JlcXVl
c3QqPihldmVudEluZm8pKTsKK30KKworc3RhdGljIGludCBjb21wYXJlU3RyaW5ncyhjb25zdCB2
b2lkKiBzdHJpbmcxLCBjb25zdCB2b2lkKiBzdHJpbmcyKQoreworICAgIHJldHVybiBzdHJjbXAo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZzEpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oc3RyaW5nMikpOworfQorCitzdGF0aWMgdm9pZCBmcmVlU3RyaW5nTGlzdChFaW5hX0xpc3Qq
KiBsaXN0KQoreworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNUX0ZSRUUoKmxpc3QsIGRh
dGEpIHsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y2hhcio+KGRh
dGEpKTsKKyAgICB9Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKQoreworICAgIEV3a19GaWxlX0Nob29zZXJfUmVxdWVz
dCogcmVxdWVzdCA9IDA7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZp
ZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25GaWxlQ2hvb3NlclJlcXVlc3QsICZyZXF1
ZXN0KTsKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVz
b3VyY2UoImZpbGVfY2hvb3Nlci5odG1sIikuZGF0YSgpKSk7CisKKyAgICAvLyBDbGljayBvbiB0
aGUgZmlsZSBpbnB1dC4KKyAgICBtb3VzZUNsaWNrKDE1LCAxNSk7CisKKyAgICAvLyBXYWl0IGZv
ciB0aGUgZmlsZSBjaG9vc2VyIHJlcXVlc3QuCisgICAgd2hpbGUgKCFyZXF1ZXN0KQorICAgICAg
ICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfZGVsKHdlYlZpZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25GaWxlQ2hvb3Nl
clJlcXVlc3QpOworICAgIEFTU0VSVF9UUlVFKHJlcXVlc3QpOworICAgIC8vIFZhbGlkYXRlIGZp
bGUgY2hvb3NlciByZXF1ZXN0LgorICAgIEVYUEVDVF9UUlVFKGV3a19maWxlX2Nob29zZXJfcmVx
dWVzdF9hbGxvd19tdWx0aXBsZV9maWxlc19nZXQocmVxdWVzdCkpOworICAgIEVpbmFfTGlzdCog
bWltZVR5cGVzID0gZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWV0eXBlc19n
ZXQocmVxdWVzdCk7CisgICAgbWltZVR5cGVzID0gZWluYV9saXN0X3NvcnQobWltZVR5cGVzLCBl
aW5hX2xpc3RfY291bnQobWltZVR5cGVzKSwgY29tcGFyZVN0cmluZ3MpOworCisgICAgQVNTRVJU
X0VRKDIsIGVpbmFfbGlzdF9jb3VudChtaW1lVHlwZXMpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImlt
YWdlLyoiLCBzdGF0aWNfY2FzdDxjaGFyKj4oZWluYV9saXN0X250aChtaW1lVHlwZXMsIDApKSk7
CisgICAgRVhQRUNUX1NUUkVRKCJ2aWRlby8qIiwgc3RhdGljX2Nhc3Q8Y2hhcio+KGVpbmFfbGlz
dF9udGgobWltZVR5cGVzLCAxKSkpOworICAgIGZyZWVTdHJpbmdMaXN0KCZtaW1lVHlwZXMpOwor
CisgICAgQVNTRVJUX0ZBTFNFKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlc19jaG9vc2Uo
cmVxdWVzdCwgMCkpOworICAgIEVpbmFfTGlzdCogZmlsZXMgPSAwOworICAgIGZpbGVzID0gZWlu
YV9saXN0X2FwcGVuZChmaWxlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQoIi90bXAvZmlsZTEucG5n
IikpOworICAgIGZpbGVzID0gZWluYV9saXN0X2FwcGVuZChmaWxlcywgZWluYV9zdHJpbmdzaGFy
ZV9hZGQoIi90bXAvZmlsZTIucG5nIikpOworICAgIEFTU0VSVF9UUlVFKGV3a19maWxlX2Nob29z
ZXJfcmVxdWVzdF9maWxlc19jaG9vc2UocmVxdWVzdCwgZmlsZXMpKTsKKyAgICBBU1NFUlRfRkFM
U0UoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVzX2Nob29zZShyZXF1ZXN0LCBmaWxlcykp
OworICAgIGZyZWVTdHJpbmdMaXN0KCZmaWxlcyk7CisKKyAgICBld2tfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBKUyBzaWRlIHJl
Y2VpdmVkIHRoZSBmaWxlcy4KKyAgICBFWFBFQ1RfVFJVRSh3YWl0VW50aWxUaXRsZUNoYW5nZWRU
bygiZmlsZTEucG5nfGZpbGUyLnBuZyIpKTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2Us
IGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlX2Nob29zZSkKK3sKKyAgICBFd2tfRmlsZV9D
aG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QgPSAwOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZCh3ZWJWaWV3KCksICJmaWxlLGNob29zZXIscmVxdWVzdCIsIG9uRmlsZUNob29zZXJS
ZXF1ZXN0LCAmcmVxdWVzdCk7CisgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1l
bnQtPnVybEZvclJlc291cmNlKCJmaWxlX2Nob29zZXIuaHRtbCIpLmRhdGEoKSkpOworCisgICAg
Ly8gQ2xpY2sgb24gdGhlIGZpbGUgaW5wdXQuCisgICAgbW91c2VDbGljaygxNSwgMTUpOworCisg
ICAgLy8gV2FpdCBmb3IgdGhlIGZpbGUgY2hvb3NlciByZXF1ZXN0LgorICAgIHdoaWxlICghcmVx
dWVzdCkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJmaWxlLGNob29zZXIscmVxdWVzdCIs
IG9uRmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXF1ZXN0KTsKKworICAg
IEFTU0VSVF9GQUxTRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZV9jaG9vc2UocmVxdWVz
dCwgMCkpOworICAgIEFTU0VSVF9UUlVFKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlX2No
b29zZShyZXF1ZXN0LCAiL3RtcC9maWxlMy5wbmciKSk7CisgICAgQVNTRVJUX0ZBTFNFKGV3a19m
aWxlX2Nob29zZXJfcmVxdWVzdF9maWxlX2Nob29zZShyZXF1ZXN0LCAiL3RtcC9maWxlMy5wbmci
KSk7CisKKyAgICBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfdW5yZWYocmVxdWVzdCk7CisKKyAg
ICAvLyBDaGVjayB0aGF0IHRoZSBKUyBzaWRlIHJlY2VpdmVkIHRoZSBmaWxlLgorICAgIEVYUEVD
VF9UUlVFKHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKCJmaWxlMy5wbmciKSk7Cit9CisKK1RFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZV9jYW5jZWwp
Cit7CisgICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1ZXN0ID0gMDsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZmlsZSxjaG9vc2VyLHJlcXVl
c3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCwgJnJlcXVlc3QpOworICAgIEFTU0VSVF9UUlVFKGxv
YWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgiZmlsZV9jaG9vc2VyLmh0bWwi
KS5kYXRhKCkpKTsKKworICAgIC8vIENsaWNrIG9uIHRoZSBmaWxlIGlucHV0LgorICAgIG1vdXNl
Q2xpY2soMTUsIDE1KTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSBmaWxlIGNob29zZXIgcmVxdWVz
dC4KKyAgICB3aGlsZSAoIXJlcXVlc3QpCisgICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRl
KCk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAiZmls
ZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgQVNTRVJUX1RS
VUUocmVxdWVzdCk7CisKKyAgICBBU1NFUlRfVFJVRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2FuY2VsKHJlcXVlc3QpKTsKKyAgICBBU1NFUlRfRkFMU0UoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2NhbmNlbChyZXF1ZXN0KSk7CisKKyAgICBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfdW5y
ZWYocmVxdWVzdCk7CisKKyAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworICAgIEVYUEVD
VF9TVFJFUSgiRmlsZSBjaG9vc2VyIHRlc3QiLCBld2tfdmlld190aXRsZV9nZXQod2ViVmlldygp
KSk7CisKKyAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGNhbmNlbCBpZiB0aGUgY2xpZW50
IGRvZXMgbm90IGFjdCBvbiB0aGUgcmVxdWVzdC4KKyAgICByZXF1ZXN0ID0gMDsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZmlsZSxjaG9vc2VyLHJlcXVl
c3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCwgJnJlcXVlc3QpOworICAgIC8vIENsaWNrIG9uIHRo
ZSBmaWxlIGlucHV0LgorICAgIG1vdXNlQ2xpY2soMTUsIDE1KTsKKworICAgIC8vIFdhaXQgZm9y
IHRoZSBmaWxlIGNob29zZXIgcmVxdWVzdC4KKyAgICB3aGlsZSAoIXJlcXVlc3QpCisgICAgICAg
IGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19kZWwod2ViVmlldygpLCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisKKyAgICBld2tfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0
ZSgpOworICAgIEVYUEVDVF9TVFJFUSgiRmlsZSBjaG9vc2VyIHRlc3QiLCBld2tfdmlld190aXRs
ZV9nZXQod2ViVmlldygpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5jcHAKaW5kZXggNTAwMGQ1MC4uNDExMGI2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcApAQCAtMzEsOSAr
MzEsMTIgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0V2ZW50LmgiCiAj
aW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bG9yLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOworCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogc3RhdGljIGlubGluZSBQYWdlVUlDbGllbnRFZmwqIHRvUGFnZVVJQ2xpZW50
RWZsKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xMjIsNiArMTI1LDEzIEBAIHZvaWQgUGFn
ZVVJQ2xpZW50RWZsOjpzZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIFdLUmVjdCBmcmFtZSwgY29u
c3Qgdm9pZCogY2xpZW50CiAgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShlZSwgZnJhbWUub3Jp
Z2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdo
dCk7CiB9CiAKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5PcGVuUGFuZWwoV0tQYWdlUmVmLCBX
S0ZyYW1lUmVmLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgcGFyYW1ldGVycywgV0tPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZv
KS0+bV92aWV3SW1wbDsKKyAgICBSZWZQdHI8RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0PiBmaWxl
Q2hvb3NlclJlcXVlc3QgPSBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmNyZWF0ZSh0b0ltcGwo
cGFyYW1ldGVycyksIHRvSW1wbChsaXN0ZW5lcikpOworICAgIHZpZXdJbXBsLT5zbWFydENhbGxi
YWNrPEZpbGVDaG9vc2VyUmVxdWVzdD4oKS5jYWxsKGZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKSk7
Cit9CisKIFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3
SW1wbCkKICAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCiB7CkBAIC0xNDIsNiArMTUyLDcgQEAg
UGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQog
ICAgIHVpQ2xpZW50LnVuZm9jdXMgPSB1bmZvY3VzOwogICAgIHVpQ2xpZW50LmdldFdpbmRvd0Zy
YW1lID0gZ2V0V2luZG93RnJhbWU7CiAgICAgdWlDbGllbnQuc2V0V2luZG93RnJhbWUgPSBzZXRX
aW5kb3dGcmFtZTsKKyAgICB1aUNsaWVudC5ydW5PcGVuUGFuZWwgPSBydW5PcGVuUGFuZWw7CiAj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICB1aUNsaWVudC5leGNlZWRlZERhdGFiYXNlUXVv
dGEgPSBleGNlZWRlZERhdGFiYXNlUXVvdGE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCmluZGV4IDBkYzg0ZDUuLjJmNTQxOTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaApAQCAt
NjIsNiArNjIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRha2VGb2N1cyhXS1BhZ2VS
ZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgV0tSZWN0IGdl
dFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHNl
dFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiwgV0tSZWN0LCBjb25zdCB2b2lkKik7CisgICAgc3RhdGlj
IHZvaWQgcnVuT3BlblBhbmVsKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCB2b2lkKik7CiAK
ICAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1wbDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171642</attachid>
            <date>2012-10-31 06:55:33 -0700</date>
            <delta_ts>2012-10-31 09:50:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100818_ewk_file_chooser2.patch</filename>
            <type>text/plain</type>
            <size>30718</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1MjU3YzA0Li4yYmNmNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTItMTAtMzEgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Qg
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA4
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0IEFQSSBzbyB0aGF0IHRoZSBjbGllbnQKKyAgICAgICAg
Y2FuIGhhbmRsZSBmaWxlIGNob29zZXIgcmVxdWVzdHMgKGUuZy4gU2hvdyBhIGZpbGUKKyAgICAg
ICAgcGlja2VyIGRpYWxvZykgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYW4gaW5wdXQKKyAgICAg
ICAgZWxlbWVudCBvZiB0eXBlICJmaWxlIi4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxi
YWNrcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OkV3a19G
aWxlX0Nob29zZXJfUmVxdWVzdCk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6
On5Fd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QpOgorICAgICAgICAoRXdrX0ZpbGVfQ2hvb3Nlcl9S
ZXF1ZXN0OjphbGxvd011bHRpcGxlRmlsZXMpOgorICAgICAgICAoRXdrX0ZpbGVfQ2hvb3Nlcl9S
ZXF1ZXN0OjphY2NlcHRlZE1JTUVUeXBlcyk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3Q6OmNhbmNlbCk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmNob29z
ZUZpbGVzKToKKyAgICAgICAgKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9yZWYpOgorICAgICAg
ICAoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKToKKyAgICAgICAgKGV3a19maWxlX2No
b29zZXJfcmVxdWVzdF9hbGxvd19tdWx0aXBsZV9maWxlc19nZXQpOgorICAgICAgICAoZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWV0eXBlc19nZXQpOgorICAgICAgICAoZXdr
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgIChld2tfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZmlsZXNfY2hvb3NlKToKKyAgICAgICAgKGV3a19maWxlX2Nob29zZXJfcmVxdWVz
dF9maWxlX2Nob29zZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19m
aWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCk6CisgICAgICAgIChFd2tfRmlsZV9D
aG9vc2VyX1JlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1JlcXVl
c3Q6Ondhc0hhbmRsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2ZpbGVfY2hvb3Nl
ci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwOiBBZGRlZCBjb3JyZXNwb25kaW5nCisgICAgICAg
IHVuaXQgdGVzdHMuCisgICAgICAgIChvbkZpbGVDaG9vc2VyUmVxdWVzdCk6CisgICAgICAgIChj
b21wYXJlU3RyaW5ncyk6CisgICAgICAgIChmcmVlU3RyaW5nTGlzdCk6CisgICAgICAgIChURVNU
X0YpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpydW5PcGVuUGFuZWwpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmg6CisgICAgICAgIChQ
YWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTEwLTMxICBLeXVuZ1RhZSBLaW0gIDxrdGYua2ltQHNh
bXN1bmcuY29tPgogCiAgICAgICAgIFtXSzJdW0VGTF0gQXNzZXJ0IGNoZWNrIG5lZWQgdG8gYmUg
Y2hhbmdlZCBpbiBJbnB1dE1ldGhvZENvbnRleHRFZmw6OklucHV0TWV0aG9kQ29udGV4dEVmbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA2Y2VkZWQ3Li4xNWIzMmU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtNTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19lcnJvci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZmF2aWNvbl9kYXRhYmFzZS5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9v
c2VyX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lv
bl9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmNwcApAQCAtMjQ3LDYgKzI0OCw3
IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIgogICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Vycm9yLmgiCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9k
YXRhYmFzZS5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Qu
aCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19pbnRlbnQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19pbnRlbnRfc2VydmljZS5oIgpAQCAtMzQ5LDYgKzM1MSw3IEBAIFNFVChFV0sy
VW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX2Rvd25sb2FkX2pvYgogICAgIHRlc3Rf
ZXdrMl9laW5hX3NoYXJlZF9zdHJpbmcKICAgICB0ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZQor
ICAgIHRlc3RfZXdrMl9maWxlX2Nob29zZXJfcmVxdWVzdAogICAgIHRlc3RfZXdrMl9yZWZwdHJf
ZXZhc19vYmplY3QKICAgICB0ZXN0X2V3azJfaW50ZW50cwogICAgIHRlc3RfZXdrMl9wb3B1cF9t
ZW51CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0
Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3
ZmRhNzU0Li5mOTdlYmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgi
CiAjaW5jbHVkZSAiZXdrX2Vycm9yLmgiCiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5j
bHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKaW5kZXggMTVhNzgyOC4uNTZkMzU3ZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxs
YmFja3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2Fs
bGJhY2tzLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogc3RydWN0IEV3a19Eb3dubG9hZF9Kb2I7CiBz
dHJ1Y3QgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcjsKK3N0cnVjdCBFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3Q7CiBzdHJ1Y3QgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0Owogc3RydWN0IEV3a19F
cnJvcjsKIHN0cnVjdCBFd2tfUmVzb3VyY2VfUmVxdWVzdDsKQEAgLTU1LDYgKzU2LDcgQEAgZW51
bSBDYWxsYmFja1R5cGUgewogICAgIERvd25sb2FkSm9iRmFpbGVkLAogICAgIERvd25sb2FkSm9i
RmluaXNoZWQsCiAgICAgRG93bmxvYWRKb2JSZXF1ZXN0ZWQsCisgICAgRmlsZUNob29zZXJSZXF1
ZXN0LAogICAgIE5ld0Zvcm1TdWJtaXNzaW9uUmVxdWVzdCwKICAgICBMb2FkRXJyb3IsCiAgICAg
TG9hZEZpbmlzaGVkLApAQCAtMTQ5LDYgKzE1MSw3IEBAIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJB
Q0soRG93bmxvYWRKb2JDYW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxv
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iRmFpbGVkLCAiZG93bmxvYWQs
ZmFpbGVkIiwgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKERvd25sb2FkSm9iRmluaXNoZWQsICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9h
ZF9Kb2IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYlJlcXVlc3RlZCwg
ImRvd25sb2FkLHJlcXVlc3QiLCBFd2tfRG93bmxvYWRfSm9iKTsKK0RFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soRmlsZUNob29zZXJSZXF1ZXN0LCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBFd2tf
RmlsZV9DaG9vc2VyX1JlcXVlc3QpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhOZXdGb3Jt
U3VibWlzc2lvblJlcXVlc3QsICJmb3JtLHN1Ym1pc3Npb24scmVxdWVzdCIsIEV3a19Gb3JtX1N1
Ym1pc3Npb25fUmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKExvYWRFcnJvciwg
ImxvYWQsZXJyb3IiLCBFd2tfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2Fk
RmluaXNoZWQsICJsb2FkLGZpbmlzaGVkIiwgdm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkwYjFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0LmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19maWxlX2Nob29zZXJfcmVxdWVzdC5oIgor
CisjaW5jbHVkZSAiSW1tdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIK
KyNpbmNsdWRlICJXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1
ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgImV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRl
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCitFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OkV3a19GaWxlX0Nob29zZXJfUmVxdWVz
dChXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclByb3h5KiBsaXN0ZW5lcikKKyAgICA6IG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQor
ICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKKyAgICAsIG1fd2FzUmVxdWVzdEhhbmRsZWQoZmFs
c2UpCit7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMpOworICAgIEFTU0VSVChsaXN0ZW5lcik7Cit9
CisKK0V3a19GaWxlX0Nob29zZXJfUmVxdWVzdDo6fkV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCgp
Cit7CisgICAgaWYgKCFtX3dhc1JlcXVlc3RIYW5kbGVkKQorICAgICAgICBtX2xpc3RlbmVyLT5j
YW5jZWwoKTsKK30KKworYm9vbCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmFsbG93TXVsdGlw
bGVGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyYW1ldGVycy0+YWxsb3dNdWx0aXBs
ZUZpbGVzKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IEV3a19GaWxlX0Nob29z
ZXJfUmVxdWVzdDo6YWNjZXB0ZWRNSU1FVHlwZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
cmFtZXRlcnMtPmFjY2VwdE1JTUVUeXBlcygpOworfQorCit2b2lkIEV3a19GaWxlX0Nob29zZXJf
UmVxdWVzdDo6Y2FuY2VsKCkKK3sKKyAgICBtX3dhc1JlcXVlc3RIYW5kbGVkID0gdHJ1ZTsKKwor
ICAgIHJldHVybiBtX2xpc3RlbmVyLT5jYW5jZWwoKTsKK30KKwordm9pZCBFd2tfRmlsZV9DaG9v
c2VyX1JlcXVlc3Q6OmNob29zZUZpbGVzKFZlY3RvcjwgUmVmUHRyPEFQSU9iamVjdD4gPiYgZmls
ZVVSTHMpCit7CisgICAgQVNTRVJUKCFmaWxlVVJMcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChm
aWxlVVJMcy5zaXplKCkgPT0gMSB8fCBtX3BhcmFtZXRlcnMtPmFsbG93TXVsdGlwbGVGaWxlcygp
KTsKKworICAgIG1fd2FzUmVxdWVzdEhhbmRsZWQgPSB0cnVlOworICAgIG1fbGlzdGVuZXItPmNo
b29zZUZpbGVzKEltbXV0YWJsZUFycmF5OjphZG9wdChmaWxlVVJMcykuZ2V0KCkpOworfQorCitF
d2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9yZWYoRXdr
X0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChyZXF1ZXN0LCAwKTsKKworICAgIHJlcXVlc3QtPnJlZigpOworCisgICAg
cmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVm
KEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihyZXF1ZXN0KTsKKworICAgIHJlcXVlc3QtPmRlcmVmKCk7Cit9CisKK0Vp
bmFfQm9vbCBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dfbXVsdGlwbGVfZmlsZXNfZ2V0
KGNvbnN0IEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVxdWVzdCwgZmFsc2UpOworCisgICAgcmV0dXJuIHJl
cXVlc3QtPmFsbG93TXVsdGlwbGVGaWxlcygpOworfQorCitFaW5hX0xpc3QqIGV3a19maWxlX2No
b29zZXJfcmVxdWVzdF9hY2NlcHRlZF9taW1ldHlwZXNfZ2V0KGNvbnN0IEV3a19GaWxlX0Nob29z
ZXJfUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwocmVxdWVzdCwgMCk7CisKKyAgICBFaW5hX0xpc3QqIG1pbWVUeXBlTGlzdCA9IDA7CisgICAg
UmVmUHRyPEltbXV0YWJsZUFycmF5PiBtaW1lVHlwZXMgPSByZXF1ZXN0LT5hY2NlcHRlZE1JTUVU
eXBlcygpOworCisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBtaW1lVHlwZXMtPnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBTdHJpbmcgbWlt
ZVR5cGVTdHJpbmcgPSBzdGF0aWNfY2FzdDxXZWJTdHJpbmcqPihtaW1lVHlwZXMtPmF0KGkpKS0+
c3RyaW5nKCk7CisgICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgbWltZVR5cGVMaXN0ID0gZWluYV9saXN0X2FwcGVuZCht
aW1lVHlwZUxpc3QsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWltZVR5cGVMaXN0OworfQorCitFaW5hX0Jv
b2wgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChFd2tfRmlsZV9DaG9vc2VyX1JlcXVl
c3QqIHJlcXVlc3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlcXVl
c3QsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9UUlVFX1JFVFVSTl9WQUwocmVxdWVzdC0+
d2FzSGFuZGxlZCgpLCBmYWxzZSk7CisKKyAgICByZXF1ZXN0LT5jYW5jZWwoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVz
X2Nob29zZShFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IEVpbmFfTGlz
dCogY2hvc2VuRmlsZXMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJl
cXVlc3QsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2hvc2Vu
RmlsZXMsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKGVpbmFf
bGlzdF9jb3VudChjaG9zZW5GaWxlcykgPT0gMSB8fCByZXF1ZXN0LT5hbGxvd011bHRpcGxlRmls
ZXMoKSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOX1ZBTChyZXF1ZXN0
LT53YXNIYW5kbGVkKCksIGZhbHNlKTsKKworICAgIFZlY3RvcjwgUmVmUHRyPEFQSU9iamVjdD4g
PiBmaWxlVVJMczsKKworICAgIGNvbnN0IEVpbmFfTGlzdCogbDsKKyAgICB2b2lkKiBkYXRhOwor
ICAgIEVJTkFfTElTVF9GT1JFQUNIKGNob3NlbkZpbGVzLCBsLCBkYXRhKSB7CisgICAgICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCBmYWxzZSk7CisgICAgICAgIFN0cmlu
ZyBmaWxlVVJMID0gImZpbGU6Ly8iICsgU3RyaW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjaGFy
Kj4oZGF0YSkpOworICAgICAgICBmaWxlVVJMcy5hcHBlbmQoV2ViVVJMOjpjcmVhdGUoZmlsZVVS
TCkpOworICAgIH0KKworICAgIHJlcXVlc3QtPmNob29zZUZpbGVzKGZpbGVVUkxzKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Zp
bGVfY2hvb3NlKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgY2hhciog
Y2hvc2VuRmlsZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVxdWVz
dCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjaG9zZW5GaWxl
LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk5fVkFMKHJlcXVlc3QtPndh
c0hhbmRsZWQoKSwgZmFsc2UpOworCisgICAgVmVjdG9yPCBSZWZQdHI8QVBJT2JqZWN0PiA+IGZp
bGVVUkxzOworICAgIFN0cmluZyBmaWxlVVJMID0gImZpbGU6Ly8iICsgU3RyaW5nOjpmcm9tVVRG
OChjaG9zZW5GaWxlKTsKKyAgICBmaWxlVVJMcy5hcHBlbmQoV2ViVVJMOjpjcmVhdGUoZmlsZVVS
TCkpOworCisgICAgcmVxdWVzdC0+Y2hvb3NlRmlsZXMoZmlsZVVSTHMpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhlYWM2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuaApAQCAtMCwwICsxLDEyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfZmlsZV9jaG9vc2Vy
X3JlcXVlc3QuaAorICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgRmlsZSBDaG9vc2VyIEFQ
SS4KKyAqLworCisjaWZuZGVmIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9oCisjZGVmaW5lIGV3
a19maWxlX2Nob29zZXJfcmVxdWVzdF9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5h
bWUgZm9yIEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrX0Zp
bGVfQ2hvb3Nlcl9SZXF1ZXN0IEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdDsKKworLyoqCisgKiBJ
bmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgorICoKKyAq
IEBwYXJhbSByZXF1ZXN0IHRoZSByZXF1ZXN0IG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJl
bmNlIGNvdW50CisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBvbiBzdWNj
ZXNzLCBAYyBOVUxMIG90aGVyd2lzZQorICovCitFQVBJIEV3a19GaWxlX0Nob29zZXJfUmVxdWVz
dCAqZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3JlZihFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Qg
KnJlcXVlc3QpOworCisvKioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRo
ZSBnaXZlbiBvYmplY3QsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hlbiB0aGUgcmVm
ZXJlbmNlIGNvdW50IHJlYWNoZXMgMCwgdGhlIGZpbGUgY2hvb3NlciByZXF1ZXN0IGlzIGZyZWVk
LiBUaGUgcmVxdWVzdAorICogd2lsbCBiZSBjYW5jZWxsZWQgYnkgZGVmYXVsdCBpZiB0aGUgY2xp
ZW50IGRpZCBub3QgYWN0IG9uIGl0LgorICoKKyAqIEBwYXJhbSByZXF1ZXN0IHRoZSByZXF1ZXN0
IG9iamVjdCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBl
d2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfdW5yZWYoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpy
ZXF1ZXN0KTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGl0IGlzIGFsbG93ZWQgdG8gc2VsZWN0IG11
bHRpcGxlIGZpbGVzIG9yIG5vdC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCByZXF1ZXN0IG9iamVj
dCB0byBxdWVyeQorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGl0IGlzIGFsbG93ZWQg
dG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzLAorICogICAgICAgICBAYyBFSU5BX0ZBTFNFIG90aGVy
d2lzZQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3df
bXVsdGlwbGVfZmlsZXNfZ2V0KGNvbnN0IEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqcmVxdWVz
dCk7CisKKy8qKgorICogUXVlcmllcyB0aGUgbGlzdCBvZiBhY2NlcHRlZCBNSU1FIHR5cGVzLgor
ICoKKyAqIFBvc3NpYmxlIE1JTUUgdHlwZXMgYXJlOgorICogLSAiYXVkaW9cL1wqIjoJQWxsIHNv
dW5kIGZpbGVzIGFyZSBhY2NlcHRlZAorICogLSAidmlkZW9cL1wqIjoJQWxsIHZpZGVvIGZpbGVz
IGFyZSBhY2NlcHRlZAorICogLSAiaW1hZ2VcL1wqIjoJQWxsIGltYWdlIGZpbGVzIGFyZSBhY2Nl
cHRlZAorICogLSBzdGFuZGFyZCBJQU5BIE1JTUUgdHlwZSAoc2VlIGh0dHA6Ly93d3cuaWFuYS5v
cmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvIGZvciBhIGNvbXBsZXRlIGxpc3QpCisgKgorICog
QHBhcmFtIHJlcXVlc3QgcmVxdWVzdCBvYmplY3QgdG8gcXVlcnkKKyAqCisgKiBAcmV0dXJuIFRo
ZSBsaXN0IG9mIGFjY2VwdGVkIE1JTUUgdHlwZXMuIFRoZSBsaXN0IGl0ZW1zIGFyZSBndWFyYW50
ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4KKyAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gZnJlZSB0aGUg
bGlzdCBhbmQgaXRzIGl0ZW1zIGFmdGVyIHVzZQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWV0eXBlc19nZXQoY29uc3QgRXdrX0ZpbGVf
Q2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0KTsKKworLyoqCisgKiBDYW5jZWxzIHRoZSBmaWxlIGNo
b29zZXIgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCByZXF1ZXN0IG9iamVjdCB0byBj
YW5jZWwKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzdWNjZXNzZnVsLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2FuY2VsKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqcmVxdWVzdCk7CisKKy8qKgor
ICogU2V0cyB0aGUgZmlsZXMgY2hvc2VuIGJ5IHRoZSB1c2VyLgorICoKKyAqIEBwYXJhbSByZXF1
ZXN0IHJlcXVlc3Qgb2JqZWN0IHRvIHVwZGF0ZQorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHN1Y2Nlc3NmdWwsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKgorICogQHNlZSBld2tf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZV9jaG9vc2UoKQorICovCitFQVBJIEVpbmFfQm9vbCBl
d2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKEV3a19GaWxlX0Nob29zZXJfUmVx
dWVzdCAqcmVxdWVzdCwgY29uc3QgRWluYV9MaXN0ICpjaG9zZW5fZmlsZXMpOworCisvKioKKyAq
IFNldHMgdGhlIGZpbGUgY2hvc2VuIGJ5IHRoZSB1c2VyLgorICoKKyAqIFRoaXMgaXMgYSBjb252
ZW5pZW5jZSBmdW5jdGlvbiBpbiBjYXNlIG9ubHkgb25lIGZpbGUgbmVlZHMgdG8gYmUgc2V0Lgor
ICoKKyAqIEBwYXJhbSByZXF1ZXN0IHJlcXVlc3Qgb2JqZWN0IHRvIHVwZGF0ZQorICoKKyAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHN1Y2Nlc3NmdWwsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNl
CisgKgorICogQHNlZSBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKCkKKyAq
LworRUFQSSBFaW5hX0Jvb2wgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2hvb3NlKEV3
a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqcmVxdWVzdCwgY29uc3QgY2hhciAqY2hvc2VuX2ZpbGUp
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZXdrX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmI3YzkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGVfaAorI2RlZmluZSBld2tf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBJbW11dGFibGVBcnJheTsKK2NsYXNzIFdlYk9wZW5QYW5l
bFBhcmFtZXRlcnM7CitjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OworfQor
CitjbGFzcyBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxFd2tf
RmlsZV9DaG9vc2VyX1JlcXVlc3Q+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
d2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q+IGNyZWF0ZShXZWJLaXQ6OldlYk9wZW5QYW5lbFBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMsIFdlYktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94
eSogbGlzdGVuZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a19GaWxl
X0Nob29zZXJfUmVxdWVzdChwYXJhbWV0ZXJzLCBsaXN0ZW5lcikpOworICAgIH0KKworICAgIH5F
d2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QoKTsKKworICAgIGJvb2wgYWxsb3dNdWx0aXBsZUZpbGVz
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxXZWJLaXQ6OkltbXV0YWJsZUFycmF5PiBhY2NlcHRl
ZE1JTUVUeXBlcygpIGNvbnN0OworICAgIGlubGluZSBib29sIHdhc0hhbmRsZWQoKSBjb25zdCB7
IHJldHVybiBtX3dhc1JlcXVlc3RIYW5kbGVkOyB9CisgICAgdm9pZCBjYW5jZWwoKTsKKyAgICB2
b2lkIGNob29zZUZpbGVzKFZlY3RvcjwgUmVmUHRyPFdlYktpdDo6QVBJT2JqZWN0PiA+JiBmaWxl
VVJMcyk7CisKK3ByaXZhdGU6CisgICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KFdlYktpdDo6
V2ViT3BlblBhbmVsUGFyYW1ldGVycyogcGFyYW1ldGVycywgV2ViS2l0OjpXZWJPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lclByb3h5KiBsaXN0ZW5lcik7CisKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJP
cGVuUGFuZWxQYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgUmVmUHRyPFdlYktpdDo6V2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eT4gbV9saXN0ZW5lcjsKKyAgICBib29sIG1fd2Fz
UmVxdWVzdEhhbmRsZWQ7Cit9OworCisjZW5kaWYgLy8gZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgK
aW5kZXggZWRmYWQwZC4uNTNjYTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCkBAIC0zNCw2ICszNCw5IEBACiAgKiAtICJkb3dubG9hZCxmaW5pc2hl
ZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0ZWQg
c3VjY2Vzc2Z1bGx5LgogICogLSAiZG93bmxvYWQscmVxdWVzdCIsIEV3a19Eb3dubG9hZF9Kb2Iq
OiByZXBvcnRzIHRoYXQgYSBuZXcgZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkLiBUaGUgY2xp
ZW50IHNob3VsZCBzZXQgdGhlCiAgKiAgIGRlc3RpbmF0aW9uIHBhdGggYnkgY2FsbGluZyBld2tf
ZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX3NldCgpIG9yIHRoZSBkb3dubG9hZCB3aWxsIGZhaWwu
CisgKiAtICJmaWxlLGNob29zZXIscmVxdWVzdCIsIEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCo6
IHJlcG9ydHMgdGhhdCBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBmb3IgdGhlIHVzZXIgdG8gY2hv
b3NlCisgKiAgIGEgZmlsZSAob3Igc2V2ZXJhbCkgb24gdGhlIGZpbGUgc3lzdGVtLiBDYWxsIGV3
a19maWxlX2Nob29zZXJfcmVxdWVzdF9yZWYoKSBvbiB0aGUgcmVxdWVzdCBvYmplY3QgdG8gcHJv
Y2VzcyBpdAorICogICBhc3luY2hyb25vdXNseS4KICAqIC0gImZvcm0sc3VibWlzc2lvbixyZXF1
ZXN0IiwgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0KjogUmVwb3J0cyB0aGF0IGEgZm9ybSBy
ZXF1ZXN0IGlzIGFib3V0IHRvIGJlIHN1Ym1pdHRlZC4KICAqICAgVGhlIEV3a19Gb3JtX1N1Ym1p
c3Npb25fUmVxdWVzdCBwYXNzZWQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRleHQg
ZmllbGRzIG9mIHRoZSBmb3JtLiBUaGlzCiAgKiAgIGlzIHR5cGljYWxseSB1c2VkIHRvIHN0b3Jl
IGxvZ2luIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgbGF0ZXIgdG8gcHJlLWZpbGwgdGhl
IGZvcm0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvZmlsZV9jaG9vc2VyLmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvZmlsZV9jaG9vc2VyLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxOGM2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9maWxlX2Nob29zZXIuaHRt
bApAQCAtMCwwICsxLDIxIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkZpbGUgY2hvb3NlciB0
ZXN0PC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiB1cGRhdGVUaXRsZSgpCit7CisgIHZhciBt
eWlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215SW5wdXQnKTsKKyAgdmFyIHRpdGxl
ID0gIiIKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBteWlucHV0LmZpbGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgdGl0bGUgKz0gbXlpbnB1dC5maWxlc1tpXS5uYW1lOworICAgIGlmIChpIDwgKG15aW5w
dXQuZmlsZXMubGVuZ3RoIC0gMSkpCisgICAgICB0aXRsZSArPSAifCI7CisgIH0KKyAgZG9jdW1l
bnQudGl0bGUgPSB0aXRsZTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aW5wdXQg
dHlwZT0iZmlsZSIgaWQ9Im15SW5wdXQiIG5hbWU9IlVwbG9hZCBtZWRpYSIgYWNjZXB0PSJpbWFn
ZS8qLHZpZGVvLyoiIG11bHRpcGxlPSJtdWx0aXBsZSIgb25jaGFuZ2U9InVwZGF0ZVRpdGxlKCki
IHN0eWxlPSJ0b3A6IDEwOyBsZWZ0OiAxMDsiLz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9maWxl
X2Nob29zZXJfcmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE1NjJkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmlsZV9jaG9vc2VyX3JlcXVl
c3QuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIK
KyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5j
bHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxFV2Vi
S2l0Mi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRl
c3Q7CisKK2V4dGVybiBFV0syVW5pdFRlc3RFbnZpcm9ubWVudCogZW52aXJvbm1lbnQ7CisKK3N0
YXRpYyB2b2lkIG9uRmlsZUNob29zZXJSZXF1ZXN0KHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqKiBy
ZXR1cm5SZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0Kio+KHVz
ZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRShyZXR1cm5SZXF1ZXN0KTsKKyAgICBFd2tfRmlsZV9D
aG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3QqPihldmVudEluZm8pOworICAgIEFTU0VSVF9UUlVFKHJlcXVlc3QpOworCisgICAgLy8g
UmVmIHRoZSByZXF1ZXN0IHRvIHByb2Nlc3MgYXN5bmNocm9ub3VzbHkuCisgICAgKnJldHVyblJl
cXVlc3QgPSBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcmVmKHJlcXVlc3QpOworfQorCitzdGF0
aWMgaW50IGNvbXBhcmVTdHJpbmdzKGNvbnN0IHZvaWQqIHN0cmluZzEsIGNvbnN0IHZvaWQqIHN0
cmluZzIpCit7CisgICAgQVNTRVJUKHN0cmluZzEpOworICAgIEFTU0VSVChzdHJpbmcyKTsKKwor
ICAgIHJldHVybiBzdHJjbXAoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZzEpLCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RyaW5nMikpOworfQorCitzdGF0aWMgdm9pZCBmcmVlU3Ry
aW5nTGlzdChFaW5hX0xpc3QqKiBsaXN0KQoreworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9M
SVNUX0ZSRUUoKmxpc3QsIGRhdGEpIHsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3Rh
dGljX2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICB9Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKQoreworICAgIEV3a19G
aWxlX0Nob29zZXJfUmVxdWVzdCogcmVxdWVzdCA9IDA7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25GaWxlQ2hv
b3NlclJlcXVlc3QsICZyZXF1ZXN0KTsKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZp
cm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoImZpbGVfY2hvb3Nlci5odG1sIikuZGF0YSgpKSk7CisK
KyAgICAvLyBDbGljayBvbiB0aGUgZmlsZSBpbnB1dC4KKyAgICBtb3VzZUNsaWNrKDE1LCAxNSk7
CisKKyAgICAvLyBXYWl0IGZvciB0aGUgZmlsZSBjaG9vc2VyIHJlcXVlc3QuCisgICAgd2hpbGUg
KCFyZXF1ZXN0KQorICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworCisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1
ZXN0Iiwgb25GaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIEFTU0VSVF9UUlVFKHJlcXVlc3QpOwor
ICAgIC8vIFZhbGlkYXRlIGZpbGUgY2hvb3NlciByZXF1ZXN0LgorICAgIEVYUEVDVF9UUlVFKGV3
a19maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd19tdWx0aXBsZV9maWxlc19nZXQocmVxdWVzdCkp
OworICAgIEVpbmFfTGlzdCogbWltZVR5cGVzID0gZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Fj
Y2VwdGVkX21pbWV0eXBlc19nZXQocmVxdWVzdCk7CisgICAgbWltZVR5cGVzID0gZWluYV9saXN0
X3NvcnQobWltZVR5cGVzLCBlaW5hX2xpc3RfY291bnQobWltZVR5cGVzKSwgY29tcGFyZVN0cmlu
Z3MpOworCisgICAgQVNTRVJUX0VRKDIsIGVpbmFfbGlzdF9jb3VudChtaW1lVHlwZXMpKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImltYWdlLyoiLCBzdGF0aWNfY2FzdDxjaGFyKj4oZWluYV9saXN0X250
aChtaW1lVHlwZXMsIDApKSk7CisgICAgRVhQRUNUX1NUUkVRKCJ2aWRlby8qIiwgc3RhdGljX2Nh
c3Q8Y2hhcio+KGVpbmFfbGlzdF9udGgobWltZVR5cGVzLCAxKSkpOworICAgIGZyZWVTdHJpbmdM
aXN0KCZtaW1lVHlwZXMpOworCisgICAgQVNTRVJUX0ZBTFNFKGV3a19maWxlX2Nob29zZXJfcmVx
dWVzdF9maWxlc19jaG9vc2UocmVxdWVzdCwgMCkpOworICAgIEVpbmFfTGlzdCogZmlsZXMgPSAw
OworICAgIGZpbGVzID0gZWluYV9saXN0X2FwcGVuZChmaWxlcywgZWluYV9zdHJpbmdzaGFyZV9h
ZGQoIi90bXAvZmlsZTEucG5nIikpOworICAgIGZpbGVzID0gZWluYV9saXN0X2FwcGVuZChmaWxl
cywgZWluYV9zdHJpbmdzaGFyZV9hZGQoIi90bXAvZmlsZTIucG5nIikpOworICAgIEFTU0VSVF9U
UlVFKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlc19jaG9vc2UocmVxdWVzdCwgZmlsZXMp
KTsKKyAgICBBU1NFUlRfRkFMU0UoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVzX2Nob29z
ZShyZXF1ZXN0LCBmaWxlcykpOworICAgIGZyZWVTdHJpbmdMaXN0KCZmaWxlcyk7CisKKyAgICBl
d2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICAvLyBDaGVjayB0
aGF0IHRoZSBKUyBzaWRlIHJlY2VpdmVkIHRoZSBmaWxlcy4KKyAgICBFWFBFQ1RfVFJVRSh3YWl0
VW50aWxUaXRsZUNoYW5nZWRUbygiZmlsZTEucG5nfGZpbGUyLnBuZyIpKTsKK30KKworVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlX2Nob29zZSkK
K3sKKyAgICBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QgPSAwOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJmaWxlLGNob29zZXIscmVxdWVz
dCIsIG9uRmlsZUNob29zZXJSZXF1ZXN0LCAmcmVxdWVzdCk7CisgICAgQVNTRVJUX1RSVUUobG9h
ZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJmaWxlX2Nob29zZXIuaHRtbCIp
LmRhdGEoKSkpOworCisgICAgLy8gQ2xpY2sgb24gdGhlIGZpbGUgaW5wdXQuCisgICAgbW91c2VD
bGljaygxNSwgMTUpOworCisgICAgLy8gV2FpdCBmb3IgdGhlIGZpbGUgY2hvb3NlciByZXF1ZXN0
LgorICAgIHdoaWxlICghcmVxdWVzdCkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUo
KTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJmaWxl
LGNob29zZXIscmVxdWVzdCIsIG9uRmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBBU1NFUlRfVFJV
RShyZXF1ZXN0KTsKKworICAgIEFTU0VSVF9GQUxTRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
ZmlsZV9jaG9vc2UocmVxdWVzdCwgMCkpOworICAgIEFTU0VSVF9UUlVFKGV3a19maWxlX2Nob29z
ZXJfcmVxdWVzdF9maWxlX2Nob29zZShyZXF1ZXN0LCAiL3RtcC9maWxlMy5wbmciKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9maWxlX2Nob29zZShyZXF1ZXN0
LCAiL3RtcC9maWxlMy5wbmciKSk7CisKKyAgICBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfdW5y
ZWYocmVxdWVzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBKUyBzaWRlIHJlY2VpdmVkIHRo
ZSBmaWxlLgorICAgIEVYUEVDVF9UUlVFKHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKCJmaWxlMy5w
bmciKSk7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZmlsZV9jYW5jZWwpCit7CisgICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1
ZXN0ID0gMDsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAi
ZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCwgJnJlcXVlc3QpOwor
ICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgi
ZmlsZV9jaG9vc2VyLmh0bWwiKS5kYXRhKCkpKTsKKworICAgIC8vIENsaWNrIG9uIHRoZSBmaWxl
IGlucHV0LgorICAgIG1vdXNlQ2xpY2soMTUsIDE1KTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSBm
aWxlIGNob29zZXIgcmVxdWVzdC4KKyAgICB3aGlsZSAoIXJlcXVlc3QpCisgICAgICAgIGVjb3Jl
X21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19k
ZWwod2ViVmlldygpLCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVz
dCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisKKyAgICBBU1NFUlRfVFJVRShld2tfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpKTsKKyAgICBBU1NFUlRfRkFMU0UoZXdr
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KSk7CisKKyAgICBld2tfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICBlY29yZV9tYWluX2xvb3BfaXRl
cmF0ZSgpOworICAgIEVYUEVDVF9TVFJFUSgiRmlsZSBjaG9vc2VyIHRlc3QiLCBld2tfdmlld190
aXRsZV9nZXQod2ViVmlldygpKSk7CisKKyAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGNh
bmNlbCBpZiB0aGUgY2xpZW50IGRvZXMgbm90IGFjdCBvbiB0aGUgcmVxdWVzdC4KKyAgICByZXF1
ZXN0ID0gMDsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAi
ZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCwgJnJlcXVlc3QpOwor
ICAgIC8vIENsaWNrIG9uIHRoZSBmaWxlIGlucHV0LgorICAgIG1vdXNlQ2xpY2soMTUsIDE1KTsK
KworICAgIC8vIFdhaXQgZm9yIHRoZSBmaWxlIGNob29zZXIgcmVxdWVzdC4KKyAgICB3aGlsZSAo
IXJlcXVlc3QpCisgICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAiZmlsZSxjaG9vc2VyLHJlcXVl
c3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisK
KyAgICBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICBlY29y
ZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworICAgIEVYUEVDVF9TVFJFUSgiRmlsZSBjaG9vc2VyIHRl
c3QiLCBld2tfdmlld190aXRsZV9nZXQod2ViVmlldygpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKaW5kZXggNTAwMGQ1MC4uNDEx
MGI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGll
bnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmNwcApAQCAtMzEsOSArMzEsMTIgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNs
dWRlICJXS0V2ZW50LmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJh
Y2tzOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGlubGluZSBQYWdlVUlDbGllbnRF
ZmwqIHRvUGFnZVVJQ2xpZW50RWZsKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xMjIsNiAr
MTI1LDEzIEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYs
IFdLUmVjdCBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50CiAgICAgZWNvcmVfZXZhc19tb3ZlX3Jl
c2l6ZShlZSwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRo
LCBmcmFtZS5zaXplLmhlaWdodCk7CiB9CiAKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5PcGVu
UGFuZWwoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgcGFy
YW1ldGVycywgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKKyAgICBSZWZQdHI8RXdrX0ZpbGVfQ2hv
b3Nlcl9SZXF1ZXN0PiBmaWxlQ2hvb3NlclJlcXVlc3QgPSBFd2tfRmlsZV9DaG9vc2VyX1JlcXVl
c3Q6OmNyZWF0ZSh0b0ltcGwocGFyYW1ldGVycyksIHRvSW1wbChsaXN0ZW5lcikpOworICAgIHZp
ZXdJbXBsLT5zbWFydENhbGxiYWNrPEZpbGVDaG9vc2VyUmVxdWVzdD4oKS5jYWxsKGZpbGVDaG9v
c2VyUmVxdWVzdC5nZXQoKSk7Cit9CisKIFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZs
KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKICAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCiB7CkBA
IC0xNDIsNiArMTUyLDcgQEAgUGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwoRXdrVmll
d0ltcGwqIHZpZXdJbXBsKQogICAgIHVpQ2xpZW50LnVuZm9jdXMgPSB1bmZvY3VzOwogICAgIHVp
Q2xpZW50LmdldFdpbmRvd0ZyYW1lID0gZ2V0V2luZG93RnJhbWU7CiAgICAgdWlDbGllbnQuc2V0
V2luZG93RnJhbWUgPSBzZXRXaW5kb3dGcmFtZTsKKyAgICB1aUNsaWVudC5ydW5PcGVuUGFuZWwg
PSBydW5PcGVuUGFuZWw7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICB1aUNsaWVudC5l
eGNlZWRlZERhdGFiYXNlUXVvdGEgPSBleGNlZWRlZERhdGFiYXNlUXVvdGE7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCmluZGV4IDBk
Yzg0ZDUuLjJmNTQxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVVJQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuaApAQCAtNjIsNiArNjIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IHRha2VGb2N1cyhXS1BhZ2VSZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZvaWQqKTsKICAg
ICBzdGF0aWMgV0tSZWN0IGdldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOwog
ICAgIHN0YXRpYyB2b2lkIHNldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiwgV0tSZWN0LCBjb25zdCB2
b2lkKik7CisgICAgc3RhdGljIHZvaWQgcnVuT3BlblBhbmVsKFdLUGFnZVJlZiwgV0tGcmFtZVJl
ZiwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVm
LCBjb25zdCB2b2lkKik7CiAKICAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1wbDsKIH07Cg==
</data>
<flag name="review"
          id="185632"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="185633"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171675</attachid>
            <date>2012-10-31 09:50:09 -0700</date>
            <delta_ts>2012-10-31 12:17:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>100818_ewk_file_chooser.patch</filename>
            <type>text/plain</type>
            <size>30737</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NDQ0NzE2Li5lOTg0YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTItMTAtMzEgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Qg
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA4
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKwor
ICAgICAgICBBZGQgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0IEFQSSBzbyB0aGF0IHRoZSBjbGll
bnQKKyAgICAgICAgY2FuIGhhbmRsZSBmaWxlIGNob29zZXIgcmVxdWVzdHMgKGUuZy4gU2hvdyBh
IGZpbGUKKyAgICAgICAgcGlja2VyIGRpYWxvZykgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYW4g
aW5wdXQKKyAgICAgICAgZWxlbWVudCBvZiB0eXBlICJmaWxlIi4KKworICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAo
RXdrVmlld0NhbGxiYWNrcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3Q6OkV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCk6CisgICAgICAgIChFd2tfRmlsZV9DaG9v
c2VyX1JlcXVlc3Q6On5Fd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QpOgorICAgICAgICAoRXdrX0Zp
bGVfQ2hvb3Nlcl9SZXF1ZXN0OjphbGxvd011bHRpcGxlRmlsZXMpOgorICAgICAgICAoRXdrX0Zp
bGVfQ2hvb3Nlcl9SZXF1ZXN0OjphY2NlcHRlZE1JTUVUeXBlcyk6CisgICAgICAgIChFd2tfRmls
ZV9DaG9vc2VyX1JlcXVlc3Q6OmNhbmNlbCk6CisgICAgICAgIChFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3Q6OmNob29zZUZpbGVzKToKKyAgICAgICAgKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9y
ZWYpOgorICAgICAgICAoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKToKKyAgICAgICAg
KGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd19tdWx0aXBsZV9maWxlc19nZXQpOgorICAg
ICAgICAoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWV0eXBlc19nZXQpOgor
ICAgICAgICAoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgIChld2tf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKToKKyAgICAgICAgKGV3a19maWxlX2No
b29zZXJfcmVxdWVzdF9maWxlX2Nob29zZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCk6CisgICAgICAg
IChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChFd2tfRmlsZV9D
aG9vc2VyX1JlcXVlc3Q6Ondhc0hhbmRsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2Vz
L2ZpbGVfY2hvb3Nlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwOiBBZGRlZCBjb3JyZXNwb25k
aW5nCisgICAgICAgIHVuaXQgdGVzdHMuCisgICAgICAgIChvbkZpbGVDaG9vc2VyUmVxdWVzdCk6
CisgICAgICAgIChjb21wYXJlU3RyaW5ncyk6CisgICAgICAgIChmcmVlU3RyaW5nTGlzdCk6Cisg
ICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpydW5PcGVuUGFuZWwpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpQYWdl
VUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmg6
CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTEwLTMxICBUaGlhZ28gTWFyY29z
IFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIFdl
YkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBzaG91bGQgcmV0dXJu
IGEgcGF0aCB0byBhIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNmNlZGVkNy4u
MTViMzJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTUwLDYgKzUwLDcgQEAgTElT
VChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25s
b2FkX2pvYi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZXJyb3IuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfaW50ZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnRfc2VydmljZS5j
cHAKQEAgLTI0Nyw2ICsyNDgsNyBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2Iu
aCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19lcnJvci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdC5oIgogICAg
ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1f
c3VibWlzc2lvbl9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50X3NlcnZpY2UuaCIKQEAgLTM0OSw2
ICszNTEsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9kb3du
bG9hZF9qb2IKICAgICB0ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nCiAgICAgdGVzdF9ld2sy
X2Zhdmljb25fZGF0YWJhc2UKKyAgICB0ZXN0X2V3azJfZmlsZV9jaG9vc2VyX3JlcXVlc3QKICAg
ICB0ZXN0X2V3azJfcmVmcHRyX2V2YXNfb2JqZWN0CiAgICAgdGVzdF9ld2syX2ludGVudHMKICAg
ICB0ZXN0X2V3azJfcG9wdXBfbWVudQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0VXZWJLaXQyLmgKaW5kZXggN2ZkYTc1NC4uZjk3ZWJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi
ZXdrX2Rvd25sb2FkX2pvYi5oIgogI2luY2x1ZGUgImV3a19lcnJvci5oIgogI2luY2x1ZGUgImV3
a19mYXZpY29uX2RhdGFiYXNlLmgiCisjaW5jbHVkZSAiZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
ZXdrX2ludGVudC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfc2VydmljZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCmluZGV4
IDE1YTc4MjguLjU2ZDM1N2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCkBAIC0zMyw2ICszMyw3IEBACiAKIHN0cnVjdCBF
d2tfRG93bmxvYWRfSm9iOwogc3RydWN0IEV3a19Eb3dubG9hZF9Kb2JfRXJyb3I7CitzdHJ1Y3Qg
RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0Owogc3RydWN0IEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVx
dWVzdDsKIHN0cnVjdCBFd2tfRXJyb3I7CiBzdHJ1Y3QgRXdrX1Jlc291cmNlX1JlcXVlc3Q7CkBA
IC01NSw2ICs1Niw3IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsKICAgICBEb3dubG9hZEpvYkZhaWxl
ZCwKICAgICBEb3dubG9hZEpvYkZpbmlzaGVkLAogICAgIERvd25sb2FkSm9iUmVxdWVzdGVkLAor
ICAgIEZpbGVDaG9vc2VyUmVxdWVzdCwKICAgICBOZXdGb3JtU3VibWlzc2lvblJlcXVlc3QsCiAg
ICAgTG9hZEVycm9yLAogICAgIExvYWRGaW5pc2hlZCwKQEAgLTE0OSw2ICsxNTEsNyBAQCBERUNM
QVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iQ2FuY2VsbGVkLCAiZG93bmxvYWQsY2Fu
Y2VsbGVkIiwgRXdrX0Rvd25sbwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpv
YkZhaWxlZCwgImRvd25sb2FkLGZhaWxlZCIsIEV3a19Eb3dubG9hZF9Kb2JfRXJyb3IpOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYkZpbmlzaGVkLCAiZG93bmxvYWQsZmlu
aXNoZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93
bmxvYWRKb2JSZXF1ZXN0ZWQsICJkb3dubG9hZCxyZXF1ZXN0IiwgRXdrX0Rvd25sb2FkX0pvYik7
CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEZpbGVDaG9vc2VyUmVxdWVzdCwgImZpbGUsY2hv
b3NlcixyZXF1ZXN0IiwgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KTsKIERFQ0xBUkVfRVdLX1ZJ
RVdfQ0FMTEJBQ0soTmV3Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LCAiZm9ybSxzdWJtaXNzaW9uLHJl
cXVlc3QiLCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QpOwogREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhMb2FkRXJyb3IsICJsb2FkLGVycm9yIiwgRXdrX0Vycm9yKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soTG9hZEZpbmlzaGVkLCAibG9hZCxmaW5pc2hlZCIsIHZvaWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19maWxl
X2Nob29zZXJfcmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTk5MGIxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19maWxlX2Nob29zZXJfcmVxdWVzdC5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfZmlsZV9j
aG9vc2VyX3JlcXVlc3QuaCIKKworI2luY2x1ZGUgIkltbXV0YWJsZUFycmF5LmgiCisjaW5jbHVk
ZSAiTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIgor
I2luY2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJld2tfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0OjpFd2tf
RmlsZV9DaG9vc2VyX1JlcXVlc3QoV2ViT3BlblBhbmVsUGFyYW1ldGVycyogcGFyYW1ldGVycywg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSogbGlzdGVuZXIpCisgICAgOiBtX3BhcmFt
ZXRlcnMocGFyYW1ldGVycykKKyAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCisgICAgLCBtX3dh
c1JlcXVlc3RIYW5kbGVkKGZhbHNlKQoreworICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKKyAgICBB
U1NFUlQobGlzdGVuZXIpOworfQorCitFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6On5Fd2tfRmls
ZV9DaG9vc2VyX1JlcXVlc3QoKQoreworICAgIGlmICghbV93YXNSZXF1ZXN0SGFuZGxlZCkKKyAg
ICAgICAgbV9saXN0ZW5lci0+Y2FuY2VsKCk7Cit9CisKK2Jvb2wgRXdrX0ZpbGVfQ2hvb3Nlcl9S
ZXF1ZXN0OjphbGxvd011bHRpcGxlRmlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhcmFt
ZXRlcnMtPmFsbG93TXVsdGlwbGVGaWxlcygpOworfQorCitQYXNzUmVmUHRyPEltbXV0YWJsZUFy
cmF5PiBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmFjY2VwdGVkTUlNRVR5cGVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLT5hY2NlcHRNSU1FVHlwZXMoKTsKK30KKwordm9p
ZCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Q6OmNhbmNlbCgpCit7CisgICAgbV93YXNSZXF1ZXN0
SGFuZGxlZCA9IHRydWU7CisKKyAgICByZXR1cm4gbV9saXN0ZW5lci0+Y2FuY2VsKCk7Cit9CisK
K3ZvaWQgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0OjpjaG9vc2VGaWxlcyhWZWN0b3I8IFJlZlB0
cjxBUElPYmplY3Q+ID4mIGZpbGVVUkxzKQoreworICAgIEFTU0VSVCghZmlsZVVSTHMuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoZmlsZVVSTHMuc2l6ZSgpID09IDEgfHwgbV9wYXJhbWV0ZXJzLT5h
bGxvd011bHRpcGxlRmlsZXMoKSk7CisKKyAgICBtX3dhc1JlcXVlc3RIYW5kbGVkID0gdHJ1ZTsK
KyAgICBtX2xpc3RlbmVyLT5jaG9vc2VGaWxlcyhJbW11dGFibGVBcnJheTo6YWRvcHQoZmlsZVVS
THMpLmdldCgpKTsKK30KKworRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiBld2tfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfcmVmKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVxdWVzdCwgMCk7CisKKyAgICByZXF1
ZXN0LT5yZWYoKTsKKworICAgIHJldHVybiByZXF1ZXN0OworfQorCit2b2lkIGV3a19maWxlX2No
b29zZXJfcmVxdWVzdF91bnJlZihFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocmVxdWVzdCk7CisKKyAgICByZXF1ZXN0
LT5kZXJlZigpOworfQorCitFaW5hX0Jvb2wgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93
X211bHRpcGxlX2ZpbGVzX2dldChjb25zdCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVl
c3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlcXVlc3QsIGZhbHNl
KTsKKworICAgIHJldHVybiByZXF1ZXN0LT5hbGxvd011bHRpcGxlRmlsZXMoKTsKK30KKworRWlu
YV9MaXN0KiBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWNjZXB0ZWRfbWltZXR5cGVzX2dldChj
b25zdCBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlcXVlc3QsIDApOworCisgICAgRWluYV9MaXN0KiBtaW1l
VHlwZUxpc3QgPSAwOworICAgIFJlZlB0cjxJbW11dGFibGVBcnJheT4gbWltZVR5cGVzID0gcmVx
dWVzdC0+YWNjZXB0ZWRNSU1FVHlwZXMoKTsKKworICAgIGNvbnN0IHNpemVfdCBzaXplID0gbWlt
ZVR5cGVzLT5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gc3RhdGljX2Nhc3Q8V2ViU3RyaW5nKj4o
bWltZVR5cGVzLT5hdChpKSktPnN0cmluZygpOworICAgICAgICBpZiAobWltZVR5cGVTdHJpbmcu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1pbWVUeXBlTGlzdCA9
IGVpbmFfbGlzdF9hcHBlbmQobWltZVR5cGVMaXN0LCBlaW5hX3N0cmluZ3NoYXJlX2FkZChtaW1l
VHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1pbWVUeXBl
TGlzdDsKK30KKworRWluYV9Cb29sIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoRXdr
X0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChyZXF1ZXN0LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9S
RVRVUk5fVkFMKHJlcXVlc3QtPndhc0hhbmRsZWQoKSwgZmFsc2UpOworCisgICAgcmVxdWVzdC0+
Y2FuY2VsKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIGV3a19maWxlX2No
b29zZXJfcmVxdWVzdF9maWxlc19jaG9vc2UoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1
ZXN0LCBjb25zdCBFaW5hX0xpc3QqIGNob3NlbkZpbGVzKQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChyZXF1ZXN0LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGNob3NlbkZpbGVzLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFM
U0VfUkVUVVJOX1ZBTChlaW5hX2xpc3RfY291bnQoY2hvc2VuRmlsZXMpID09IDEgfHwgcmVxdWVz
dC0+YWxsb3dNdWx0aXBsZUZpbGVzKCksIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9UUlVF
X1JFVFVSTl9WQUwocmVxdWVzdC0+d2FzSGFuZGxlZCgpLCBmYWxzZSk7CisKKyAgICBWZWN0b3I8
IFJlZlB0cjxBUElPYmplY3Q+ID4gZmlsZVVSTHM7CisKKyAgICBjb25zdCBFaW5hX0xpc3QqIGw7
CisgICAgdm9pZCogZGF0YTsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSChjaG9zZW5GaWxlcywgbCwg
ZGF0YSkgeworICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgZmFs
c2UpOworICAgICAgICBTdHJpbmcgZmlsZVVSTCA9ICJmaWxlOi8vIiArIFN0cmluZzo6ZnJvbVVU
Rjgoc3RhdGljX2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICAgICAgZmlsZVVSTHMuYXBwZW5kKFdl
YlVSTDo6Y3JlYXRlKGZpbGVVUkwpKTsKKyAgICB9CisKKyAgICByZXF1ZXN0LT5jaG9vc2VGaWxl
cyhmaWxlVVJMcyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIGV3a19maWxl
X2Nob29zZXJfcmVxdWVzdF9maWxlX2Nob29zZShFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJl
cXVlc3QsIGNvbnN0IGNoYXIqIGNob3NlbkZpbGUpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHJlcXVlc3QsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoY2hvc2VuRmlsZSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVU
VVJOX1ZBTChyZXF1ZXN0LT53YXNIYW5kbGVkKCksIGZhbHNlKTsKKworICAgIFZlY3RvcjwgUmVm
UHRyPEFQSU9iamVjdD4gPiBmaWxlVVJMczsKKyAgICBTdHJpbmcgZmlsZVVSTCA9ICJmaWxlOi8v
IiArIFN0cmluZzo6ZnJvbVVURjgoY2hvc2VuRmlsZSk7CisgICAgZmlsZVVSTHMuYXBwZW5kKFdl
YlVSTDo6Y3JlYXRlKGZpbGVVUkwpKTsKKworICAgIHJlcXVlc3QtPmNob29zZUZpbGVzKGZpbGVV
UkxzKTsKKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzIzYTZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
LmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUg
ICAgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmgKKyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUg
RXdrIEZpbGUgQ2hvb3NlciBBUEkuCisgKi8KKworI2lmbmRlZiBld2tfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfaAorI2RlZmluZSBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaAorCisjaW5jbHVkZSA8
RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8q
KiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgKi8KK3R5
cGVkZWYgc3RydWN0IEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCBFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3Q7CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdp
dmVuIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCB0aGUgcmVxdWVzdCBvYmplY3QgdG8g
aW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICoKKyAqIEByZXR1cm4gYSBwb2ludGVyIHRv
IHRoZSBvYmplY3Qgb24gc3VjY2VzcywgQGMgTlVMTCBvdGhlcndpc2UKKyAqLworRUFQSSBFd2tf
RmlsZV9DaG9vc2VyX1JlcXVlc3QgKmV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9yZWYoRXdrX0Zp
bGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0KTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJl
ZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0Lgor
ICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBmaWxlIGNob29z
ZXIgcmVxdWVzdCBpcyBmcmVlZC4gVGhlIHJlcXVlc3QKKyAqIHdpbGwgYmUgY2FuY2VsbGVkIGJ5
IGRlZmF1bHQgaWYgdGhlIGNsaWVudCBkaWQgbm90IGFjdCBvbiBpdC4KKyAqCisgKiBAcGFyYW0g
cmVxdWVzdCB0aGUgcmVxdWVzdCBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3Vu
dAorICovCitFQVBJIHZvaWQgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKEV3a19GaWxl
X0Nob29zZXJfUmVxdWVzdCAqcmVxdWVzdCk7CisKKy8qKgorICogUXVlcmllcyBpZiBpdCBpcyBh
bGxvd2VkIHRvIHNlbGVjdCBtdWx0aXBsZSBmaWxlcyBvciBub3QuCisgKgorICogQHBhcmFtIHJl
cXVlc3QgcmVxdWVzdCBvYmplY3QgdG8gcXVlcnkKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpZiBpdCBpcyBhbGxvd2VkIHRvIHNlbGVjdCBtdWx0aXBsZSBmaWxlcywKKyAqICAgICAgICAg
QGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2FsbG93X211bHRpcGxlX2ZpbGVzX2dldChjb25zdCBFd2tfRmlsZV9DaG9v
c2VyX1JlcXVlc3QgKnJlcXVlc3QpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIGxpc3Qgb2YgYWNj
ZXB0ZWQgTUlNRSB0eXBlcy4KKyAqCisgKiBQb3NzaWJsZSBNSU1FIHR5cGVzIGFyZToKKyAqIC0g
ImF1ZGlvXC9cKiI6IEFsbCBzb3VuZCBmaWxlcyBhcmUgYWNjZXB0ZWQKKyAqIC0gInZpZGVvXC9c
KiI6IEFsbCB2aWRlbyBmaWxlcyBhcmUgYWNjZXB0ZWQKKyAqIC0gImltYWdlXC9cKiI6IEFsbCBp
bWFnZSBmaWxlcyBhcmUgYWNjZXB0ZWQKKyAqIC0gc3RhbmRhcmQgSUFOQSBNSU1FIHR5cGUgKHNl
ZSBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzLyBmb3IgYSBjb21w
bGV0ZSBsaXN0KQorICoKKyAqIEBwYXJhbSByZXF1ZXN0IHJlcXVlc3Qgb2JqZWN0IHRvIHF1ZXJ5
CisgKgorICogQHJldHVybiBUaGUgbGlzdCBvZiBhY2NlcHRlZCBNSU1FIHR5cGVzLiBUaGUgbGlz
dCBpdGVtcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBzdHJpbmdzaGFyZWQuCisgKiBUaGUgY2FsbGVy
IG5lZWRzIHRvIGZyZWUgdGhlIGxpc3QgYW5kIGl0cyBpdGVtcyBhZnRlciB1c2UKKyAqLworRUFQ
SSBFaW5hX0xpc3QgKmV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9hY2NlcHRlZF9taW1ldHlwZXNf
Z2V0KGNvbnN0IEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqcmVxdWVzdCk7CisKKy8qKgorICog
Q2FuY2VscyB0aGUgZmlsZSBjaG9vc2VyIHJlcXVlc3QuCisgKgorICogQHBhcmFtIHJlcXVlc3Qg
cmVxdWVzdCBvYmplY3QgdG8gY2FuY2VsCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYg
c3VjY2Vzc2Z1bCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wg
ZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3Qg
KnJlcXVlc3QpOworCisvKioKKyAqIFNldHMgdGhlIGZpbGVzIGNob3NlbiBieSB0aGUgdXNlci4K
KyAqCisgKiBAcGFyYW0gcmVxdWVzdCByZXF1ZXN0IG9iamVjdCB0byB1cGRhdGUKKyAqCisgKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzdWNjZXNzZnVsLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lz
ZQorICoKKyAqIEBzZWUgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2hvb3NlKCkKKyAq
LworRUFQSSBFaW5hX0Jvb2wgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVzX2Nob29zZShF
d2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgKnJlcXVlc3QsIGNvbnN0IEVpbmFfTGlzdCAqY2hvc2Vu
X2ZpbGVzKTsKKworLyoqCisgKiBTZXRzIHRoZSBmaWxlIGNob3NlbiBieSB0aGUgdXNlci4KKyAq
CisgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gaW4gY2FzZSBvbmx5IG9uZSBmaWxl
IG5lZWRzIHRvIGJlIHNldC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCByZXF1ZXN0IG9iamVjdCB0
byB1cGRhdGUKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzdWNjZXNzZnVsLCBAYyBF
SU5BX0ZBTFNFIG90aGVyd2lzZQorICoKKyAqIEBzZWUgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2ZpbGVzX2Nob29zZSgpCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19maWxlX2Nob29zZXJfcmVx
dWVzdF9maWxlX2Nob29zZShFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QgKnJlcXVlc3QsIGNvbnN0
IGNoYXIgKmNob3Nlbl9maWxlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwor
I2VuZGlmIC8qIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
YWZiN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaApAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2
YXRlX2gKKyNkZWZpbmUgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGVfaAorCisjaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgSW1tdXRhYmxlQXJyYXk7
CitjbGFzcyBXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzOworY2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXJQcm94eTsKK30KKworY2xhc3MgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0PiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0PiBjcmVhdGUoV2ViS2l0
OjpXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBXZWJLaXQ6OldlYk9wZW5QYW5l
bFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QocGFyYW1ldGVycywgbGlzdGVuZXIp
KTsKKyAgICB9CisKKyAgICB+RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KCk7CisKKyAgICBib29s
IGFsbG93TXVsdGlwbGVGaWxlcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8V2ViS2l0OjpJbW11
dGFibGVBcnJheT4gYWNjZXB0ZWRNSU1FVHlwZXMoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCB3
YXNIYW5kbGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNSZXF1ZXN0SGFuZGxlZDsgfQorICAgIHZv
aWQgY2FuY2VsKCk7CisgICAgdm9pZCBjaG9vc2VGaWxlcyhWZWN0b3I8IFJlZlB0cjxXZWJLaXQ6
OkFQSU9iamVjdD4gPiYgZmlsZVVSTHMpOworCitwcml2YXRlOgorICAgIEV3a19GaWxlX0Nob29z
ZXJfUmVxdWVzdChXZWJLaXQ6OldlYk9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIFdl
YktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSogbGlzdGVuZXIpOworCisgICAg
UmVmUHRyPFdlYktpdDo6V2ViT3BlblBhbmVsUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOworICAg
IFJlZlB0cjxXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk+IG1fbGlzdGVu
ZXI7CisgICAgYm9vbCBtX3dhc1JlcXVlc3RIYW5kbGVkOworfTsKKworI2VuZGlmIC8vIGV3a19m
aWxlX2Nob29zZXJfcmVxdWVzdF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IGVkZmFkMGQuLjUzY2E4M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtMzQsNiArMzQsOSBAQAogICog
LSAiZG93bmxvYWQsZmluaXNoZWQiLCBFd2tfRG93bmxvYWRfSm9iKjogcmVwb3J0cyB0aGF0IGEg
ZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KICAqIC0gImRvd25sb2FkLHJlcXVlc3Qi
LCBFd2tfRG93bmxvYWRfSm9iKjogcmVwb3J0cyB0aGF0IGEgbmV3IGRvd25sb2FkIGhhcyBiZWVu
IHJlcXVlc3RlZC4gVGhlIGNsaWVudCBzaG91bGQgc2V0IHRoZQogICogICBkZXN0aW5hdGlvbiBw
YXRoIGJ5IGNhbGxpbmcgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoKSBvciB0aGUg
ZG93bmxvYWQgd2lsbCBmYWlsLgorICogLSAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBFd2tfRmls
ZV9DaG9vc2VyX1JlcXVlc3QqOiByZXBvcnRzIHRoYXQgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUg
Zm9yIHRoZSB1c2VyIHRvIGNob29zZQorICogICBhIGZpbGUgKG9yIHNldmVyYWwpIG9uIHRoZSBm
aWxlIHN5c3RlbS4gQ2FsbCBld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcmVmKCkgb24gdGhlIHJl
cXVlc3Qgb2JqZWN0IHRvIHByb2Nlc3MgaXQKKyAqICAgYXN5bmNocm9ub3VzbHkuCiAgKiAtICJm
b3JtLHN1Ym1pc3Npb24scmVxdWVzdCIsIEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCo6IFJl
cG9ydHMgdGhhdCBhIGZvcm0gcmVxdWVzdCBpcyBhYm91dCB0byBiZSBzdWJtaXR0ZWQuCiAgKiAg
IFRoZSBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgcGFzc2VkIGNvbnRhaW5zIGluZm9ybWF0
aW9uIGFib3V0IHRoZSB0ZXh0IGZpZWxkcyBvZiB0aGUgZm9ybS4gVGhpcwogICogICBpcyB0eXBp
Y2FsbHkgdXNlZCB0byBzdG9yZSBsb2dpbiBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGxh
dGVyIHRvIHByZS1maWxsIHRoZSBmb3JtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2ZpbGVfY2hvb3Nlci5odG1sIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2ZpbGVfY2hvb3Nlci5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MThjNjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJj
ZXMvZmlsZV9jaG9vc2VyLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5GaWxlIGNob29zZXIgdGVzdDwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gdXBkYXRl
VGl0bGUoKQoreworICB2YXIgbXlpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteUlu
cHV0Jyk7CisgIHZhciB0aXRsZSA9ICIiCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbXlpbnB1dC5m
aWxlcy5sZW5ndGg7IGkrKykgeworICAgIHRpdGxlICs9IG15aW5wdXQuZmlsZXNbaV0ubmFtZTsK
KyAgICBpZiAoaSA8IChteWlucHV0LmZpbGVzLmxlbmd0aCAtIDEpKQorICAgICAgdGl0bGUgKz0g
InwiOworICB9CisgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGlucHV0IHR5cGU9ImZpbGUiIGlkPSJteUlucHV0IiBuYW1lPSJVcGxvYWQg
bWVkaWEiIGFjY2VwdD0iaW1hZ2UvKix2aWRlby8qIiBtdWx0aXBsZT0ibXVsdGlwbGUiIG9uY2hh
bmdlPSJ1cGRhdGVUaXRsZSgpIiBzdHlsZT0idG9wOiAxMDsgbGVmdDogMTA7Ii8+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmlsZV9jaG9vc2VyX3JlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYyZDc0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RF
bnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVy
LmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29yZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgRVdLMlVuaXRUZXN0OworCitleHRlcm4gRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQq
IGVudmlyb25tZW50OworCitzdGF0aWMgdm9pZCBvbkZpbGVDaG9vc2VyUmVxdWVzdCh2b2lkKiB1
c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXdrX0ZpbGVf
Q2hvb3Nlcl9SZXF1ZXN0KiogcmV0dXJuUmVxdWVzdCA9IHN0YXRpY19jYXN0PEV3a19GaWxlX0No
b29zZXJfUmVxdWVzdCoqPih1c2VyRGF0YSk7CisgICAgQVNTRVJUX1RSVUUocmV0dXJuUmVxdWVz
dCk7CisgICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8
RXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0Kj4oZXZlbnRJbmZvKTsKKyAgICBBU1NFUlRfVFJVRShy
ZXF1ZXN0KTsKKworICAgIC8vIFJlZiB0aGUgcmVxdWVzdCB0byBwcm9jZXNzIGFzeW5jaHJvbm91
c2x5LgorICAgICpyZXR1cm5SZXF1ZXN0ID0gZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3JlZihy
ZXF1ZXN0KTsKK30KKworc3RhdGljIGludCBjb21wYXJlU3RyaW5ncyhjb25zdCB2b2lkKiBzdHJp
bmcxLCBjb25zdCB2b2lkKiBzdHJpbmcyKQoreworICAgIEFTU0VSVChzdHJpbmcxKTsKKyAgICBB
U1NFUlQoc3RyaW5nMik7CisKKyAgICByZXR1cm4gc3RyY21wKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihzdHJpbmcxKSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZzIpKTsKK30KKwor
c3RhdGljIHZvaWQgZnJlZVN0cmluZ0xpc3QoRWluYV9MaXN0KiogbGlzdCkKK3sKKyAgICB2b2lk
KiBkYXRhOworICAgIEVJTkFfTElTVF9GUkVFKCpsaXN0LCBkYXRhKSB7CisgICAgICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNoYXIqPihkYXRhKSk7CisgICAgfQorfQorCitU
RVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVzX2No
b29zZSkKK3sKKyAgICBFd2tfRmlsZV9DaG9vc2VyX1JlcXVlc3QqIHJlcXVlc3QgPSAwOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJmaWxlLGNob29zZXIs
cmVxdWVzdCIsIG9uRmlsZUNob29zZXJSZXF1ZXN0LCAmcmVxdWVzdCk7CisgICAgQVNTRVJUX1RS
VUUobG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJmaWxlX2Nob29zZXIu
aHRtbCIpLmRhdGEoKSkpOworCisgICAgLy8gQ2xpY2sgb24gdGhlIGZpbGUgaW5wdXQuCisgICAg
bW91c2VDbGljaygxNSwgMTUpOworCisgICAgLy8gV2FpdCBmb3IgdGhlIGZpbGUgY2hvb3NlciBy
ZXF1ZXN0LgorICAgIHdoaWxlICghcmVxdWVzdCkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0
ZXJhdGUoKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCks
ICJmaWxlLGNob29zZXIscmVxdWVzdCIsIG9uRmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBBU1NF
UlRfVFJVRShyZXF1ZXN0KTsKKyAgICAvLyBWYWxpZGF0ZSBmaWxlIGNob29zZXIgcmVxdWVzdC4K
KyAgICBFWFBFQ1RfVFJVRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dfbXVsdGlwbGVf
ZmlsZXNfZ2V0KHJlcXVlc3QpKTsKKyAgICBFaW5hX0xpc3QqIG1pbWVUeXBlcyA9IGV3a19maWxl
X2Nob29zZXJfcmVxdWVzdF9hY2NlcHRlZF9taW1ldHlwZXNfZ2V0KHJlcXVlc3QpOworICAgIG1p
bWVUeXBlcyA9IGVpbmFfbGlzdF9zb3J0KG1pbWVUeXBlcywgZWluYV9saXN0X2NvdW50KG1pbWVU
eXBlcyksIGNvbXBhcmVTdHJpbmdzKTsKKworICAgIEFTU0VSVF9FUSgyLCBlaW5hX2xpc3RfY291
bnQobWltZVR5cGVzKSk7CisgICAgRVhQRUNUX1NUUkVRKCJpbWFnZS8qIiwgc3RhdGljX2Nhc3Q8
Y2hhcio+KGVpbmFfbGlzdF9udGgobWltZVR5cGVzLCAwKSkpOworICAgIEVYUEVDVF9TVFJFUSgi
dmlkZW8vKiIsIHN0YXRpY19jYXN0PGNoYXIqPihlaW5hX2xpc3RfbnRoKG1pbWVUeXBlcywgMSkp
KTsKKyAgICBmcmVlU3RyaW5nTGlzdCgmbWltZVR5cGVzKTsKKworICAgIEFTU0VSVF9GQUxTRShl
d2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hvb3NlKHJlcXVlc3QsIDApKTsKKyAgICBF
aW5hX0xpc3QqIGZpbGVzID0gMDsKKyAgICBmaWxlcyA9IGVpbmFfbGlzdF9hcHBlbmQoZmlsZXMs
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKCIvdG1wL2ZpbGUxLnBuZyIpKTsKKyAgICBmaWxlcyA9IGVp
bmFfbGlzdF9hcHBlbmQoZmlsZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCIvdG1wL2ZpbGUyLnBu
ZyIpKTsKKyAgICBBU1NFUlRfVFJVRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZXNfY2hv
b3NlKHJlcXVlc3QsIGZpbGVzKSk7CisgICAgQVNTRVJUX0ZBTFNFKGV3a19maWxlX2Nob29zZXJf
cmVxdWVzdF9maWxlc19jaG9vc2UocmVxdWVzdCwgZmlsZXMpKTsKKyAgICBmcmVlU3RyaW5nTGlz
dCgmZmlsZXMpOworCisgICAgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKHJlcXVlc3Qp
OworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgSlMgc2lkZSByZWNlaXZlZCB0aGUgZmlsZXMuCisg
ICAgRVhQRUNUX1RSVUUod2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oImZpbGUxLnBuZ3xmaWxlMi5w
bmciKSk7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZmlsZV9jaG9vc2UpCit7CisgICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0KiByZXF1
ZXN0ID0gMDsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAi
ZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVzdCwgJnJlcXVlc3QpOwor
ICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgi
ZmlsZV9jaG9vc2VyLmh0bWwiKS5kYXRhKCkpKTsKKworICAgIC8vIENsaWNrIG9uIHRoZSBmaWxl
IGlucHV0LgorICAgIG1vdXNlQ2xpY2soMTUsIDE1KTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSBm
aWxlIGNob29zZXIgcmVxdWVzdC4KKyAgICB3aGlsZSAoIXJlcXVlc3QpCisgICAgICAgIGVjb3Jl
X21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19k
ZWwod2ViVmlldygpLCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbkZpbGVDaG9vc2VyUmVxdWVz
dCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UoZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2hvb3NlKHJlcXVlc3QsIDApKTsKKyAgICBBU1NFUlRf
VFJVRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlsZV9jaG9vc2UocmVxdWVzdCwgIi90bXAv
ZmlsZTMucG5nIikpOworICAgIEFTU0VSVF9GQUxTRShld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
ZmlsZV9jaG9vc2UocmVxdWVzdCwgIi90bXAvZmlsZTMucG5nIikpOworCisgICAgZXdrX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3VucmVmKHJlcXVlc3QpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
SlMgc2lkZSByZWNlaXZlZCB0aGUgZmlsZS4KKyAgICBFWFBFQ1RfVFJVRSh3YWl0VW50aWxUaXRs
ZUNoYW5nZWRUbygiZmlsZTMucG5nIikpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2FuY2VsKQoreworICAgIEV3a19GaWxlX0No
b29zZXJfUmVxdWVzdCogcmVxdWVzdCA9IDA7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKHdlYlZpZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25GaWxlQ2hvb3NlclJl
cXVlc3QsICZyZXF1ZXN0KTsKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZpcm9ubWVu
dC0+dXJsRm9yUmVzb3VyY2UoImZpbGVfY2hvb3Nlci5odG1sIikuZGF0YSgpKSk7CisKKyAgICAv
LyBDbGljayBvbiB0aGUgZmlsZSBpbnB1dC4KKyAgICBtb3VzZUNsaWNrKDE1LCAxNSk7CisKKyAg
ICAvLyBXYWl0IGZvciB0aGUgZmlsZSBjaG9vc2VyIHJlcXVlc3QuCisgICAgd2hpbGUgKCFyZXF1
ZXN0KQorICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworCisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwg
b25GaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIEFTU0VSVF9UUlVFKHJlcXVlc3QpOworCisgICAg
QVNTRVJUX1RSVUUoZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwocmVxdWVzdCkp
OworCisgICAgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKHJlcXVlc3QpOworCisgICAg
ZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKyAgICBFWFBFQ1RfU1RSRVEoIkZpbGUgY2hvb3Nl
ciB0ZXN0IiwgZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSkpOworCisgICAgLy8gRGVmYXVs
dCBiZWhhdmlvciBpcyB0byBjYW5jZWwgaWYgdGhlIGNsaWVudCBkb2VzIG5vdCBhY3Qgb24gdGhl
IHJlcXVlc3QuCisgICAgcmVxdWVzdCA9IDA7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKHdlYlZpZXcoKSwgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25GaWxlQ2hvb3NlclJl
cXVlc3QsICZyZXF1ZXN0KTsKKyAgICAvLyBDbGljayBvbiB0aGUgZmlsZSBpbnB1dC4KKyAgICBt
b3VzZUNsaWNrKDE1LCAxNSk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgZmlsZSBjaG9vc2VyIHJl
cXVlc3QuCisgICAgd2hpbGUgKCFyZXF1ZXN0KQorICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRl
cmF0ZSgpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwg
ImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25GaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIEFTU0VS
VF9UUlVFKHJlcXVlc3QpOworCisgICAgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3VucmVmKHJl
cXVlc3QpOworCisgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIkZpbGUgY2hvb3NlciB0ZXN0IiwgZXdrX3ZpZXdfdGl0bGVfZ2V0KHdlYlZpZXcoKSkpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRF
ZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3Bw
CmluZGV4IDUwMDBkNTAuLjQxMTBiNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKQEAgLTMxLDkgKzMxLDEyIEBACiAjaW5jbHVkZSAi
V0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tFdmVudC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgi
CisjaW5jbHVkZSAiZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRl
IDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogCit1c2luZyBuYW1l
c3BhY2UgRXdrVmlld0NhbGxiYWNrczsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBp
bmxpbmUgUGFnZVVJQ2xpZW50RWZsKiB0b1BhZ2VVSUNsaWVudEVmbChjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQpAQCAtMTIyLDYgKzEyNSwxMyBAQCB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0V2lu
ZG93RnJhbWUoV0tQYWdlUmVmLCBXS1JlY3QgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudAogICAg
IGVjb3JlX2V2YXNfbW92ZV9yZXNpemUoZWUsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4u
eSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCit2b2lkIFBhZ2VV
SUNsaWVudEVmbDo6cnVuT3BlblBhbmVsKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tPcGVuUGFu
ZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYg
bGlzdGVuZXIsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZp
ZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisgICAg
UmVmUHRyPEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdD4gZmlsZUNob29zZXJSZXF1ZXN0ID0gRXdr
X0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0OjpjcmVhdGUodG9JbXBsKHBhcmFtZXRlcnMpLCB0b0ltcGwo
bGlzdGVuZXIpKTsKKyAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxGaWxlQ2hvb3NlclJlcXVl
c3Q+KCkuY2FsbChmaWxlQ2hvb3NlclJlcXVlc3QuZ2V0KCkpOworfQorCiBQYWdlVUlDbGllbnRF
Zmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3SW1wbCogdmlld0ltcGwpCiAgICAgOiBtX3ZpZXdJ
bXBsKHZpZXdJbXBsKQogewpAQCAtMTQyLDYgKzE1Miw3IEBAIFBhZ2VVSUNsaWVudEVmbDo6UGFn
ZVVJQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKICAgICB1aUNsaWVudC51bmZvY3Vz
ID0gdW5mb2N1czsKICAgICB1aUNsaWVudC5nZXRXaW5kb3dGcmFtZSA9IGdldFdpbmRvd0ZyYW1l
OwogICAgIHVpQ2xpZW50LnNldFdpbmRvd0ZyYW1lID0gc2V0V2luZG93RnJhbWU7CisgICAgdWlD
bGllbnQucnVuT3BlblBhbmVsID0gcnVuT3BlblBhbmVsOwogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAgICAgdWlDbGllbnQuZXhjZWVkZWREYXRhYmFzZVF1b3RhID0gZXhjZWVkZWREYXRhYmFz
ZVF1b3RhOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuaAppbmRleCAwZGM4NGQ1Li4yZjU0MTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKQEAgLTYyLDYgKzYyLDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgdm9pZCB0YWtlRm9jdXMoV0tQYWdlUmVmLCBXS0ZvY3VzRGlyZWN0aW9u
LCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIFdLUmVjdCBnZXRXaW5kb3dGcmFtZShXS1BhZ2VS
ZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBzZXRXaW5kb3dGcmFtZShXS1BhZ2VS
ZWYsIFdLUmVjdCwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIHJ1bk9wZW5QYW5lbChX
S1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiwgV0tPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3Qgdm9pZCopOwogCiAgICAgRXdrVmlld0ltcGwqIG1f
dmlld0ltcGw7CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>