<?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>165696</bug_id>
          
          <creation_ts>2016-12-09 15:45:58 -0800</creation_ts>
          <short_desc>webassembly: implement data section</short_desc>
          <delta_ts>2016-12-10 13:42:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>161709</blocked>
    
    <blocked>165700</blocked>
    
    <blocked>165733</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1258422</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 15:45:58 -0800</bug_when>
    <thetext>https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#data-section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258423</commentid>
    <comment_count>1</comment_count>
      <attachid>296727</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 15:46:53 -0800</bug_when>
    <thetext>Created attachment 296727
sample test

Sample test. PLAT and tell me if you don&apos;t like the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258454</commentid>
    <comment_count>2</comment_count>
      <attachid>296736</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 16:27:11 -0800</bug_when>
    <thetext>Created attachment 296736
Builder and its test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258531</commentid>
    <comment_count>3</comment_count>
      <attachid>296766</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 18:57:40 -0800</bug_when>
    <thetext>Created attachment 296766
more tests, some C++, missing ::evaluate after Instance is created</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258534</commentid>
    <comment_count>4</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 19:01:47 -0800</bug_when>
    <thetext>rdar://problem/29599594</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258575</commentid>
    <comment_count>5</comment_count>
      <attachid>296776</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 21:15:51 -0800</bug_when>
    <thetext>Created attachment 296776
patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258576</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-09 21:18:14 -0800</bug_when>
    <thetext>Attachment 296776 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:16:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258579</commentid>
    <comment_count>7</comment_count>
      <attachid>296777</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 21:25:03 -0800</bug_when>
    <thetext>Created attachment 296777
patch

Fix include case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258607</commentid>
    <comment_count>8</comment_count>
      <attachid>296777</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-09 22:42:49 -0800</bug_when>
    <thetext>Comment on attachment 296777
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258609</commentid>
    <comment_count>9</comment_count>
      <attachid>296777</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-09 23:09:01 -0800</bug_when>
    <thetext>Comment on attachment 296777
patch

Clearing flags on attachment: 296777

Committed r209651: &lt;http://trac.webkit.org/changeset/209651&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258610</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-09 23:09:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258630</commentid>
    <comment_count>11</comment_count>
      <attachid>296777</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-10 00:49:44 -0800</bug_when>
    <thetext>Comment on attachment 296777
patch

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

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:201
&gt; +                        || segment-&gt;offset &gt; sizeInBytes

I don&apos;t think this check adds anything and it also feels wrong b/c it looks suspiciously off by 1.
However, that said, the below check looks OK to me, I couldn&apos;t poke holes in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258691</commentid>
    <comment_count>12</comment_count>
      <attachid>296777</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-10 08:52:09 -0800</bug_when>
    <thetext>Comment on attachment 296777
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:201
&gt;&gt; +                        || segment-&gt;offset &gt; sizeInBytes
&gt; 
&gt; I don&apos;t think this check adds anything and it also feels wrong b/c it looks suspiciously off by 1.
&gt; However, that said, the below check looks OK to me, I couldn&apos;t poke holes in it.

My thinking was: this is the check for a segment which is totally off the end, the below one is for a segment which is only partly off the end. I&apos;m not sure what the spec says about the second case (do we perform the valid writes and then error out? That&apos;s what wasm code guarantees). I&apos;d also like both checks to have their own error message later, when we improve messages and testing.

I don&apos;t think it&apos;s off by one: say a memory is sized at 1024, and the offset is 1024 (and write one byte), then that&apos;s one off the end. An offset of 1023 would be fine. Or do I have that wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258707</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-10 10:20:40 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 296777 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=296777&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:201
&gt; &gt;&gt; +                        || segment-&gt;offset &gt; sizeInBytes
&gt; &gt; 
&gt; &gt; I don&apos;t think this check adds anything and it also feels wrong b/c it looks suspiciously off by 1.
&gt; &gt; However, that said, the below check looks OK to me, I couldn&apos;t poke holes in it.
&gt; 
&gt; My thinking was: this is the check for a segment which is totally off the
&gt; end, the below one is for a segment which is only partly off the end. I&apos;m
&gt; not sure what the spec says about the second case (do we perform the valid
&gt; writes and then error out? That&apos;s what wasm code guarantees). I&apos;d also like
&gt; both checks to have their own error message later, when we improve messages
&gt; and testing.
&gt; 
&gt; I don&apos;t think it&apos;s off by one: say a memory is sized at 1024, and the offset
&gt; is 1024 (and write one byte), then that&apos;s one off the end. An offset of 1023
&gt; would be fine. Or do I have that wrong?
I think you&apos;re wrong. I&apos;m just thinking about this check the way I think about all other array memory access. In your example:
memory = [0, 1023]
sizeInBytes = 1024 
offset = 1024
We *could* still do the write with this check. But as I said, I think the below check should handle all cases (including this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258752</commentid>
    <comment_count>14</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-10 13:42:46 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Comment on attachment 296777 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=296777&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:201
&gt; &gt; &gt;&gt; +                        || segment-&gt;offset &gt; sizeInBytes
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think this check adds anything and it also feels wrong b/c it looks suspiciously off by 1.
&gt; &gt; &gt; However, that said, the below check looks OK to me, I couldn&apos;t poke holes in it.
&gt; &gt; 
&gt; &gt; My thinking was: this is the check for a segment which is totally off the
&gt; &gt; end, the below one is for a segment which is only partly off the end. I&apos;m
&gt; &gt; not sure what the spec says about the second case (do we perform the valid
&gt; &gt; writes and then error out? That&apos;s what wasm code guarantees). I&apos;d also like
&gt; &gt; both checks to have their own error message later, when we improve messages
&gt; &gt; and testing.
&gt; &gt; 
&gt; &gt; I don&apos;t think it&apos;s off by one: say a memory is sized at 1024, and the offset
&gt; &gt; is 1024 (and write one byte), then that&apos;s one off the end. An offset of 1023
&gt; &gt; would be fine. Or do I have that wrong?
&gt; I think you&apos;re wrong. I&apos;m just thinking about this check the way I think
&gt; about all other array memory access. In your example:
&gt; memory = [0, 1023]
&gt; sizeInBytes = 1024 
&gt; offset = 1024
&gt; We *could* still do the write with this check. But as I said, I think the
&gt; below check should handle all cases (including this).

Ah gotcha, you&apos;re right. Here&apos;s some improved version (with other tests):
  https://bugs.webkit.org/show_bug.cgi?id=165733
The spec is still ambiguous, but this seems sensible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296727</attachid>
            <date>2016-12-09 15:46:53 -0800</date>
            <delta_ts>2016-12-09 16:27:11 -0800</delta_ts>
            <desc>sample test</desc>
            <filename>0001-data-section.patch</filename>
            <type>text/plain</type>
            <size>2519</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA3MTNkMTNlZDBhYzI1NDAyNWVhNDkwNDdjNTgyZDJhNDEyNjk0OTg4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDkgRGVjIDIwMTYgMTU6NDU6MzcgLTA4MDAKU3ViamVjdDogW1BBVENIXSBkYXRhLXNl
Y3Rpb24KCi0tLQogSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzIHwg
MzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMzYgaW5z
ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zZWxm
LXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9C
dWlsZGVySlNPTi5qcwppbmRleCAwNTVhYWY2Li43MmZjZGI4IDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKKysrIGIvSlNUZXN0cy93YXNtL3Nl
bGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCkBAIC01NjgsNiArNTY4LDcgQEAgY29uc3QgYXNz
ZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNik7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOwogfSkoKTsKKy8vIEZJWE1FIHRlc3Qg
dHlwZSBtaXNtYXRjaCB3aXRoIHNlbGVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzI2NwogCiAoZnVuY3Rpb24gTWVtb3J5SW1wb3J0KCkgewogICAgIGNvbnN0
IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKQEAgLTU4OCw0ICs1ODksMzggQEAgY29uc3QgYXNz
ZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGFzc2VydC5lcShqc29uLnNl
Y3Rpb25bMV0uZGF0YVswXS5tZW1vcnlEZXNjcmlwdGlvbi5tYXhpbXVtLCAzMSk7CiB9KSgpOwog
Ci0vLyBGSVhNRSB0ZXN0IHR5cGUgbWlzbWF0Y2ggd2l0aCBzZWxlY3QuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKKyhmdW5jdGlvbiBEYXRhU2VjdGlvbigp
IHsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInBlZWsiKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLk1lbW9yeSgpLkluaXRpYWxNYXhQYWdlcyg2NCwgNjQp
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigicGVlayIsIHsg
cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2Fs
KDApCisgICAgICAgICAgICAgICAgLkkzMkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0
dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkRhdGEo
KQorICAgICAgICAgIC5TZWdtZW50KFsweGZmLCAweDJhXSkuSW5kZXgoMCkuT2Zmc2V0KDQpLkVu
ZCgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWZdKS5JbmRleCgw
KS5PZmZzZXQoMjQpLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqc29uID0gSlNP
Ti5wYXJzZShidWlsZGVyLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbi5sZW5n
dGgsIDUpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0ubmFtZSwgIkRhdGEiKTsKKyAg
ICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzRdLmRhdGEubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQu
ZXEoanNvbi5zZWN0aW9uWzRdLmRhdGFbMF0uaW5kZXgsIDApOworICAgIGFzc2VydC5lcShqc29u
LnNlY3Rpb25bNF0uZGF0YVswXS5vZmZzZXQsIDQpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rp
b25bNF0uZGF0YVswXS5zaXplLCAyKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzRdLmRh
dGFbMF0uZGF0YVswXSwgMHhmZik7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5kYXRh
WzBdLmRhdGFbMV0sIDB4MmEpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YVsx
XS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5kYXRhWzFdLm9mZnNl
dCwgMjQpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YVsxXS5zaXplLCA0KTsK
KyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzRdLmRhdGFbMV0uZGF0YVswXSwgMHhkZSk7Cisg
ICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5kYXRhWzFdLmRhdGFbMV0sIDB4YWQpOworICAg
IGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YVsxXS5kYXRhWzJdLCAweGJlKTsKKyAgICBh
c3NlcnQuZXEoanNvbi5zZWN0aW9uWzRdLmRhdGFbMV0uZGF0YVszXSwgMHhlZik7Cit9KSgpOwot
LSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="319131"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296736</attachid>
            <date>2016-12-09 16:27:11 -0800</date>
            <delta_ts>2016-12-09 18:57:40 -0800</delta_ts>
            <desc>Builder and its test</desc>
            <filename>0001-data-section.patch</filename>
            <type>text/plain</type>
            <size>4815</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAwM2I3MzcwMzc4MTYyZGEwYWFiZWMzMWNjMDQzNTdkZTliYWEzNDZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDkgRGVjIDIwMTYgMTU6NDU6MzcgLTA4MDAKU3ViamVjdDogW1BBVENIXSBkYXRhLXNl
Y3Rpb24KCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAgICAgICAgICAgIHwg
MzQgKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBKU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rl
c3RfQnVpbGRlckpTT04uanMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDIg
ZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmlu
ZGV4IDI2ODRlOTMuLjMyMGI4YWMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCkBAIC00OTgsOCArNDk4LDM4IEBAIGV4cG9y
dCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBjYXNlICJEYXRhIjoKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQg
ZGF0YSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzA5Ci0gICAg
ICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmlt
cGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbn0iYCk7IH07CisgICAgICAgICAgICAg
ICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25z
dCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgZGF0YUJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRo
aXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50OiBkYXRhID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQuaXNBcnJheShkYXRhKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRhdHVtIG9mIGRhdGEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGRhdHVtKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0LmdlKGRhdHVtLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0LmxlKGRhdHVtLCAweGZmKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRhLnB1c2goeyBk
YXRhOiBkYXRhLCBpbmRleDogMCwgb2Zmc2V0OiAwIH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCB0aGlzU2VnbWVudCA9IHMuZGF0YVtzLmRhdGEubGVuZ3RoIC0gMV07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJ1aWxkZXIgPSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gZGF0YUJ1aWxkZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4OiBpbmRleCA9PiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5kZXgsIDApOyAvLyBMaW5lYXIgbWVt
b3J5IGluZGV4IG11c3QgYmUgemVybyBpbiBNVlAuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzU2VnbWVudC5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRCdWlsZGVyOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZz
ZXQ6IG9mZnNldCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRSBhbGxvdyBjb21wbGV4IGluaXRfZXhwciBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQuaXNOdW1iZXIob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNTZWdtZW50Lm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRlcjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRlcjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhQnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9OwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzIGIvSlNUZXN0cy93YXNtL3NlbGYt
dGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCmluZGV4IDA1NWFhZjYuLmVmNGI0MTcgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcworKysgYi9KU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKQEAgLTU2OCw2ICs1NjgsNyBA
QCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA2KTsKICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVszXS5uYW1lLCAic2VsZWN0Iik7CiB9KSgpOworLy8g
RklYTUUgdGVzdCB0eXBlIG1pc21hdGNoIHdpdGggc2VsZWN0LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3CiAKIChmdW5jdGlvbiBNZW1vcnlJbXBvcnQoKSB7
CiAgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQpAQCAtNTg4LDQgKzU4OSwzOCBA
QCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAgICAgYXNzZXJ0
LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLm1lbW9yeURlc2NyaXB0aW9uLm1heGltdW0sIDMx
KTsKIH0pKCk7CiAKLS8vIEZJWE1FIHRlc3QgdHlwZSBtaXNtYXRjaCB3aXRoIHNlbGVjdC4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NworKGZ1bmN0aW9uIERh
dGFTZWN0aW9uKCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDY0LCA2
NCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInBlZWsi
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJwZWVrIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyTG9hZCgyLCAwKQorICAgICAgICAg
ICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRGF0YSgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZmYsIDB4MmFdKS5PZmZzZXQoNCku
RW5kKCkKKyAgICAgICAgICAuU2VnbWVudChbMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pLkluZGV4
KDApLk9mZnNldCgyNCkuRW5kKCkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGpzb24gPSBK
U09OLnBhcnNlKGJ1aWxkZXIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uLmxl
bmd0aCwgNSk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5uYW1lLCAiRGF0YSIpOwor
ICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YS5sZW5ndGgsIDIpOworICAgIGFzc2Vy
dC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YVswXS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGpz
b24uc2VjdGlvbls0XS5kYXRhWzBdLm9mZnNldCwgNCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2Vj
dGlvbls0XS5kYXRhWzBdLmRhdGEubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0
aW9uWzRdLmRhdGFbMF0uZGF0YVswXSwgMHhmZik7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlv
bls0XS5kYXRhWzBdLmRhdGFbMV0sIDB4MmEpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25b
NF0uZGF0YVsxXS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5kYXRh
WzFdLm9mZnNldCwgMjQpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YVsxXS5k
YXRhLmxlbmd0aCwgNCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5kYXRhWzFdLmRh
dGFbMF0sIDB4ZGUpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bNF0uZGF0YVsxXS5kYXRh
WzFdLCAweGFkKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzRdLmRhdGFbMV0uZGF0YVsy
XSwgMHhiZSk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvbls0XS5kYXRhWzFdLmRhdGFbM10s
IDB4ZWYpOworfSkoKTsKLS0gCjIuMTAuMQoK
</data>
<flag name="commit-queue"
          id="319139"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296766</attachid>
            <date>2016-12-09 18:57:40 -0800</date>
            <delta_ts>2016-12-09 21:15:51 -0800</delta_ts>
            <desc>more tests, some C++, missing ::evaluate after Instance is created</desc>
            <filename>0001-data-section.patch</filename>
            <type>text/plain</type>
            <size>14427</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAwOTkwZGNlNTAyNDMyYzkyNmIyZjYwNDg2ZDQ5MDllZGVmNmJjOTQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDkgRGVjIDIwMTYgMTU6NDU6MzcgLTA4MDAKU3ViamVjdDogW1BBVENIXSBkYXRhLXNl
Y3Rpb24KCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAzNCArKysrKysrKy0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5
LmpzICAgICAgIHwgMTUgKysrLQogSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJK
U09OLmpzICAgICAgfCAyNiArKysrKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmggICAgICAgICB8IDMyICsrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAgfCA5MiArKysrKysrKysrKysrKysrKysrLS0tLS0tCiA1
IGZpbGVzIGNoYW5nZWQsIDE3NSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpz
CmluZGV4IDI2ODRlOTMuLjMyMGI4YWMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVy
LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCkBAIC00OTgsOCArNDk4LDM4IEBAIGV4
cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBjYXNlICJEYXRhIjoKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBsZW1l
bnQgZGF0YSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzA5Ci0g
ICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBV
bmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbn0iYCk7IH07CisgICAgICAgICAg
ICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZGF0YUJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+
IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50OiBkYXRhID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuaXNBcnJheShkYXRhKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRhdHVtIG9mIGRhdGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGRhdHVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmdlKGRhdHVtLCAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKGRhdHVtLCAweGZmKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRhLnB1c2go
eyBkYXRhOiBkYXRhLCBpbmRleDogMCwgb2Zmc2V0OiAwIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCB0aGlzU2VnbWVudCA9IHMuZGF0YVtzLmRhdGEubGVuZ3RoIC0gMV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJ1aWxkZXIgPSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gZGF0YUJ1aWxkZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4OiBpbmRleCA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5kZXgsIDApOyAvLyBMaW5lYXIg
bWVtb3J5IGluZGV4IG11c3QgYmUgemVybyBpbiBNVlAuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzU2VnbWVudC5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRCdWlsZGVyOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
ZmZzZXQ6IG9mZnNldCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRSBhbGxvdyBjb21wbGV4IGluaXRfZXhwciBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQuaXNOdW1iZXIob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXNTZWdtZW50Lm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRlcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRlcjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhQnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMgYi9KU1Rlc3RzL3dhc20vQnVp
bGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwppbmRleCBiMTliOGI2Li4xNjNmN2FkIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcworKysgYi9KU1Rl
c3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwpAQCAtMTU0LDcgKzE1NCwyMCBA
QCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgfQogICAgIH0sCiAKLSAgICBEYXRhOiAoc2Vj
dGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9
LAorICAgIERhdGE6IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZhcnVp
bnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGRhdHVtIG9m
IHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGRhdHVt
LmluZGV4KTsKKyAgICAgICAgICAgIC8vIEZJWE1FIGFsbG93IGNvbXBsZXggaW5pdF9leHByIGhl
cmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MDAKKyAgICAg
ICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgaTMyLmNvbnN0IGFzIG9mZnNldC4KKyAg
ICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlWyJpMzIu
Y29uc3QiXS52YWx1ZSk7CisgICAgICAgICAgICBwdXQoYmluLCBXQVNNLmRlc2NyaXB0aW9uLm9w
Y29kZVsiaTMyLmNvbnN0Il0uaW1tZWRpYXRlWzBdLnR5cGUsIGRhdHVtLm9mZnNldCk7CisgICAg
ICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVsiZW5kIl0u
dmFsdWUpOworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGRhdHVtLmRhdGEubGVu
Z3RoKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiBkYXR1bS5kYXRhKQorICAgICAg
ICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIGJ5dGUpOworICAgICAgICB9CisgICAgfSwKIH07
CiAKIGV4cG9ydCBjb25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9PiB7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKaW5kZXggMDU1YWFmNi4uMDAx
OWQyOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09O
LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwpAQCAt
NTY4LDYgKzU2OCw3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+
IHsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOwog
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJzZWxlY3Qi
KTsKIH0pKCk7CisvLyBGSVhNRSB0ZXN0IHR5cGUgbWlzbWF0Y2ggd2l0aCBzZWxlY3QuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKIAogKGZ1bmN0aW9uIE1l
bW9yeUltcG9ydCgpIHsKICAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCkBAIC01
ODgsNCArNTg5LDI3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+
IHsKICAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0ubWVtb3J5RGVzY3JpcHRp
b24ubWF4aW11bSwgMzEpOwogfSkoKTsKIAotLy8gRklYTUUgdGVzdCB0eXBlIG1pc21hdGNoIHdp
dGggc2VsZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3
CisoZnVuY3Rpb24gRGF0YVNlY3Rpb24oKSB7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVp
bGRlcigpKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDY0LCA2NCkuRW5kKCkK
KyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsweGZmLCAweDJhXSkuT2Zmc2V0
KDQpLkVuZCgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWZdKS5J
bmRleCgwKS5PZmZzZXQoMjQpLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqc29u
ID0gSlNPTi5wYXJzZShidWlsZGVyLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlv
bi5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0ubmFtZSwgIkRhdGEi
KTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGEubGVuZ3RoLCAyKTsKKyAgICBh
c3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0uaW5kZXgsIDApOworICAgIGFzc2VydC5l
cShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5vZmZzZXQsIDQpOworICAgIGFzc2VydC5lcShqc29u
LnNlY3Rpb25bMV0uZGF0YVswXS5kYXRhLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGpzb24u
c2VjdGlvblsxXS5kYXRhWzBdLmRhdGFbMF0sIDB4ZmYpOworICAgIGFzc2VydC5lcShqc29uLnNl
Y3Rpb25bMV0uZGF0YVswXS5kYXRhWzFdLCAweDJhKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0
aW9uWzFdLmRhdGFbMV0uaW5kZXgsIDApOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0u
ZGF0YVsxXS5vZmZzZXQsIDI0KTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFb
MV0uZGF0YS5sZW5ndGgsIDQpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVsx
XS5kYXRhWzBdLCAweGRlKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMV0u
ZGF0YVsxXSwgMHhhZCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzFdLmRh
dGFbMl0sIDB4YmUpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVsxXS5kYXRh
WzNdLCAweGVmKTsKK30pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
aW5kZXggODM4M2Q0Yy4uN2VhZTgxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlv
bi5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCisj
aW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
ZmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTEzLDYgKzExNSwzNSBAQCBz
dHJ1Y3QgRnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5IHsKICAgICBzaXplX3QgZW5kOwogfTsKIAor
c3RydWN0IFNlZ21lbnQgeworICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICB1aW50MzJfdCBzaXpl
SW5CeXRlczsKKyAgICAvLyBCeXRlcyBhcmUgYWxsb2NhdGVkIGF0IHRoZSBlbmQuCisgICAgc3Rh
dGljIFNlZ21lbnQqIG1ha2UodWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplSW5CeXRlcykK
KyAgICB7CisgICAgICAgIGF1dG8gYWxsb2NhdGVkID0gdHJ5RmFzdENhbGxvYyhzaXplSW5CeXRl
cywgMSk7CisgICAgICAgIFNlZ21lbnQqIHNlZ21lbnQ7CisgICAgICAgIGlmICghYWxsb2NhdGVk
LmdldFZhbHVlKHNlZ21lbnQpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHNlZ21lbnQtPm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgc2VnbWVudC0+c2l6ZUluQnl0ZXMg
PSBzaXplSW5CeXRlczsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfQorICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koU2VnbWVudCAqc2VnbWVudCkKKyAgICB7CisgICAgICAgIGZhc3RGcmVl
KHNlZ21lbnQpOworICAgIH0KKyAgICB1aW50OF90JiBieXRlKHVpbnQzMl90IHBvcykKKyAgICB7
CisgICAgICAgIEFTU0VSVChwb3MgPCBzaXplSW5CeXRlcyk7CisgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBz
aXplb2Yob2Zmc2V0KSArIHNpemVvZihzaXplSW5CeXRlcykgKyBwb3MpOworICAgIH0KKyAgICB0
eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxTZWdtZW50LCBkZWNsdHlwZSgmU2VnbWVudDo6ZGVzdHJv
eSk+IFB0cjsKKyAgICBzdGF0aWMgUHRyIG1ha2VQdHIoU2VnbWVudCogc2VnbWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBQdHIoc2VnbWVudCwgJlNlZ21lbnQ6OmRlc3Ryb3kpOworICAgIH0K
K307CiAKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgVmVjdG9yPFNpZ25hdHVyZT4g
c2lnbmF0dXJlczsKQEAgLTEyMyw2ICsxNTQsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24g
ewogICAgIFZlY3RvcjxTaWduYXR1cmUqPiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlczsKICAg
ICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsK
KyAgICBWZWN0b3I8U2VnbWVudDo6UHRyPiBkYXRhOwogfTsKIAogc3RydWN0IFVubGlua2VkV2Fz
bVRvV2FzbUNhbGwgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcAppbmRleCAzNzI5OGY4Li5kZWUwNmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMTU3LDEyICsxNTcsMTIgQEAg
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVR5cGUo
KQogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQp
KQorICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpCisgICAgICAgIHx8IGNvdW50ID09IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQorICAgICAgICB8fCAhbV9tb2R1bGUt
PnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3Vu
dCk7Ci0gICAgaWYgKCFtX21vZHVsZS0+c2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRhdGFMb2dMbigiICBjb3VudDog
IiwgY291bnQpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
ICAgICAgICAgaW50OF90IHR5cGU7CkBAIC0xNzUsMTcgKzE3NSwxNSBAQCBib29sIE1vZHVsZVBh
cnNlcjo6cGFyc2VUeXBlKCkKICAgICAgICAgICAgIGRhdGFMb2dMbigiR290IGZ1bmN0aW9uIHR5
cGUuIik7CiAKICAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiYXJndW1lbnRD
b3VudDogIiwgYXJndW1lbnRDb3VudCk7Ci0KICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50
VHlwZXM7Ci0gICAgICAgIGlmICghYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJn
dW1lbnRDb3VudCkpCisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkK
KyAgICAgICAgICAgIHx8IGFyZ3VtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpCisgICAgICAgICAgICB8fCAhYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoYXJndW1lbnRDb3VudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCIgIGFyZ3VtZW50IGNvdW50OiAi
LCBhcmd1bWVudENvdW50KTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGFy
Z3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJn
dW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKICAgICAg
ICAgICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGFyZ3VtZW50VHlwZSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE2LDE0ICsyMTQsMTQgQEAgYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlVHlwZSgpCiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogewogICAgIHVp
bnQzMl90IGltcG9ydENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW1wb3J0Q291bnQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX21vZHVsZS0+aW1wb3J0cy50cnlS
ZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMg
d2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGlt
cG9ydENvdW50KQorICAgICAgICB8fCBpbXBvcnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkKKyAgICAgICAgfHwgIW1fbW9kdWxlLT5pbXBvcnRzLnRyeVJlc2Vy
dmVDYXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVu
IHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgogICAgICAgICB8fCAhbV9tb2R1bGUtPmltcG9ydEZ1
bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zl
ci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICAgICAgfHwgIW1f
ZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkpIC8vIEZJ
WE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4gV2Un
bGwgYWxsb2NhdGUgc29tZSBtb3JlIGhlcmUgd2hlbiB3ZSBrbm93IGhvdyBtYW55IGZ1bmN0aW9u
cyB0byBleHBlY3QuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyICE9IGltcG9ydENvdW50OyArK2ltcG9ydE51
bWJlcikgeworICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVy
IDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIEltcG9ydCBpbXA7CiAg
ICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKICAgICAgICAgdWludDMyX3QgZmllbGRMZW47CkBA
IC0yNzgsMTIgKzI3NiwxMyBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpCiB7
CiAgICAgdWludDMyX3QgY291bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkKKyAg
ICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCiAg
ICAgICAgIHx8ICFtX21vZHVsZS0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGNvdW50KQogICAgICAgICB8fCAhbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KQogICAgICAgICB8fCAhbV9mdW5jdGlvbkluZGV4U3Bh
Y2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSArIGNvdW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSAh
PSBjb3VudDsgKytpKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKICAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMih0eXBlTnVtYmVyKQogICAgICAgICAgICAgfHwgdHlwZU51bWJlciA+PSBtX21vZHVsZS0+
c2lnbmF0dXJlcy5zaXplKCkpCkBAIC0zNzIsMTAgKzM3MSwxMSBAQCBib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VFeHBvcnQoKQogewogICAgIHVpbnQzMl90IGV4cG9ydENvdW50OwogICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpCisgICAgICAgIHx8IGV4cG9ydENvdW50ID09IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQogICAgICAgICB8fCAhbV9tb2R1bGUt
PmV4cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1i
ZXIgIT0gZXhwb3J0Q291bnQ7ICsrZXhwb3J0TnVtYmVyKSB7CisgICAgZm9yICh1aW50MzJfdCBl
eHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRDb3VudDsgKytleHBvcnROdW1i
ZXIpIHsKICAgICAgICAgRXhwb3J0IGV4cDsKICAgICAgICAgdWludDMyX3QgZmllbGRMZW47CiAg
ICAgICAgIFN0cmluZyBmaWVsZFN0cmluZzsKQEAgLTM4Myw4ICszODMsMTAgQEAgYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkKICAgICAgICAgICAgIHx8ICFjb25zdW1lVVRGOFN0cmlu
ZyhmaWVsZFN0cmluZywgZmllbGRMZW4pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBleHAuZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5n
KTsKKwogICAgICAgICBpZiAoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4cC5raW5kKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBzd2l0Y2ggKGV4cC5raW5kKSB7CiAgICAgICAg
IGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGV4cC5mdW5jdGlvbkluZGV4KQpAQCAtNDI5LDEwICs0MzEsMTEgQEAgYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlQ29kZSgpCiB7CiAgICAgdWludDMyX3QgY291bnQ7CiAgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihjb3VudCkKKyAgICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpCiAgICAgICAgIHx8IGNvdW50ICE9IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwogICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkKICAgICAgICAgICAgIHx8IGZ1bmN0
aW9uU2l6ZSA+IGxlbmd0aCgpCkBAIC00NDksNyArNDUyLDU2IEBAIGJvb2wgTW9kdWxlUGFyc2Vy
OjpwYXJzZUNvZGUoKQogCiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKCkKIHsKLSAgICAv
LyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzA5Cisg
ICAgdWludDMyX3Qgc2VnbWVudENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VnbWVu
dENvdW50KQorICAgICAgICB8fCBzZWdtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpCisgICAgICAgIHx8ICFtX21vZHVsZS0+ZGF0YS50cnlSZXNlcnZlQ2Fw
YWNpdHkoc2VnbWVudENvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nTG4oIiAgc2VnbWVudHM6ICIsIHNlZ21lbnRDb3VudCk7CisK
KyAgICBmb3IgKHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2Vn
bWVudENvdW50OyArK3NlZ21lbnROdW1iZXIpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nTG4oIiAgc2VnbWVudCAjIiwgc2VnbWVudE51bWJlcik7CisgICAgICAg
IHVpbnQzMl90IGluZGV4OworICAgICAgICB1aW50OF90IG9wY29kZTsKKyAgICAgICAgdWludDMy
X3Qgb2Zmc2V0OworICAgICAgICB1aW50OF90IGVuZE9wY29kZTsKKyAgICAgICAgdWludDMyX3Qg
ZGF0YUJ5dGVMZW5ndGg7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpCisgICAg
ICAgICAgICB8fCBpbmRleCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAv
LyBGSVhNRSBhbGxvdyBjb21wbGV4IGluaXRfZXhwciBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAwCisgICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBo
YW5kbGUgaTMyLmNvbnN0IGFzIG9mZnNldC4KKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ4KG9wY29k
ZSkKKyAgICAgICAgICAgIHx8IG9wY29kZSAhPSBXYXNtOjpJMzJDb25zdAorICAgICAgICAgICAg
fHwgIXBhcnNlVmFyVUludDMyKG9mZnNldCkKKyAgICAgICAgICAgIHx8ICFwYXJzZVVJbnQ4KGVu
ZE9wY29kZSkKKyAgICAgICAgICAgIHx8IGVuZE9wY29kZSAhPSBXYXNtOjpFbmQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZ0xuKCIgICAgb2Zmc2V0OiAiLCBvZmZzZXQpOworCisgICAgICAgIGlmICghcGFyc2VWYXJV
SW50MzIoZGF0YUJ5dGVMZW5ndGgpCisgICAgICAgICAgICB8fCBkYXRhQnl0ZUxlbmd0aCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAg
ZGF0YSBieXRlczogIiwgZGF0YUJ5dGVMZW5ndGgpOworCisgICAgICAgIFNlZ21lbnQqIHNlZ21l
bnQgPSBTZWdtZW50OjptYWtlKG9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBpZiAo
IXNlZ21lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fbW9kdWxlLT5k
YXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50OjptYWtlUHRyKHNlZ21lbnQpKTsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9IDA7IGRhdGFCeXRlIDwgZGF0YUJ5dGVMZW5ndGg7ICsr
ZGF0YUJ5dGUpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZTsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VVSW50OChieXRlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBbIiwgZGF0
YUJ5dGUsICJdID0gIiwgYnl0ZSk7CisgICAgICAgICAgICBzZWdtZW50LT5ieXRlKGRhdGFCeXRl
KSA9IGJ5dGU7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gCjIu
MTAuMQoK
</data>
<flag name="commit-queue"
          id="319164"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296776</attachid>
            <date>2016-12-09 21:15:51 -0800</date>
            <delta_ts>2016-12-09 21:25:03 -0800</delta_ts>
            <desc>patch for review</desc>
            <filename>0001-data-section.patch</filename>
            <type>text/plain</type>
            <size>25134</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA2NTIzNTI5MDVlOWY5YzUxODk2MjliZDczNmNlNTUzZDNiNWE5YTc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDkgRGVjIDIwMTYgMTU6NDU6MzcgLTA4MDAKU3ViamVjdDogW1BBVENIXSBkYXRhLXNl
Y3Rpb24KCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjEgKysrKwogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMzQgKysrKystCiBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJs
eUJpbmFyeS5qcyAgICAgICAgICB8ICAxNSArKy0KIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9E
YXRhLmpzICAgICAgICAgICAgICAgICAgIHwgMTM1ICsrKysrKysrKysrKysrKysrKysrKwogSlNU
ZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzICAgICAgICAgfCAgMjYgKysr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAg
MjUgKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oICAgICAgICAg
ICAgfCAgMzIgKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuY3BwICAgIHwgIDkzICsrKysrKysrKystLS0tCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAgICAgICAgICAgICB8ICAyMiArKystCiA5IGZpbGVzIGNoYW5nZWQsIDM3
NiBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDI2NmQzZS4uMmIxOWUzZCAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwy
NiBAQAogMjAxNi0xMi0wOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKKyAg
ICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCBkYXRhIHNlY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHNwZWNpZmllZCBpbiBodHRwczov
L2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFzdGVyL0JpbmFyeUVuY29kaW5n
Lm1kI2RhdGEtc2VjdGlvbgorICAgICAgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgaW50ZXJlc3Rp
bmcgY29ybmVyIGNhc2VzIGFyZSBpbGwtZGVmaW5lZCBieSB0aGUgc3BlYzogaHR0cHM6Ly9naXRo
dWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvODk3CisKKyAgICAgICAgKiB3YXNtL0J1
aWxkZXIuanM6IGNyZWF0ZSBhIGRhdGEgc2VjdGlvbiBmcm9tIEphdmFTY3JpcHQKKyAgICAgICAg
KiB3YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanM6IGFzc2VtYmxlIHRoZSBkYXRhIHNl
Y3Rpb24gaW50byB0aGUgcHJvcGVyIGJpbmFyeSBlbmNvZGluZworICAgICAgICAoY29uc3QuZW1p
dHRlcnMuRGF0YSk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzOiBBZGRlZC4K
KyAgICAgICAgKERhdGFTZWN0aW9uKToKKyAgICAgICAgKERhdGFTZWN0aW9uT2ZmVGhlRW5kKToK
KyAgICAgICAgKERhdGFTZWN0aW9uUGFydGx5T2ZmVGhlRW5kKToKKyAgICAgICAgKERhdGFTZWN0
aW9uRW1wdHlPZmZUaGVFbmQpOgorICAgICAgICAoRGF0YVNlY3Rpb25TZWVuQnlTdGFydCk6Cisg
ICAgICAgICogd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qczogbWFrZSBzdXJlIHRo
ZSBKU09OIHN0cnVjdHVyZSBpcyBmaW5lICh0aGlzIHNhbml0eSBjaGVja3MgYmVmb3JlIGdvaW5n
IHRvIGJpbmFyeSkKKworMjAxNi0xMi0wOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5j
b20+CisKICAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgc3RhcnQgZnVuY3Rp
b24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE1
MAogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9C
dWlsZGVyLmpzCmluZGV4IGExZjgwYjcuLjU5NTE0MTcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCkBAIC01MjMsOCArNTIz
LDM4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBjYXNlICJEYXRhIjoKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RSBpbXBsZW1lbnQgZGF0YSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNzA5Ci0gICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9ICgpID0+IHsgdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbn0iYCk7IH07Cisg
ICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBF
bmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50OiBkYXRhID0+
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuaXNBcnJheShkYXRhKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRhdHVtIG9mIGRhdGEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGRhdHVtKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmdlKGRhdHVtLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKGRhdHVtLCAweGZmKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5k
YXRhLnB1c2goeyBkYXRhOiBkYXRhLCBpbmRleDogMCwgb2Zmc2V0OiAwIH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCB0aGlzU2VnbWVudCA9IHMuZGF0YVtzLmRhdGEubGVuZ3Ro
IC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJ1aWxkZXIg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gZGF0YUJ1aWxk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4OiBpbmRleCA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5kZXgsIDApOyAv
LyBMaW5lYXIgbWVtb3J5IGluZGV4IG11c3QgYmUgemVybyBpbiBNVlAuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzU2VnbWVudC5pbmRleCA9IGluZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRCdWlsZGVyOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPZmZzZXQ6IG9mZnNldCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRSBhbGxvdyBjb21wbGV4IGluaXRfZXhwciBoZXJlLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQuaXNOdW1iZXIob2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNTZWdtZW50Lm9mZnNldCA9IG9mZnNldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRlcjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRl
cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhQnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMgYi9KU1Rlc3Rz
L3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwppbmRleCBhODU2YjRkLi5kM2FiNWU1
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwor
KysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwpAQCAtMTU2LDcg
KzE1NiwyMCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgfQogICAgIH0sCiAKLSAgICBE
YXRhOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1l
bnRlZGApOyB9LAorICAgIERhdGE6IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJp
biwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0
IGRhdHVtIG9mIHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQz
MiIsIGRhdHVtLmluZGV4KTsKKyAgICAgICAgICAgIC8vIEZJWE1FIGFsbG93IGNvbXBsZXggaW5p
dF9leHByIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3
MDAKKyAgICAgICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgaTMyLmNvbnN0IGFzIG9m
ZnNldC4KKyAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00uZGVzY3JpcHRpb24ub3Bj
b2RlWyJpMzIuY29uc3QiXS52YWx1ZSk7CisgICAgICAgICAgICBwdXQoYmluLCBXQVNNLmRlc2Ny
aXB0aW9uLm9wY29kZVsiaTMyLmNvbnN0Il0uaW1tZWRpYXRlWzBdLnR5cGUsIGRhdHVtLm9mZnNl
dCk7CisgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmRlc2NyaXB0aW9uLm9wY29k
ZVsiZW5kIl0udmFsdWUpOworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGRhdHVt
LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiBkYXR1bS5kYXRh
KQorICAgICAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIGJ5dGUpOworICAgICAgICB9Cisg
ICAgfSwKIH07CiAKIGV4cG9ydCBjb25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9
PiB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjgwYjVlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfRGF0YS5qcwpAQCAtMCwwICsxLDEzNSBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworY29u
c3QgbWVtU2l6ZUluUGFnZXMgPSAxOworY29uc3QgcGFnZVNpemVJbkJ5dGVzID0gNjQgKiAxMDI0
OworY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7IGluaXRpYWw6IG1lbVNpemVJblBhZ2VzLCBt
YXhpbXVtOiBtZW1TaXplSW5QYWdlcyB9OworCisvLyBGSVhNRSBTb21lIGNvcm5lciBjYXNlcyBh
cmUgaWxsLXNwZWNpZmllZDogaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9p
c3N1ZXMvODk3CisKKyhmdW5jdGlvbiBEYXRhU2VjdGlvbigpIHsKKyAgICBjb25zdCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9y
dCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKS5FbmQoKQorICAg
ICAgICAuRGF0YSgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZmYsIDB4MmFdKS5PZmZzZXQoNCku
RW5kKCkKKyAgICAgICAgICAuU2VnbWVudChbMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pLk9mZnNl
dCgyNCkuRW5kKCkKKyAgICAgICAgICAuU2VnbWVudChbMHhjYSwgMHhmZV0pLk9mZnNldCgyNSku
RW5kKCkgLy8gT3ZlcndyaXRlLgorICAgICAgICAgIC5TZWdtZW50KFtdKS5PZmZzZXQoNCkuRW5k
KCkgLy8gRW1wdHkuCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVt
b3J5RGVzY3JpcHRpb24pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBi
dWZmZXIgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKyAgICBmb3IgKGxldCBpZHgg
PSAwOyBpZHggPCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlczsgKytpZHgpIHsKKyAg
ICAgICAgY29uc3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAgICAgICAgc3dpdGNoIChpZHgpIHsK
KyAgICAgICAgY2FzZSA0OiBhc3NlcnQuZXEodmFsdWUsIDB4ZmYpOyBicmVhazsKKyAgICAgICAg
Y2FzZSA1OiBhc3NlcnQuZXEodmFsdWUsIDB4MmEpOyBicmVhazsKKyAgICAgICAgY2FzZSAyNDog
YXNzZXJ0LmVxKHZhbHVlLCAweGRlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMjU6IGFzc2VydC5l
cSh2YWx1ZSwgMHhjYSk7IGJyZWFrOworICAgICAgICBjYXNlIDI2OiBhc3NlcnQuZXEodmFsdWUs
IDB4ZmUpOyBicmVhazsKKyAgICAgICAgY2FzZSAyNzogYXNzZXJ0LmVxKHZhbHVlLCAweGVmKTsg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydC5lcSh2YWx1ZSwgMHgwMCk7IGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIERhdGFTZWN0aW9uT2ZmVGhlRW5k
KCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5
RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5EYXRhKCkKKyAgICAgICAgICAuU2VnbWVudChb
MHhmZl0pLk9mZnNldChtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlcykuRW5kKCkKKyAg
ICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pLCBSYW5nZUVycm9yLCBgRGF0YSBzZWdtZW50
IGluaXRpYWxpemVzIG1lbW9yeSBvdXQgb2YgcmFuZ2VgKTsKKyAgICBjb25zdCBidWZmZXIgPSBu
ZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKyAgICBmb3IgKGxldCBpZHggPSAwOyBpZHgg
PCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlczsgKytpZHgpIHsKKyAgICAgICAgY29u
c3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAgICAgICAgYXNzZXJ0LmVxKHZhbHVlLCAweDAwKTsK
KyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gRGF0YVNlY3Rpb25QYXJ0bHlPZmZUaGVFbmQoKSB7
CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNj
cmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsweGZm
LCAweGZmXSkuT2Zmc2V0KG1lbVNpemVJblBhZ2VzICogcGFnZVNpemVJbkJ5dGVzIC0gMSkuRW5k
KCkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlw
dGlvbik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pLCBSYW5nZUVycm9yLCBgRGF0YSBz
ZWdtZW50IGluaXRpYWxpemVzIG1lbW9yeSBvdXQgb2YgcmFuZ2VgKTsKKyAgICBjb25zdCBidWZm
ZXIgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKyAgICBmb3IgKGxldCBpZHggPSAw
OyBpZHggPCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlczsgKytpZHgpIHsKKyAgICAg
ICAgY29uc3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAgICAgICAgYXNzZXJ0LmVxKHZhbHVlLCAw
eDAwKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gRGF0YVNlY3Rpb25FbXB0eU9mZlRoZUVu
ZCgpIHsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9y
eURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRGF0YSgpCisgICAgICAgICAgLlNlZ21lbnQo
W10pLk9mZnNldChtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlcykuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGlt
cDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFy
cmF5KG1lbW9yeS5idWZmZXIpOworICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG1lbVNpemVJ
blBhZ2VzICogcGFnZVNpemVJbkJ5dGVzOyArK2lkeCkgeworICAgICAgICBjb25zdCB2YWx1ZSA9
IGJ1ZmZlcltpZHhdOworICAgICAgICBhc3NlcnQuZXEodmFsdWUsIDB4MDApOworICAgIH0KK30p
KCk7CisKKyhmdW5jdGlvbiBEYXRhU2VjdGlvblNlZW5CeVN0YXJ0KCkgeworICAgIGNvbnN0IG9m
ZnNldCA9IDEwMjQ7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgi
aW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuU3RhcnQoImZvbyIpLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KG9mZnNldCkKKyAgICAgICAgICAgICAgICAuSTMy
TG9hZDhVKDIsIDApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkgLy8gQ2FsbHMgZnVuYygoaTgu
bG9hZChvZmZzZXQpLCBhbGlnbj0yLCBvZmZzZXQ9MCkuIFRoaXMgc2hvdWxkIG9ic2VydmUgMHhm
ZiBhcyBzZXQgYnkgdGhlIGRhdGEgc2VjdGlvbi4KKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsweGZmXSkuT2Zm
c2V0KG9mZnNldCkuRW5kKCkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9y
eShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgbGV0IHZhbHVlID0gMDsKKyAgICBjb25zdCBzZXR0
ZXIgPSB2ID0+IHZhbHVlID0gdjsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZSgKKyAgICAgICAgbW9kdWxlLAorICAgICAgICB7CisgICAgICAgICAgICBpbXA6
IHsKKyAgICAgICAgICAgICAgICBtZW1vcnk6IG1lbW9yeSwKKyAgICAgICAgICAgICAgICBmdW5j
OiBzZXR0ZXIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgYXNzZXJ0LmVxKHZhbHVl
LCAweGZmKTsKKyAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVy
KTsKKyAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXpl
SW5CeXRlczsgKytpZHgpIHsKKyAgICAgICAgY29uc3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAg
ICAgICAgaWYgKGlkeCA9PSBvZmZzZXQpCisgICAgICAgICAgICBhc3NlcnQuZXEodmFsdWUsIDB4
ZmYpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnQuZXEodmFsdWUsIDB4MDApOwor
ICAgIH0KK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVp
bGRlckpTT04uanMgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMK
aW5kZXggYjM5MjllYy4uZDFjMGNhNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJKU09OLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9C
dWlsZGVySlNPTi5qcwpAQCAtNjE5LDYgKzYxOSw3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0g
KG9wRm4sIG1lc3NhZ2UpID0+IHsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZS5sZW5ndGgsIDYpOwogICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
WzNdLm5hbWUsICJzZWxlY3QiKTsKIH0pKCk7CisvLyBGSVhNRSB0ZXN0IHR5cGUgbWlzbWF0Y2gg
d2l0aCBzZWxlY3QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMy
NjcKIAogKGZ1bmN0aW9uIE1lbW9yeUltcG9ydCgpIHsKICAgICBjb25zdCBidWlsZGVyID0gKG5l
dyBCdWlsZGVyKCkpCkBAIC02MzksNCArNjQwLDI3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0g
KG9wRm4sIG1lc3NhZ2UpID0+IHsKICAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFb
MF0ubWVtb3J5RGVzY3JpcHRpb24ubWF4aW11bSwgMzEpOwogfSkoKTsKIAotLy8gRklYTUUgdGVz
dCB0eXBlIG1pc21hdGNoIHdpdGggc2VsZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzMjY3CisoZnVuY3Rpb24gRGF0YVNlY3Rpb24oKSB7CisgICAgY29uc3Qg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBh
Z2VzKDY0LCA2NCkuRW5kKCkKKyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsw
eGZmLCAweDJhXSkuT2Zmc2V0KDQpLkVuZCgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZGUsIDB4
YWQsIDB4YmUsIDB4ZWZdKS5JbmRleCgwKS5PZmZzZXQoMjQpLkVuZCgpCisgICAgICAgIC5FbmQo
KTsKKyAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShidWlsZGVyLmpzb24oKSk7CisgICAgYXNz
ZXJ0LmVxKGpzb24uc2VjdGlvbi5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rp
b25bMV0ubmFtZSwgIkRhdGEiKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGEu
bGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0uaW5kZXgs
IDApOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5vZmZzZXQsIDQpOwor
ICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5kYXRhLmxlbmd0aCwgMik7Cisg
ICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLmRhdGFbMF0sIDB4ZmYpOworICAg
IGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5kYXRhWzFdLCAweDJhKTsKKyAgICBh
c3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMV0uaW5kZXgsIDApOworICAgIGFzc2VydC5l
cShqc29uLnNlY3Rpb25bMV0uZGF0YVsxXS5vZmZzZXQsIDI0KTsKKyAgICBhc3NlcnQuZXEoanNv
bi5zZWN0aW9uWzFdLmRhdGFbMV0uZGF0YS5sZW5ndGgsIDQpOworICAgIGFzc2VydC5lcShqc29u
LnNlY3Rpb25bMV0uZGF0YVsxXS5kYXRhWzBdLCAweGRlKTsKKyAgICBhc3NlcnQuZXEoanNvbi5z
ZWN0aW9uWzFdLmRhdGFbMV0uZGF0YVsxXSwgMHhhZCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2Vj
dGlvblsxXS5kYXRhWzFdLmRhdGFbMl0sIDB4YmUpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rp
b25bMV0uZGF0YVsxXS5kYXRhWzNdLCAweGVmKTsKK30pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwppbmRleCA4ZGRmN2U4Li4yOTViMzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxNi0xMi0wOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCBkYXRhIHNlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY5NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHNwZWNpZmllZCBpbiBo
dHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFzdGVyL0JpbmFyeUVu
Y29kaW5nLm1kI2RhdGEtc2VjdGlvbgorICAgICAgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgaW50
ZXJlc3RpbmcgY29ybmVyIGNhc2VzIGFyZSBpbGwtZGVmaW5lZCBieSB0aGUgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvODk3CisKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDogc2VnbWVudHMgYXJlIHdoYXQgcmVwcmVzZW50IHNlY3Rpb25zIG9m
IG1lbW9yeSB0byBpbml0aWFsaXplIChzaW1pbGFyIHRvIEVMRidzIG5vbi16ZXJvIGludGlhbGl6
ZXIgZGF0YSAvIHJvZGF0YSkKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VnbWVudDo6bWFrZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlNlZ21lbnQ6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWdtZW50OjpieXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VnbWVudDo6bWFrZVB0cik6
CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDogcGFyc2UgdGhlIGRhdGEgc2Vj
dGlvbiwgYW5kIHByZXZlbnQgYSBmZXcgb3ZlcmZsb3dzIGlmIGEgbWFsaWNpb3VzIHVzZXIgcGFz
c2VzIGluIFVJTlRfTUFYICh0aGUgbG9vcHMgd291bGQgb3ZlcmZsb3cpCisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNl
cjo6cGFyc2VGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFy
c2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSk6
CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKTogdGhlIG9ubHkgc2Vuc2libGUgdGltZSB0
byBpbml0aWFsaXplIHRoZSBkYXRhIHNlY3Rpb24gaXMgYWZ0ZXIgbGlua2luZywgYnV0IGJlZm9y
ZSBjYWxsaW5nIHN0YXJ0LCBJIHRlc3QgZm9yIHRoaXMgYnV0IHRoZSBzcGVjIGlzbid0IGNsZWFy
IGl0J3MgY29ycmVjdCB5ZXQKKwogMjAxNi0xMi0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBbm5vdGF0ZSBNZWRpYVN0cmVhbSBhbmQgV2ViUlRD
IGlkbCB3aXRoIEVuYWJsZWRBdFJ1bnRpbWUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCmluZGV4IGYwNDM1MTkuLjliZWM4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTM1LDggKzM1LDEwIEBACiAjaW5jbHVkZSAiV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21Q
YWdlQ291bnQuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9mYXN0TWFsbG9jLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMTQsNiArMTE2LDM1IEBAIHN0cnVjdCBGdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkgewogICAgIHNpemVfdCBlbmQ7CiB9OwogCitzdHJ1Y3QgU2VnbWVudCB7
CisgICAgdWludDMyX3Qgb2Zmc2V0OworICAgIHVpbnQzMl90IHNpemVJbkJ5dGVzOworICAgIC8v
IEJ5dGVzIGFyZSBhbGxvY2F0ZWQgYXQgdGhlIGVuZC4KKyAgICBzdGF0aWMgU2VnbWVudCogbWFr
ZSh1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAg
YXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0Q2FsbG9jKHNpemVvZihTZWdtZW50KSArIHNpemVJbkJ5
dGVzLCAxKTsKKyAgICAgICAgU2VnbWVudCogc2VnbWVudDsKKyAgICAgICAgaWYgKCFhbGxvY2F0
ZWQuZ2V0VmFsdWUoc2VnbWVudCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgc2VnbWVudC0+b2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBzZWdtZW50LT5zaXplSW5CeXRl
cyA9IHNpemVJbkJ5dGVzOworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9CisgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShTZWdtZW50ICpzZWdtZW50KQorICAgIHsKKyAgICAgICAgZmFzdEZy
ZWUoc2VnbWVudCk7CisgICAgfQorICAgIHVpbnQ4X3QmIGJ5dGUodWludDMyX3QgcG9zKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHBvcyA8IHNpemVJbkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSAr
IHNpemVvZihvZmZzZXQpICsgc2l6ZW9mKHNpemVJbkJ5dGVzKSArIHBvcyk7CisgICAgfQorICAg
IHR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPFNlZ21lbnQsIGRlY2x0eXBlKCZTZWdtZW50OjpkZXN0
cm95KT4gUHRyOworICAgIHN0YXRpYyBQdHIgbWFrZVB0cihTZWdtZW50KiBzZWdtZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFB0cihzZWdtZW50LCAmU2VnbWVudDo6ZGVzdHJveSk7CisgICAg
fQorfTsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8U2lnbmF0dXJl
PiBzaWduYXR1cmVzOwpAQCAtMTI1LDYgKzE1Niw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
biB7CiAgICAgTWVtb3J5SW5mb3JtYXRpb24gbWVtb3J5OwogICAgIFZlY3RvcjxFeHBvcnQ+IGV4
cG9ydHM7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2U7CisgICAgVmVjdG9yPFNlZ21lbnQ6OlB0cj4gZGF0YTsKIAogICAgIH5Nb2R1bGVJbmZvcm1h
dGlvbigpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAKaW5kZXggOWRiMDhjOC4uNGU1ZDAwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTE1NywxMiArMTU3LDEyIEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkK
IHsKICAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkK
KyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KQorICAgICAgICB8fCBjb3VudCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKKyAgICAgICAgfHwgIW1fbW9kdWxlLT5z
aWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJjb3VudDogIiwgY291bnQp
OwotICAgIGlmICghbV9tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhTG9nTG4oIiAgY291bnQ6ICIs
IGNvdW50KTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAg
ICAgICAgIGludDhfdCB0eXBlOwpAQCAtMTc1LDE3ICsxNzUsMTUgQEAgYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlVHlwZSgpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkdvdCBmdW5jdGlvbiB0eXBl
LiIpOwogCiAgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oImFyZ3VtZW50Q291
bnQ6ICIsIGFyZ3VtZW50Q291bnQpOwotCiAgICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudFR5
cGVzOwotICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3Vt
ZW50Q291bnQpKQorICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpCisg
ICAgICAgICAgICB8fCBhcmd1bWVudENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKQorICAgICAgICAgICAgfHwgIWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGFyZ3VtZW50Q291bnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiICBhcmd1bWVudCBjb3VudDogIiwg
YXJndW1lbnRDb3VudCk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhcmd1
bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Vt
ZW50Q291bnQ7ICsraSkgewogICAgICAgICAgICAgVHlwZSBhcmd1bWVudFR5cGU7CiAgICAgICAg
ICAgICBpZiAoIXBhcnNlUmVzdWx0VHlwZShhcmd1bWVudFR5cGUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTIxNiwxNCArMjE0LDE0IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpw
YXJzZVR5cGUoKQogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkKIHsKICAgICB1aW50
MzJfdCBpbXBvcnRDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9tb2R1bGUtPmltcG9ydHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdo
ZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbXBv
cnRDb3VudCkKKyAgICAgICAgfHwgaW1wb3J0Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpCisgICAgICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0cy50cnlSZXNlcnZl
Q2FwYWNpdHkoaW1wb3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3
ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICAgICAgfHwgIW1fbW9kdWxlLT5pbXBvcnRGdW5j
dGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSAvLyBGSVhNRSB0aGlzIG92ZXIt
YWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAgICAgICAgIHx8ICFtX2Z1
bmN0aW9uSW5kZXhTcGFjZS50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpKSAvLyBGSVhN
RSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuIFdlJ2xs
IGFsbG9jYXRlIHNvbWUgbW9yZSBoZXJlIHdoZW4gd2Uga25vdyBob3cgbWFueSBmdW5jdGlvbnMg
dG8gZXhwZWN0LgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKHVpbnQzMl90IGlt
cG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciAhPSBpbXBvcnRDb3VudDsgKytpbXBvcnROdW1i
ZXIpIHsKKyAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciA8
IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewogICAgICAgICBJbXBvcnQgaW1wOwogICAg
ICAgICB1aW50MzJfdCBtb2R1bGVMZW47CiAgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwpAQCAt
Mjc4LDEyICsyNzYsMTMgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24oKQogewog
ICAgIHVpbnQzMl90IGNvdW50OwogICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpCisgICAg
ICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQogICAg
ICAgICB8fCAhbV9tb2R1bGUtPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzLnRyeVJlc2VydmVD
YXBhY2l0eShjb3VudCkKICAgICAgICAgfHwgIW1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnRy
eVJlc2VydmVDYXBhY2l0eShjb3VudCkKICAgICAgICAgfHwgIW1fZnVuY3Rpb25JbmRleFNwYWNl
LnRyeVJlc2VydmVDYXBhY2l0eShtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkgKyBjb3VudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgIT0g
Y291bnQ7ICsraSkgeworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CiAgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50
MzIodHlwZU51bWJlcikKICAgICAgICAgICAgIHx8IHR5cGVOdW1iZXIgPj0gbV9tb2R1bGUtPnNp
Z25hdHVyZXMuc2l6ZSgpKQpAQCAtMzc0LDEwICszNzMsMTEgQEAgYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlRXhwb3J0KCkKIHsKICAgICB1aW50MzJfdCBleHBvcnRDb3VudDsKICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGV4cG9ydENvdW50KQorICAgICAgICB8fCBleHBvcnRDb3VudCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKICAgICAgICAgfHwgIW1fbW9kdWxlLT5l
eHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3VudCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVtYmVyID0gMDsgZXhwb3J0TnVtYmVy
ICE9IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgeworICAgIGZvciAodWludDMyX3QgZXhw
b3J0TnVtYmVyID0gMDsgZXhwb3J0TnVtYmVyIDwgZXhwb3J0Q291bnQ7ICsrZXhwb3J0TnVtYmVy
KSB7CiAgICAgICAgIEV4cG9ydCBleHA7CiAgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwogICAg
ICAgICBTdHJpbmcgZmllbGRTdHJpbmc7CkBAIC0zODUsOCArMzg1LDEwIEBAIGJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZUV4cG9ydCgpCiAgICAgICAgICAgICB8fCAhY29uc3VtZVVURjhTdHJpbmco
ZmllbGRTdHJpbmcsIGZpZWxkTGVuKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgZXhwLmZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7
CisKICAgICAgICAgaWYgKCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgc3dpdGNoIChleHAua2luZCkgewogICAgICAgICBj
YXNlIEV4dGVybmFsOjpGdW5jdGlvbjogewogICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
MihleHAuZnVuY3Rpb25JbmRleCkKQEAgLTQ0MCwxMCArNDQyLDExIEBAIGJvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZUNvZGUoKQogewogICAgIHVpbnQzMl90IGNvdW50OwogICAgIGlmICghcGFyc2VW
YXJVSW50MzIoY291bnQpCisgICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKQogICAgICAgICB8fCBjb3VudCAhPSBtX2Z1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeS5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgeworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKICAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpCiAgICAgICAgICAgICB8fCBmdW5jdGlv
blNpemUgPiBsZW5ndGgoKQpAQCAtNDYwLDggKzQ2Myw1NiBAQCBib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VDb2RlKCkKIAogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpCiB7Ci0gICAgLy8g
RklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTcwOQotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdWludDMyX3Qgc2VnbWVudENvdW50
OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KQorICAgICAgICB8fCBzZWdt
ZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCisgICAgICAg
IHx8ICFtX21vZHVsZS0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4o
IiAgc2VnbWVudHM6ICIsIHNlZ21lbnRDb3VudCk7CisKKyAgICBmb3IgKHVpbnQzMl90IHNlZ21l
bnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50OyArK3NlZ21lbnROdW1i
ZXIpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oIiAgc2Vn
bWVudCAjIiwgc2VnbWVudE51bWJlcik7CisgICAgICAgIHVpbnQzMl90IGluZGV4OworICAgICAg
ICB1aW50OF90IG9wY29kZTsKKyAgICAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICAgICB1aW50
OF90IGVuZE9wY29kZTsKKyAgICAgICAgdWludDMyX3QgZGF0YUJ5dGVMZW5ndGg7CisgICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpCisgICAgICAgICAgICB8fCBpbmRleCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBGSVhNRSBhbGxvdyBjb21wbGV4IGlu
aXRfZXhwciBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NzAwCisgICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgaTMyLmNvbnN0IGFzIG9mZnNl
dC4KKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ4KG9wY29kZSkKKyAgICAgICAgICAgIHx8IG9wY29k
ZSAhPSBXYXNtOjpJMzJDb25zdAorICAgICAgICAgICAgfHwgIXBhcnNlVmFyVUludDMyKG9mZnNl
dCkKKyAgICAgICAgICAgIHx8ICFwYXJzZVVJbnQ4KGVuZE9wY29kZSkKKyAgICAgICAgICAgIHx8
IGVuZE9wY29kZSAhPSBXYXNtOjpFbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAgb2Zmc2V0OiAiLCBv
ZmZzZXQpOworCisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpCisg
ICAgICAgICAgICB8fCBkYXRhQnl0ZUxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAgZGF0YSBieXRlczogIiwgZGF0YUJ5dGVM
ZW5ndGgpOworCisgICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjptYWtlKG9mZnNl
dCwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBpZiAoIXNlZ21lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIG1fbW9kdWxlLT5kYXRhLnVuY2hlY2tlZEFwcGVuZChTZWdt
ZW50OjptYWtlUHRyKHNlZ21lbnQpKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9
IDA7IGRhdGFCeXRlIDwgZGF0YUJ5dGVMZW5ndGg7ICsrZGF0YUJ5dGUpIHsKKyAgICAgICAgICAg
IHVpbnQ4X3QgYnl0ZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VVSW50OChieXRlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZWdtZW50LT5ieXRlKGRhdGFC
eXRlKSA9IGJ5dGU7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIiAgICBbIiwgZGF0YUJ5dGUsICJdID0gIiwgc2VnbWVudC0+Ynl0ZShkYXRhQnl0
ZSkpOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKaW5kZXggNTY5ZmJjNi4uNjdkNWUyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMTg3
LDkgKzE4NywyNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogCiBKU1ZhbHVlIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGlmIChKU1dlYkFzc2VtYmx5TWVtb3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2Ut
Pm1lbW9yeSgpKSB7CisgICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGpzTWVtb3J5LT5tZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBhdXRvIHNp
emVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLT5zaXplKCk7CisgICAgICAgIGlmIChtZW1v
cnkpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRh
ID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c2VnbWVudC0+c2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVJbkJ5
dGVzIDwgc2VnbWVudC0+c2l6ZUluQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHNl
Z21lbnQtPm9mZnNldCA+IHNpemVJbkJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBz
ZWdtZW50LT5vZmZzZXQgPiBzaXplSW5CeXRlcyAtIHNlZ21lbnQtPnNpemVJbkJ5dGVzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJEYXRhIHNlZ21lbnQgaW5pdGlh
bGl6ZXMgbWVtb3J5IG91dCBvZiByYW5nZSIpKSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNw
eShtZW1vcnkgKyBzZWdtZW50LT5vZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5z
aXplSW5CeXRlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCiAgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIHN0YXJ0RnVuY3Rpb24gPSBt
X3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKLSAgICAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgUHJv
dG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQo
bnVsbHB0ciwgc3RhcnRGdW5jdGlvbiwgSlNWYWx1ZSgpLCAxLCBudWxscHRyKTsKICAgICAgICAg
c3RhcnRGdW5jdGlvbi0+Y2FsbCh2bSwgJnByb3RvQ2FsbEZyYW1lKTsKLS0gCjIuMTAuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296777</attachid>
            <date>2016-12-09 21:25:03 -0800</date>
            <delta_ts>2016-12-09 23:09:01 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-data-section.patch</filename>
            <type>text/plain</type>
            <size>25097</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA4ZDg0MWFlMzM5YzQzZmFiMTA3ZmMzMDFkN2I5YTQ3NGRkYTg4Y2UzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDkgRGVjIDIwMTYgMTU6NDU6MzcgLTA4MDAKU3ViamVjdDogW1BBVENIXSBkYXRhLXNl
Y3Rpb24KCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjEgKysrKwogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMzQgKysrKystCiBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJs
eUJpbmFyeS5qcyAgICAgICAgICB8ICAxNSArKy0KIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9E
YXRhLmpzICAgICAgICAgICAgICAgICAgIHwgMTM1ICsrKysrKysrKysrKysrKysrKysrKwogSlNU
ZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzICAgICAgICAgfCAgMjYgKysr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAg
MjUgKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oICAgICAgICAg
ICAgfCAgMzIgKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuY3BwICAgIHwgIDkzICsrKysrKysrKystLS0tCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAgICAgICAgICAgICB8ICAyMiArKystCiA5IGZpbGVzIGNoYW5nZWQsIDM3
NiBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDI2NmQzZS4uMmIxOWUzZCAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwy
NiBAQAogMjAxNi0xMi0wOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKKyAg
ICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCBkYXRhIHNlY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHNwZWNpZmllZCBpbiBodHRwczov
L2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFzdGVyL0JpbmFyeUVuY29kaW5n
Lm1kI2RhdGEtc2VjdGlvbgorICAgICAgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgaW50ZXJlc3Rp
bmcgY29ybmVyIGNhc2VzIGFyZSBpbGwtZGVmaW5lZCBieSB0aGUgc3BlYzogaHR0cHM6Ly9naXRo
dWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvODk3CisKKyAgICAgICAgKiB3YXNtL0J1
aWxkZXIuanM6IGNyZWF0ZSBhIGRhdGEgc2VjdGlvbiBmcm9tIEphdmFTY3JpcHQKKyAgICAgICAg
KiB3YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanM6IGFzc2VtYmxlIHRoZSBkYXRhIHNl
Y3Rpb24gaW50byB0aGUgcHJvcGVyIGJpbmFyeSBlbmNvZGluZworICAgICAgICAoY29uc3QuZW1p
dHRlcnMuRGF0YSk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzOiBBZGRlZC4K
KyAgICAgICAgKERhdGFTZWN0aW9uKToKKyAgICAgICAgKERhdGFTZWN0aW9uT2ZmVGhlRW5kKToK
KyAgICAgICAgKERhdGFTZWN0aW9uUGFydGx5T2ZmVGhlRW5kKToKKyAgICAgICAgKERhdGFTZWN0
aW9uRW1wdHlPZmZUaGVFbmQpOgorICAgICAgICAoRGF0YVNlY3Rpb25TZWVuQnlTdGFydCk6Cisg
ICAgICAgICogd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qczogbWFrZSBzdXJlIHRo
ZSBKU09OIHN0cnVjdHVyZSBpcyBmaW5lICh0aGlzIHNhbml0eSBjaGVja3MgYmVmb3JlIGdvaW5n
IHRvIGJpbmFyeSkKKworMjAxNi0xMi0wOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5j
b20+CisKICAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgc3RhcnQgZnVuY3Rp
b24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE1
MAogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9C
dWlsZGVyLmpzCmluZGV4IGExZjgwYjcuLjU5NTE0MTcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCkBAIC01MjMsOCArNTIz
LDM4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBjYXNlICJEYXRhIjoKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RSBpbXBsZW1lbnQgZGF0YSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNzA5Ci0gICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9ICgpID0+IHsgdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbn0iYCk7IH07Cisg
ICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBF
bmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50OiBkYXRhID0+
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuaXNBcnJheShkYXRhKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRhdHVtIG9mIGRhdGEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGRhdHVtKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmdlKGRhdHVtLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKGRhdHVtLCAweGZmKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5k
YXRhLnB1c2goeyBkYXRhOiBkYXRhLCBpbmRleDogMCwgb2Zmc2V0OiAwIH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCB0aGlzU2VnbWVudCA9IHMuZGF0YVtzLmRhdGEubGVuZ3Ro
IC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJ1aWxkZXIg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gZGF0YUJ1aWxk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4OiBpbmRleCA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW5kZXgsIDApOyAv
LyBMaW5lYXIgbWVtb3J5IGluZGV4IG11c3QgYmUgemVybyBpbiBNVlAuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzU2VnbWVudC5pbmRleCA9IGluZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRCdWlsZGVyOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPZmZzZXQ6IG9mZnNldCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRSBhbGxvdyBjb21wbGV4IGluaXRfZXhwciBoZXJlLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQuaXNOdW1iZXIob2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNTZWdtZW50Lm9mZnNldCA9IG9mZnNldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRlcjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50QnVpbGRl
cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhQnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMgYi9KU1Rlc3Rz
L3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwppbmRleCBhODU2YjRkLi5kM2FiNWU1
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwor
KysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwpAQCAtMTU2LDcg
KzE1NiwyMCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgfQogICAgIH0sCiAKLSAgICBE
YXRhOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1l
bnRlZGApOyB9LAorICAgIERhdGE6IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJp
biwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0
IGRhdHVtIG9mIHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQz
MiIsIGRhdHVtLmluZGV4KTsKKyAgICAgICAgICAgIC8vIEZJWE1FIGFsbG93IGNvbXBsZXggaW5p
dF9leHByIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3
MDAKKyAgICAgICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgaTMyLmNvbnN0IGFzIG9m
ZnNldC4KKyAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00uZGVzY3JpcHRpb24ub3Bj
b2RlWyJpMzIuY29uc3QiXS52YWx1ZSk7CisgICAgICAgICAgICBwdXQoYmluLCBXQVNNLmRlc2Ny
aXB0aW9uLm9wY29kZVsiaTMyLmNvbnN0Il0uaW1tZWRpYXRlWzBdLnR5cGUsIGRhdHVtLm9mZnNl
dCk7CisgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmRlc2NyaXB0aW9uLm9wY29k
ZVsiZW5kIl0udmFsdWUpOworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGRhdHVt
LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiBkYXR1bS5kYXRh
KQorICAgICAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIGJ5dGUpOworICAgICAgICB9Cisg
ICAgfSwKIH07CiAKIGV4cG9ydCBjb25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9
PiB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjgwYjVlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfRGF0YS5qcwpAQCAtMCwwICsxLDEzNSBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworY29u
c3QgbWVtU2l6ZUluUGFnZXMgPSAxOworY29uc3QgcGFnZVNpemVJbkJ5dGVzID0gNjQgKiAxMDI0
OworY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7IGluaXRpYWw6IG1lbVNpemVJblBhZ2VzLCBt
YXhpbXVtOiBtZW1TaXplSW5QYWdlcyB9OworCisvLyBGSVhNRSBTb21lIGNvcm5lciBjYXNlcyBh
cmUgaWxsLXNwZWNpZmllZDogaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9p
c3N1ZXMvODk3CisKKyhmdW5jdGlvbiBEYXRhU2VjdGlvbigpIHsKKyAgICBjb25zdCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9y
dCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKS5FbmQoKQorICAg
ICAgICAuRGF0YSgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZmYsIDB4MmFdKS5PZmZzZXQoNCku
RW5kKCkKKyAgICAgICAgICAuU2VnbWVudChbMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pLk9mZnNl
dCgyNCkuRW5kKCkKKyAgICAgICAgICAuU2VnbWVudChbMHhjYSwgMHhmZV0pLk9mZnNldCgyNSku
RW5kKCkgLy8gT3ZlcndyaXRlLgorICAgICAgICAgIC5TZWdtZW50KFtdKS5PZmZzZXQoNCkuRW5k
KCkgLy8gRW1wdHkuCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVt
b3J5RGVzY3JpcHRpb24pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBi
dWZmZXIgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKyAgICBmb3IgKGxldCBpZHgg
PSAwOyBpZHggPCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlczsgKytpZHgpIHsKKyAg
ICAgICAgY29uc3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAgICAgICAgc3dpdGNoIChpZHgpIHsK
KyAgICAgICAgY2FzZSA0OiBhc3NlcnQuZXEodmFsdWUsIDB4ZmYpOyBicmVhazsKKyAgICAgICAg
Y2FzZSA1OiBhc3NlcnQuZXEodmFsdWUsIDB4MmEpOyBicmVhazsKKyAgICAgICAgY2FzZSAyNDog
YXNzZXJ0LmVxKHZhbHVlLCAweGRlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMjU6IGFzc2VydC5l
cSh2YWx1ZSwgMHhjYSk7IGJyZWFrOworICAgICAgICBjYXNlIDI2OiBhc3NlcnQuZXEodmFsdWUs
IDB4ZmUpOyBicmVhazsKKyAgICAgICAgY2FzZSAyNzogYXNzZXJ0LmVxKHZhbHVlLCAweGVmKTsg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydC5lcSh2YWx1ZSwgMHgwMCk7IGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIERhdGFTZWN0aW9uT2ZmVGhlRW5k
KCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5
RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5EYXRhKCkKKyAgICAgICAgICAuU2VnbWVudChb
MHhmZl0pLk9mZnNldChtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlcykuRW5kKCkKKyAg
ICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pLCBSYW5nZUVycm9yLCBgRGF0YSBzZWdtZW50
IGluaXRpYWxpemVzIG1lbW9yeSBvdXQgb2YgcmFuZ2VgKTsKKyAgICBjb25zdCBidWZmZXIgPSBu
ZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKyAgICBmb3IgKGxldCBpZHggPSAwOyBpZHgg
PCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlczsgKytpZHgpIHsKKyAgICAgICAgY29u
c3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAgICAgICAgYXNzZXJ0LmVxKHZhbHVlLCAweDAwKTsK
KyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gRGF0YVNlY3Rpb25QYXJ0bHlPZmZUaGVFbmQoKSB7
CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNj
cmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsweGZm
LCAweGZmXSkuT2Zmc2V0KG1lbVNpemVJblBhZ2VzICogcGFnZVNpemVJbkJ5dGVzIC0gMSkuRW5k
KCkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlw
dGlvbik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pLCBSYW5nZUVycm9yLCBgRGF0YSBz
ZWdtZW50IGluaXRpYWxpemVzIG1lbW9yeSBvdXQgb2YgcmFuZ2VgKTsKKyAgICBjb25zdCBidWZm
ZXIgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKyAgICBmb3IgKGxldCBpZHggPSAw
OyBpZHggPCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlczsgKytpZHgpIHsKKyAgICAg
ICAgY29uc3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAgICAgICAgYXNzZXJ0LmVxKHZhbHVlLCAw
eDAwKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gRGF0YVNlY3Rpb25FbXB0eU9mZlRoZUVu
ZCgpIHsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9y
eURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRGF0YSgpCisgICAgICAgICAgLlNlZ21lbnQo
W10pLk9mZnNldChtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXplSW5CeXRlcykuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGlt
cDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFy
cmF5KG1lbW9yeS5idWZmZXIpOworICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG1lbVNpemVJ
blBhZ2VzICogcGFnZVNpemVJbkJ5dGVzOyArK2lkeCkgeworICAgICAgICBjb25zdCB2YWx1ZSA9
IGJ1ZmZlcltpZHhdOworICAgICAgICBhc3NlcnQuZXEodmFsdWUsIDB4MDApOworICAgIH0KK30p
KCk7CisKKyhmdW5jdGlvbiBEYXRhU2VjdGlvblNlZW5CeVN0YXJ0KCkgeworICAgIGNvbnN0IG9m
ZnNldCA9IDEwMjQ7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgi
aW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuU3RhcnQoImZvbyIpLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KG9mZnNldCkKKyAgICAgICAgICAgICAgICAuSTMy
TG9hZDhVKDIsIDApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkgLy8gQ2FsbHMgZnVuYygoaTgu
bG9hZChvZmZzZXQpLCBhbGlnbj0yLCBvZmZzZXQ9MCkuIFRoaXMgc2hvdWxkIG9ic2VydmUgMHhm
ZiBhcyBzZXQgYnkgdGhlIGRhdGEgc2VjdGlvbi4KKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsweGZmXSkuT2Zm
c2V0KG9mZnNldCkuRW5kKCkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9y
eShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgbGV0IHZhbHVlID0gMDsKKyAgICBjb25zdCBzZXR0
ZXIgPSB2ID0+IHZhbHVlID0gdjsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZSgKKyAgICAgICAgbW9kdWxlLAorICAgICAgICB7CisgICAgICAgICAgICBpbXA6
IHsKKyAgICAgICAgICAgICAgICBtZW1vcnk6IG1lbW9yeSwKKyAgICAgICAgICAgICAgICBmdW5j
OiBzZXR0ZXIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgYXNzZXJ0LmVxKHZhbHVl
LCAweGZmKTsKKyAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVy
KTsKKyAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBtZW1TaXplSW5QYWdlcyAqIHBhZ2VTaXpl
SW5CeXRlczsgKytpZHgpIHsKKyAgICAgICAgY29uc3QgdmFsdWUgPSBidWZmZXJbaWR4XTsKKyAg
ICAgICAgaWYgKGlkeCA9PSBvZmZzZXQpCisgICAgICAgICAgICBhc3NlcnQuZXEodmFsdWUsIDB4
ZmYpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnQuZXEodmFsdWUsIDB4MDApOwor
ICAgIH0KK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVp
bGRlckpTT04uanMgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMK
aW5kZXggYjM5MjllYy4uZDFjMGNhNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJKU09OLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9C
dWlsZGVySlNPTi5qcwpAQCAtNjE5LDYgKzYxOSw3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0g
KG9wRm4sIG1lc3NhZ2UpID0+IHsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZS5sZW5ndGgsIDYpOwogICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
WzNdLm5hbWUsICJzZWxlY3QiKTsKIH0pKCk7CisvLyBGSVhNRSB0ZXN0IHR5cGUgbWlzbWF0Y2gg
d2l0aCBzZWxlY3QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMy
NjcKIAogKGZ1bmN0aW9uIE1lbW9yeUltcG9ydCgpIHsKICAgICBjb25zdCBidWlsZGVyID0gKG5l
dyBCdWlsZGVyKCkpCkBAIC02MzksNCArNjQwLDI3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0g
KG9wRm4sIG1lc3NhZ2UpID0+IHsKICAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFb
MF0ubWVtb3J5RGVzY3JpcHRpb24ubWF4aW11bSwgMzEpOwogfSkoKTsKIAotLy8gRklYTUUgdGVz
dCB0eXBlIG1pc21hdGNoIHdpdGggc2VsZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzMjY3CisoZnVuY3Rpb24gRGF0YVNlY3Rpb24oKSB7CisgICAgY29uc3Qg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBh
Z2VzKDY0LCA2NCkuRW5kKCkKKyAgICAgICAgLkRhdGEoKQorICAgICAgICAgIC5TZWdtZW50KFsw
eGZmLCAweDJhXSkuT2Zmc2V0KDQpLkVuZCgpCisgICAgICAgICAgLlNlZ21lbnQoWzB4ZGUsIDB4
YWQsIDB4YmUsIDB4ZWZdKS5JbmRleCgwKS5PZmZzZXQoMjQpLkVuZCgpCisgICAgICAgIC5FbmQo
KTsKKyAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShidWlsZGVyLmpzb24oKSk7CisgICAgYXNz
ZXJ0LmVxKGpzb24uc2VjdGlvbi5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rp
b25bMV0ubmFtZSwgIkRhdGEiKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGEu
bGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0uaW5kZXgs
IDApOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5vZmZzZXQsIDQpOwor
ICAgIGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5kYXRhLmxlbmd0aCwgMik7Cisg
ICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLmRhdGFbMF0sIDB4ZmYpOworICAg
IGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5kYXRhWzFdLCAweDJhKTsKKyAgICBh
c3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMV0uaW5kZXgsIDApOworICAgIGFzc2VydC5l
cShqc29uLnNlY3Rpb25bMV0uZGF0YVsxXS5vZmZzZXQsIDI0KTsKKyAgICBhc3NlcnQuZXEoanNv
bi5zZWN0aW9uWzFdLmRhdGFbMV0uZGF0YS5sZW5ndGgsIDQpOworICAgIGFzc2VydC5lcShqc29u
LnNlY3Rpb25bMV0uZGF0YVsxXS5kYXRhWzBdLCAweGRlKTsKKyAgICBhc3NlcnQuZXEoanNvbi5z
ZWN0aW9uWzFdLmRhdGFbMV0uZGF0YVsxXSwgMHhhZCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2Vj
dGlvblsxXS5kYXRhWzFdLmRhdGFbMl0sIDB4YmUpOworICAgIGFzc2VydC5lcShqc29uLnNlY3Rp
b25bMV0uZGF0YVsxXS5kYXRhWzNdLCAweGVmKTsKK30pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwppbmRleCA5MDJlOGNhLi43ZTQxMzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxNi0xMi0wOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCBkYXRhIHNlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY5NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHNwZWNpZmllZCBpbiBo
dHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFzdGVyL0JpbmFyeUVu
Y29kaW5nLm1kI2RhdGEtc2VjdGlvbgorICAgICAgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgaW50
ZXJlc3RpbmcgY29ybmVyIGNhc2VzIGFyZSBpbGwtZGVmaW5lZCBieSB0aGUgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvODk3CisKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDogc2VnbWVudHMgYXJlIHdoYXQgcmVwcmVzZW50IHNlY3Rpb25zIG9m
IG1lbW9yeSB0byBpbml0aWFsaXplIChzaW1pbGFyIHRvIEVMRidzIG5vbi16ZXJvIGludGlhbGl6
ZXIgZGF0YSAvIHJvZGF0YSkKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VnbWVudDo6bWFrZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlNlZ21lbnQ6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWdtZW50OjpieXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VnbWVudDo6bWFrZVB0cik6
CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDogcGFyc2UgdGhlIGRhdGEgc2Vj
dGlvbiwgYW5kIHByZXZlbnQgYSBmZXcgb3ZlcmZsb3dzIGlmIGEgdXNlciBwYXNzZXMgaW4gVUlO
VF9NQVggKHRoZSBsb29wcyB3b3VsZCBvdmVyZmxvdykKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlUGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6
CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZURhdGEpOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6ZXZhbHVhdGUpOiB0aGUgb25seSBzZW5zaWJsZSB0aW1lIHRvIGluaXRpYWxp
emUgdGhlIGRhdGEgc2VjdGlvbiBpcyBhZnRlciBsaW5raW5nLCBidXQgYmVmb3JlIGNhbGxpbmcg
c3RhcnQsIEkgdGVzdCBmb3IgdGhpcyBidXQgdGhlIHNwZWMgaXNuJ3QgY2xlYXIgaXQncyBjb3Jy
ZWN0IHlldAorCiAyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTiAocjIwOTU1NC0yMDk1NzEpOiBzdHJlc3MvcG9seS1zZXR0ZXIt
Y29tYm8gY3Jhc2hpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRl
eCBmMDQzNTE5Li40ZjRjZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgi
CiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKKyNpbmNs
dWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTExNCw2ICsxMTYsMzUg
QEAgc3RydWN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSB7CiAgICAgc2l6ZV90IGVuZDsKIH07
CiAKK3N0cnVjdCBTZWdtZW50IHsKKyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgdWludDMyX3Qg
c2l6ZUluQnl0ZXM7CisgICAgLy8gQnl0ZXMgYXJlIGFsbG9jYXRlZCBhdCB0aGUgZW5kLgorICAg
IHN0YXRpYyBTZWdtZW50KiBtYWtlKHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZUluQnl0
ZXMpCisgICAgeworICAgICAgICBhdXRvIGFsbG9jYXRlZCA9IHRyeUZhc3RDYWxsb2Moc2l6ZW9m
KFNlZ21lbnQpICsgc2l6ZUluQnl0ZXMsIDEpOworICAgICAgICBTZWdtZW50KiBzZWdtZW50Owor
ICAgICAgICBpZiAoIWFsbG9jYXRlZC5nZXRWYWx1ZShzZWdtZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICBzZWdtZW50LT5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
IHNlZ21lbnQtPnNpemVJbkJ5dGVzID0gc2l6ZUluQnl0ZXM7CisgICAgICAgIHJldHVybiBzZWdt
ZW50OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KFNlZ21lbnQgKnNlZ21lbnQpCisg
ICAgeworICAgICAgICBmYXN0RnJlZShzZWdtZW50KTsKKyAgICB9CisgICAgdWludDhfdCYgYnl0
ZSh1aW50MzJfdCBwb3MpCisgICAgeworICAgICAgICBBU1NFUlQocG9zIDwgc2l6ZUluQnl0ZXMp
OworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZW9mKG9mZnNldCkgKyBzaXplb2Yoc2l6ZUluQnl0ZXMp
ICsgcG9zKTsKKyAgICB9CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8U2VnbWVudCwgZGVj
bHR5cGUoJlNlZ21lbnQ6OmRlc3Ryb3kpPiBQdHI7CisgICAgc3RhdGljIFB0ciBtYWtlUHRyKFNl
Z21lbnQqIHNlZ21lbnQpCisgICAgeworICAgICAgICByZXR1cm4gUHRyKHNlZ21lbnQsICZTZWdt
ZW50OjpkZXN0cm95KTsKKyAgICB9Cit9OwogCiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewog
ICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXM7CkBAIC0xMjUsNiArMTU2LDcgQEAgc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CiAg
ICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBWZWN0b3I8U2VnbWVudDo6UHRyPiBkYXRhOwog
CiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA5ZGIwOGM4Li40ZTVkMDBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAt
MTU3LDEyICsxNTcsMTIgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKIGJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZVR5cGUoKQogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFy
c2VWYXJVSW50MzIoY291bnQpKQorICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpCisgICAg
ICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQorICAg
ICAgICB8fCAhbV9tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9n
TG4oImNvdW50OiAiLCBjb3VudCk7Ci0gICAgaWYgKCFtX21vZHVsZS0+c2lnbmF0dXJlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRh
dGFMb2dMbigiICBjb3VudDogIiwgY291bnQpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgaW50OF90IHR5cGU7CkBAIC0xNzUsMTcgKzE3NSwx
NSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKICAgICAgICAgICAgIGRhdGFMb2dM
bigiR290IGZ1bmN0aW9uIHR5cGUuIik7CiAKICAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3Vu
dDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiYXJndW1lbnRDb3VudDogIiwgYXJndW1lbnRDb3VudCk7Ci0KICAgICAgICAgVmVj
dG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGlmICghYXJndW1lbnRUeXBlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCisgICAgICAgIGlmICghcGFyc2VWYXJVSW50
MzIoYXJndW1lbnRDb3VudCkKKyAgICAgICAgICAgIHx8IGFyZ3VtZW50Q291bnQgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCisgICAgICAgICAgICB8fCAhYXJndW1lbnRU
eXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCIg
IGFyZ3VtZW50IGNvdW50OiAiLCBhcmd1bWVudENvdW50KTsKIAotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgICAgICBUeXBlIGFy
Z3VtZW50VHlwZTsKICAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGFyZ3VtZW50VHlw
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE2LDE0ICsyMTQsMTQgQEAg
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpCiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJ
bXBvcnQoKQogewogICAgIHVpbnQzMl90IGltcG9ydENvdW50OwotICAgIGlmICghcGFyc2VWYXJV
SW50MzIoaW1wb3J0Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX21v
ZHVsZS0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpIC8vIEZJWE1FIHRo
aXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KQorICAgICAgICB8fCBpbXBvcnRDb3VudCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKKyAgICAgICAgfHwgIW1fbW9kdWxl
LT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBv
dmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgogICAgICAgICB8fCAh
bV9tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQp
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KICAgICAgICAgfHwgIW1fZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCkpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhl
IEZJWE1FcyBiZWxvdy4gV2UnbGwgYWxsb2NhdGUgc29tZSBtb3JlIGhlcmUgd2hlbiB3ZSBrbm93
IGhvdyBtYW55IGZ1bmN0aW9ucyB0byBleHBlY3QuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyICE9IGltcG9y
dENvdW50OyArK2ltcG9ydE51bWJlcikgeworICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVy
ID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAg
ICAgIEltcG9ydCBpbXA7CiAgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKICAgICAgICAgdWlu
dDMyX3QgZmllbGRMZW47CkBAIC0yNzgsMTIgKzI3NiwxMyBAQCBib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbigpCiB7CiAgICAgdWludDMyX3QgY291bnQ7CiAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihjb3VudCkKKyAgICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpCiAgICAgICAgIHx8ICFtX21vZHVsZS0+aW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KQogICAgICAgICB8fCAhbV9mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KQogICAgICAgICB8fCAh
bV9mdW5jdGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fZnVuY3Rpb25JbmRleFNw
YWNlLnNpemUoKSArIGNvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKQogICAgICAgICAgICAgfHwgdHlwZU51
bWJlciA+PSBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCkBAIC0zNzQsMTAgKzM3MywxMSBA
QCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKQogewogICAgIHVpbnQzMl90IGV4cG9y
dENvdW50OwogICAgIGlmICghcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpCisgICAgICAgIHx8
IGV4cG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQogICAg
ICAgICB8fCAhbV9tb2R1bGUtPmV4cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1i
ZXIgPSAwOyBleHBvcnROdW1iZXIgIT0gZXhwb3J0Q291bnQ7ICsrZXhwb3J0TnVtYmVyKSB7Cisg
ICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRD
b3VudDsgKytleHBvcnROdW1iZXIpIHsKICAgICAgICAgRXhwb3J0IGV4cDsKICAgICAgICAgdWlu
dDMyX3QgZmllbGRMZW47CiAgICAgICAgIFN0cmluZyBmaWVsZFN0cmluZzsKQEAgLTM4NSw4ICsz
ODUsMTAgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkKICAgICAgICAgICAgIHx8
ICFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBleHAuZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KG1fdm0sIGZpZWxkU3RyaW5nKTsKKwogICAgICAgICBpZiAoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4
cC5raW5kKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBzd2l0Y2ggKGV4
cC5raW5kKSB7CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGV4cC5mdW5jdGlvbkluZGV4KQpAQCAtNDQwLDEwICs0NDIs
MTEgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpCiB7CiAgICAgdWludDMyX3QgY291
bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkKKyAgICAgICAgfHwgY291bnQgPT0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCiAgICAgICAgIHx8IGNvdW50ICE9
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgZnVu
Y3Rpb25TaXplOwogICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkKICAg
ICAgICAgICAgIHx8IGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpCkBAIC00NjAsOCArNDYzLDU2IEBA
IGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKQogCiBib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VEYXRhKCkKIHsKLSAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYxNzA5Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB1
aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpCisgICAgICAgIHx8IHNlZ21lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkKKyAgICAgICAgfHwgIW1fbW9kdWxlLT5kYXRhLnRyeVJlc2VydmVDYXBhY2l0
eShzZWdtZW50Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2dMbigiICBzZWdtZW50czogIiwgc2VnbWVudENvdW50KTsKKworICAg
IGZvciAodWludDMyX3Qgc2VnbWVudE51bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBzZWdtZW50
Q291bnQ7ICsrc2VnbWVudE51bWJlcikgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2dMbigiICBzZWdtZW50ICMiLCBzZWdtZW50TnVtYmVyKTsKKyAgICAgICAgdWlu
dDMyX3QgaW5kZXg7CisgICAgICAgIHVpbnQ4X3Qgb3Bjb2RlOworICAgICAgICB1aW50MzJfdCBv
ZmZzZXQ7CisgICAgICAgIHVpbnQ4X3QgZW5kT3Bjb2RlOworICAgICAgICB1aW50MzJfdCBkYXRh
Qnl0ZUxlbmd0aDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkKKyAgICAgICAg
ICAgIHx8IGluZGV4KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEZJ
WE1FIGFsbG93IGNvbXBsZXggaW5pdF9leHByIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU3MDAKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IGhhbmRs
ZSBpMzIuY29uc3QgYXMgb2Zmc2V0LgorICAgICAgICBpZiAoIXBhcnNlVUludDgob3Bjb2RlKQor
ICAgICAgICAgICAgfHwgb3Bjb2RlICE9IFdhc206OkkzMkNvbnN0CisgICAgICAgICAgICB8fCAh
cGFyc2VWYXJVSW50MzIob2Zmc2V0KQorICAgICAgICAgICAgfHwgIXBhcnNlVUludDgoZW5kT3Bj
b2RlKQorICAgICAgICAgICAgfHwgZW5kT3Bjb2RlICE9IFdhc206OkVuZCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
TG4oIiAgICBvZmZzZXQ6ICIsIG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
MihkYXRhQnl0ZUxlbmd0aCkKKyAgICAgICAgICAgIHx8IGRhdGFCeXRlTGVuZ3RoID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBkYXRh
IGJ5dGVzOiAiLCBkYXRhQnl0ZUxlbmd0aCk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9
IFNlZ21lbnQ6Om1ha2Uob2Zmc2V0LCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAgIGlmICghc2Vn
bWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9tb2R1bGUtPmRhdGEu
dW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6Om1ha2VQdHIoc2VnbWVudCkpOworICAgICAgICBmb3Ig
KHVpbnQzMl90IGRhdGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRh
Qnl0ZSkgeworICAgICAgICAgICAgdWludDhfdCBieXRlOworICAgICAgICAgICAgaWYgKCFwYXJz
ZVVJbnQ4KGJ5dGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHNlZ21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiICAgIFsiLCBkYXRhQnl0ZSwgIl0gPSAiLCBz
ZWdtZW50LT5ieXRlKGRhdGFCeXRlKSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCA1NjlmYmM2Li42N2Q1ZTIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCkBAIC0xODcsOSArMTg3LDI3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
CiAKIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKEpTV2ViQXNzZW1ibHlNZW1vcnkqIGpz
TWVtb3J5ID0gbV9pbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgdWludDhfdCogbWVtb3J5
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLT5tZW1vcnko
KSk7CisgICAgICAgIGF1dG8gc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCktPnNpemUo
KTsKKyAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFdhc206
OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtX2luc3RhbmNlLT5tb2R1bGUoKS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5kYXRhOworICAgICAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogZGF0YSkgewor
ICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LT5zaXplSW5CeXRlcykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoc2l6ZUluQnl0ZXMgPCBzZWdtZW50LT5zaXplSW5CeXRlcworICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgc2VnbWVudC0+b2Zmc2V0ID4gc2l6ZUluQnl0ZXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHNlZ21lbnQtPm9mZnNldCA+IHNpemVJbkJ5dGVzIC0gc2VnbWVu
dC0+c2l6ZUluQnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwo
IkRhdGEgc2VnbWVudCBpbml0aWFsaXplcyBtZW1vcnkgb3V0IG9mIHJhbmdlIikpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KG1lbW9yeSArIHNlZ21lbnQtPm9mZnNldCwgJnNlZ21lbnQt
PmJ5dGUoMCksIHNlZ21lbnQtPnNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlv
biogc3RhcnRGdW5jdGlvbiA9IG1fc3RhcnRGdW5jdGlvbi5nZXQoKSkgewotICAgICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICAgICAg
cHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBzdGFydEZ1bmN0aW9uLCBKU1ZhbHVlKCksIDEs
IG51bGxwdHIpOwogICAgICAgICBzdGFydEZ1bmN0aW9uLT5jYWxsKHZtLCAmcHJvdG9DYWxsRnJh
bWUpOwotLSAKMi4xMC4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>