<?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>5862</bug_id>
          
          <creation_ts>2005-11-28 17:21:33 -0800</creation_ts>
          <short_desc>feDisplacementMap filter is not implemented</short_desc>
          <delta_ts>2006-02-25 14:23:45 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>5857</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>24796</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-28 17:21:33 -0800</bug_when>
    <thetext> </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31893</commentid>
    <comment_count>1</comment_count>
      <attachid>6352</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-08 18:10:45 -0800</bug_when>
    <thetext>Created attachment 6352
First patch for displacement mapping

Okay this is the first version of the feDisplacementMap implementation.  Filter should be correct (per logic + quartz composer) however it&apos;s difficult to validate given test case (http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-filters-displace-01-f.html) fails to render the inputs correctly, let alone the output.  That said sphere map appears to be doing correct thing on page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31894</commentid>
    <comment_count>2</comment_count>
      <attachid>6353</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-08 18:10:46 -0800</bug_when>
    <thetext>Created attachment 6353
First patch for displacement mapping

Okay this is the first version of the feDisplacementMap implementation.  Filter should be correct (per logic + quartz composer) however it&apos;s difficult to validate given test case (http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-filters-displace-01-f.html) fails to render the inputs correctly, let alone the output.  That said sphere map appears to be doing correct thing on page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31895</commentid>
    <comment_count>3</comment_count>
      <attachid>6354</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-08 18:29:22 -0800</bug_when>
    <thetext>Created attachment 6354
Formatting changes

Damn formatting changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31897</commentid>
    <comment_count>4</comment_count>
      <attachid>6354</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-08 18:49:49 -0800</bug_when>
    <thetext>Comment on attachment 6354
Formatting changes

This patch looks fine.

Ideally, we would want to remove the data duplication in the kcanvas objects, by making the KCanvasFEDisplacementMap object just fetch its needed data off of it&apos;s element() instead of storing a second copy locally.

Also, there are a couple tabs in the cikernel file which need to be fixed before we land.

also XChannelSelector() and m_XChannelSelector should be xChannelSelector() and m_xChannelSelector per our style guidelines.  (Or just completely removed per my above comment)

It also doesn&apos;t look like KCanvasFEDisplacementMap has a default constructor which sets things to sane default values (also unecessary if its data members are removed)

getVectorForChannel could be done using an array of floats of 0&apos;s, followed by setting one at the correct offset to 1 and returning.  Your method is also totally fine.

Since you don&apos;t have commit bit, I&apos;m going to mark this as r-.  If you did, it would be find to land, making those tweaks as you landed.  This does not need another review, but a final patch should be posted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31986</commentid>
    <comment_count>5</comment_count>
      <attachid>6375</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-09 18:40:43 -0800</bug_when>
    <thetext>Created attachment 6375
A few more formatting changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31995</commentid>
    <comment_count>6</comment_count>
      <attachid>6375</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-09 21:07:47 -0800</bug_when>
    <thetext>Comment on attachment 6375
A few more formatting changes

Fabulous, as always. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32181</commentid>
    <comment_count>7</comment_count>
      <attachid>6417</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-11 17:46:47 -0800</bug_when>
    <thetext>Created attachment 6417
Fixed filter kernel

oops... correct the kernel so it works when the dispalcement map isn&apos;t completely symmetrical :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32182</commentid>
    <comment_count>8</comment_count>
      <attachid>6417</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-11 17:55:52 -0800</bug_when>
    <thetext>Comment on attachment 6417
Fixed filter kernel

great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32183</commentid>
    <comment_count>9</comment_count>
      <attachid>6417</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-11 18:00:02 -0800</bug_when>
    <thetext>Comment on attachment 6417
Fixed filter kernel

Hum... doens&apos;t apply cleanly though.  Let&apos;s get one more patch.  And I&apos;ll land your test case at that time too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32186</commentid>
    <comment_count>10</comment_count>
      <attachid>6418</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-11 19:00:47 -0800</bug_when>
    <thetext>Created attachment 6418
Updated to patch against ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32187</commentid>
    <comment_count>11</comment_count>
      <attachid>6419</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-11 19:01:43 -0800</bug_when>
    <thetext>Created attachment 6419
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32188</commentid>
    <comment_count>12</comment_count>
      <attachid>6420</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-11 19:02:27 -0800</bug_when>
    <thetext>Created attachment 6420
displacement map for testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32189</commentid>
    <comment_count>13</comment_count>
      <attachid>6421</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-02-11 19:03:24 -0800</bug_when>
    <thetext>Created attachment 6421
Source image for testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32227</commentid>
    <comment_count>14</comment_count>
      <attachid>6418</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-12 04:57:17 -0800</bug_when>
    <thetext>Comment on attachment 6418
Updated to patch against ToT

Looks good.  Lets land this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6352</attachid>
            <date>2006-02-08 18:10:45 -0800</date>
            <delta_ts>2006-02-08 18:29:22 -0800</delta_ts>
            <desc>First patch for displacement mapping</desc>
            <filename>displacementmap.patch</filename>
            <type>text/plain</type>
            <size>27389</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNjY5KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNiAr
NDI1LDExIEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1
OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4MjQ1
RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4c2x0
LmR5bGliICovOyB9OworCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
ICovOyB9OworCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tICovOyB9
OworCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKKwkJQTc2MzhBOTcwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmggKi87IH07CisJCUE3NjM4QTk4MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0EwOTczNzRGNjAw
RDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MTM2OUNCMDk3Mzc0RjYwMEQ3NDQ2MyAv
KiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudElt
cGwuaCAqLzsgfTsKQEAgLTEyNjYsNiArMTI3MSwxMSBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAx
RTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE4QTA5
OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE5
NjA5OTU5NjVEMDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMEUzOTMw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEw
RTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNUcmVlRGVi
dWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0RvY3VtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0yNzMxLDYgKzI3NDEsOCBAQAogCQkJCUE4QzBGODQyMDg5NzAxRjMwMEJBNTExNCAvKiBT
VkdFbGxpcHNlRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0NTA4OTcwMUYzMDBCQTUxMTQg
LyogU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ2
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oICov
LAorCQkJCUE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmggKi8sCisJCQkJQTc2MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ3MDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ4MDg5NzAx
RjMwMEJBNTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0OTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnRJbXBsLmNwcCAqLywKQEAg
LTMwMDEsNiArMzAxMyw5IEBACiAJCUE4QzMyOTFGMDkzQkI3MzIwMDBCOUNBQyAvKiBmaWx0ZXJz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzYzOEE4
OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLywKKwkJCQlB
NzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLywK
KwkJCQlBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgKi8sCiAJCQkJQThDMzI5MjAwOTNCQjczMjAwMEI5Q0FDIC8qIFdLQXJpdGhtZXRp
Y0ZpbHRlci5jaWtlcm5lbCAqLywKIAkJCQlBOEMzMjkyMTA5M0JCNzMyMDAwQjlDQUMgLyogV0tB
cml0aG1ldGljRmlsdGVyLmggKi8sCiAJCQkJQThDMzI5MjIwOTNCQjczMjAwMEI5Q0FDIC8qIFdL
QXJpdGhtZXRpY0ZpbHRlci5tICovLApAQCAtNDM2Miw2ICs0Mzc3LDggQEAKIAkJCQlCQzZCN0VD
RjA5OThBQzdGMDA1Mjg2N0IgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
ODJBMTQwMDk5OTlDRDYwMEJFRUI2RCAvKiBRU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTgyQTE2MDA5OTk5RDZEMDBCRUVCNkQgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc2MzhBOEIwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzYzOEE5NzA5OTU5NjVEMDAwN0UxNEYgLyogU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NTI3LDYg
KzQ1NDQsNyBAQAogCQkJCUJDRUE0NzlDMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nwcm9wZXJ0aWVz
LmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VBNDc5RjA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
dmFsdWVzLmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0M4Q0ZDRDA5ODZDRDI0MDAxNDBCRjIg
LyogQ29sb3JEYXRhLmdwZXJmIGluIFJlc291cmNlcyAqLywKKwkJCQlBNzYzOEE5MjA5OTU5MkMz
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNTQ2NCw2ICs1NDgyLDggQEAKIAkJCQk2NTgyQTE3ODA5OTk5RUEwMDBCRUVCNkQg
LyogUVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMjE1NEVFMDk5QTExQTgwMDM0M0RG
OCAvKiBKU0RPTUNvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMTU0RUYwOTlBMTFBODAw
MzQzREY4IC8qIEpTRE9NRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NjM4QThDMDk5
NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tIGluIFNvdXJjZXMgKi8s
CisJCQkJQTc2MzhBOTgwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTI2NjkpCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDcgKzI1NSw3IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZp
Y2VRdWEKICAgICBjYXNlIEZFX0NPTVBPU0lURTogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb21wb3Np
dGVRdWFydHooKTsKIC8vICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCiAgICAgY2FzZSBGRV9E
SUZGVVNFX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
eigpOwotLy8gIGNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCisgICAgY2FzZSBGRV9ESVNQTEFD
RU1FTlRfTUFQOiByZXR1cm4gbmV3IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0eigpOwog
ICAgIGNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKICAg
ICBjYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVy
UXVhcnR6KCk7CiAgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVJbWFnZVF1
YXJ0eigpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5oCShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBR
dWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFTWVyZ2VRdWFydHogOiBwdWJsaWMg
S0NhbnZhc0ZFTWVyZ2UgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5jaWtlcm5lbAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisvKgorICogUGVy
Zm9ybXMgdGhlIHRyYW5zZm9ybWF0aW9uOgorICogUCcoeCx5KSA8LSBQKCB4ICsgc2NhbGUgKiAo
WEMoeCx5KSAtIC41KSwgeSArIHNjYWxlICogKFlDKHgseSkgLSAuNSkpCisgKgorICogeC95Y2hh
bm5lbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaGFubmVs
IGZvciB4IGFuZAorICogeSBkaXNwbGFjZW1lbnQuICBIZW5jZSBlYWNoIHZlY3RvciBzaG91bGQg
aGF2ZSBvbmx5IG9uZSBub24temVybyBlbGVtZW50LAorICogd2hpY2ggc2hvdWxkIGhhdmUgdGhl
IHZhbHVlIDEuMC4KKyAqLworCitrZXJuZWwgdmVjNCBkaXNwbGFjZW1lbnRNYXAoc2FtcGxlciBp
bWFnZSwgc2FtcGxlciBtYXAsIHZlYzQgeGNoYW5uZWwsIHZlYzQgeWNoYW5uZWwsIGZsb2F0IHNj
YWxlKQoreworCXZlYzIgc2FtcGxlUG9zID0gc2FtcGxlckNvb3JkKGltYWdlKTsKKwl2ZWM0IFhD
WUMgPSBzYW1wbGUobWFwLCBzYW1wbGVQb3MvMi4wKTsKKwlmbG9hdCB4YyA9IGRvdChYQ1lDLCB4
Y2hhbm5lbCk7CisJZmxvYXQgeWMgPSBkb3QoWENZQywgeWNoYW5uZWwpOworCXNhbXBsZVBvcy54
ICs9IHNjYWxlKih4Yy0wLjUpOworCXNhbXBsZVBvcy55ICs9IHNjYWxlKih5Yy0wLjUpOworCXJl
dHVybiBzYW1wbGUoaW1hZ2UsIHNhbXBsZVBvcyk7Cit9CkluZGV4OiBrY2FudmFzL2RldmljZS9x
dWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgJKHJl
dmlzaW9uIDApCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZh
Y2UgV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlu
cHV0SW1hZ2U7CisgICAgQ0lJbWFnZSAgKmlucHV0RGlzcGxhY2VtZW50TWFwOworICAgIENJVmVj
dG9yICppbnB1dFhDaGFubmVsU2VsZWN0b3I7CisgICAgQ0lWZWN0b3IgKmlucHV0WUNoYW5uZWxT
ZWxlY3RvcjsKKyAgICBOU051bWJlciAqaW5wdXRTY2FsZTsKK30KKworQGVuZApJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1h
cEZpbHRlci5tCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS0Rpc3BsYWNlbWVudE1hcEZpbHRl
ci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKmRpc3BsYWNlbWVudE1hcEZpbHRlciA9IG5pbDsKKwor
QGltcGxlbWVudGF0aW9uIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlh
bGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlciIgIAorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6c2VsZgorICAg
ICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgRGlzcGxhY2Vt
ZW50IE1hcCBGaWx0ZXIiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6a0NJQ2F0ZWdvcnlTdHlsaXpl
LCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5
U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRl
RmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6MS4wIFk6MC4wIFo6MC4wIFc6MC4wXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlucHV0WENoYW5uZWxTZWxl
Y3RvciIsICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAuMCBZOjEuMCBaOjAuMCBXOjAuMF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1dFlDaGFubmVsU2VsZWN0b3IiLCAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0
cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlw
ZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxd
LCBAImlucHV0U2NhbGUiLAorICAgICAgICAgICAgICAgICAgICAgbmlsXV07Cit9CisKKysgKENJ
RmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBb
W1tzZWxmIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAg
ICBpZiAoIWRpc3BsYWNlbWVudE1hcEZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3Ry
aW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAg
ICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOwor
ICAgICAgICBkaXNwbGFjZW1lbnRNYXBGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDow
XSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUlt
YWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6ZGlzcGxhY2VtZW50
TWFwRmlsdGVyLCBpbnB1dEltYWdlLCBpbnB1dERpc3BsYWNlbWVudE1hcCwgaW5wdXRYQ2hhbm5l
bFNlbGVjdG9yLCBpbnB1dFlDaGFubmVsU2VsZWN0b3IsIGlucHV0U2NhbGUsIG5pbF07Cit9CisK
K0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6
Lm1tCShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAjaW1w
b3J0ICJLV1FFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
IgogI2ltcG9ydCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaCIKICNpbXBvcnQgIldLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5oIgogI2ltcG9ydCAiV0tTcG90TGlnaHRGaWx0ZXIuaCIKQEAgLTM5
Miw2ICszOTMsNDAgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0ejo6Z2V0Qwog
ICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwogfQogCitzdGF0aWMgaW5saW5lIENJVmVjdG9y
ICpnZXRWZWN0b3JGb3JDaGFubmVsKGludCBpZHgpeworICAgIHN3aXRjaChpZHgpeworICAgIGNh
c2UgMDoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDoxLjAgWTowLjAgWjow
LjAgVzowLjBdOworICAgIGNhc2UgMToKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JX
aXRoWDowLjAgWToxLjAgWjowLjAgVzowLjBdOyAgICAgICAgICAgIAorICAgIGNhc2UgMjoKKyAg
ICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAgWTowLjAgWjoxLjAgVzowLjBd
OworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAg
WTowLjAgWjowLjAgVzoxLjBdOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6MC4wIFk6MC4wIFo6MC4wIFc6MC4wXTsKKyAgICB9Cit9CisKK0NJRmls
dGVyICpLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNG
aWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVy
ID0gbmlsOworICAgIEtXUV9CTE9DS19FWENFUFRJT05TOworICAgIFtXS0Rpc3BsYWNlbWVudE1h
cEZpbHRlciBjbGFzc107CisgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAi
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIiXTsgICAgCisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107
CisgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlz
KTsKKyAgICBDSUltYWdlICpkaXNwbGFjZW1lbnRNYXAgPSBxdWFydHpGaWx0ZXItPmltYWdlRm9y
TmFtZShpbjIoKSk7CisgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGlucHV0SW1hZ2UpOworICAg
IEZFX1FVQVJUWl9DSEVDS19JTlBVVChkaXNwbGFjZW1lbnRNYXApOworICAgIFtmaWx0ZXIgc2V0
VmFsdWU6aW5wdXRJbWFnZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07CisgICAgW2ZpbHRlciBzZXRW
YWx1ZTpkaXNwbGFjZW1lbnRNYXAgZm9yS2V5OkAiaW5wdXREaXNwbGFjZW1lbnRNYXAiXTsKKyAg
ICBbZmlsdGVyIHNldFZhbHVlOmdldFZlY3RvckZvckNoYW5uZWwoWENoYW5uZWxTZWxlY3Rvcigp
KSBmb3JLZXk6QCJpbnB1dFhDaGFubmVsU2VsZWN0b3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVl
OmdldFZlY3RvckZvckNoYW5uZWwoWUNoYW5uZWxTZWxlY3RvcigpKSBmb3JLZXk6QCJpbnB1dFlD
aGFubmVsU2VsZWN0b3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6c2NhbGUoKV0gZm9yS2V5OkAiaW5wdXRTY2FsZSJdOworICAgIEZFX1FVQVJUWl9P
VVRQVVRfUkVUVVJOOworfQorCiBzdGF0aWMgaW5saW5lIENJRmlsdGVyICpnZXRQb2ludExpZ2h0
VmVjdG9ycyhDSUZpbHRlciAqIG5vcm1hbHMsIENJVmVjdG9yICogbGlnaHRQb3NpdGlvbiwgZmxv
YXQgc3VyZmFjZVNjYWxlKQogewogICAgIENJRmlsdGVyICpmaWx0ZXI7CkluZGV4OiBrY2FudmFz
L0tDYW52YXNGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5o
CShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQ5LDcgKzQ0OSwxNSBAQCBjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAg
OiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgUVN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2lu
MjsgfQogICAgIHZvaWQgc2V0SW4yKGNvbnN0IFFTdHJpbmcgJmluMikgeyBtX2luMiA9IGluMjsg
fQorICAgIAorICAgIEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBYQ2hhbm5lbFNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9YQ2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNl
bGVjdG9yKGNvbnN0IEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBYQ2hhbm5lbFNlbGVjdG9yKSB7IG1f
WENoYW5uZWxTZWxlY3RvciA9IFhDaGFubmVsU2VsZWN0b3I7IH0KKyAgICAKKyAgICBLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUgWUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fWUNoYW5u
ZWxTZWxlY3RvcjsgfQorICAgIHZvaWQgc2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUgWUNoYW5uZWxTZWxlY3RvcikgeyBtX1lDaGFubmVsU2VsZWN0b3IgPSBZ
Q2hhbm5lbFNlbGVjdG9yOyB9CiAKKyAgICBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGU7IH0KKyAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2Fs
ZTsgfQogICAgIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFt
ICYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKSW5kZXg6IGtzdmcyL3N2Zy9zdmd0YWdzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9zdmd0YWdzLmluCShyZXZpc2lvbiAxMjY2OSkKKysrIGtz
dmcyL3N2Zy9zdmd0YWdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBAIGZlQ29t
cG9uZW50VHJhbnNmZXIKIGZlQ29tcG9zaXRlCiAjZmVDb252b2x2ZU1hdHJpeAogZmVEaWZmdXNl
TGlnaHRpbmcKLSNmZURpc3BsYWNlbWVudE1hcAorZmVEaXNwbGFjZW1lbnRNYXAKIGZlRGlzdGFu
dExpZ2h0CiBmZUZsb29kCiBmZUZ1bmNBCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworCisjaWZuZGVmIEtTVkdfU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjaWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKyNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVt
YmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7CisgICAgCisgICAgY2xhc3MgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXNJbXBsCisgICAgeworcHVibGljOgorICAgICAgICBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3Vt
ZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4xKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4yKCkgY29uc3Q7CisgICAgICAg
IFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsICp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7Cisg
ICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsICp5Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc2NhbGUoKSBjb25zdDsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgc3RyaW5nVG9DaGFubmVs
KEtET006OkRPTVN0cmluZyAma2V5KTsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJv
bTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CisgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7Cisg
ICAgICAgIAorcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJp
bmdJbXBsPiBtX2luMTsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmdJ
bXBsPiBtX2luMjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bkltcGw+IG1feENoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbkltcGw+IG1feUNoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NjYWxlOworICAgICAgICBtdXRhYmxl
IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqbV9maWx0ZXJFZmZlY3Q7CisgICAgfTsKK307CisK
KyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vIEtTVkdfU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbF9ICisKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI4IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2lmIFNWR19TVVBQT1JUCisjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KKworI2luY2x1ZGUg
PGtkb20vY29yZS9BdHRySW1wbC5oPgorCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzLmg+Cisj
aW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1l
cmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nSW1wbC5oIgorI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTnVtYmVySW1wbC5oIgorI2luY2x1ZGUgIlNWR0RPTUltcGxlbWVudGF0
aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbDo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbChjb25zdCBLRE9N
OjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYykgOiAKK1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwodGFnTmFtZSwgZG9jKQorewor
ICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKK30KKworU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
SW1wbDo6flNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwoKQoreworICAgIGRlbGV0ZSBt
X2ZpbHRlckVmZmVjdDsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsOjppbjEoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJ
bXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5n
SW1wbD4obV9pbjEsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjppbjIoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVs
ZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
U3RyaW5nSW1wbD4obV9pbjIsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbklt
cGwgKlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OnhDaGFubmVsU2VsZWN0b3IoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3hDaGFubmVsU2VsZWN0
b3IsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGwgKlNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudEltcGw6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3lDaGFubmVsU2VsZWN0b3IsIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBs
OjpzY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsK
KyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3NjYWxlLCBk
dW1teSk7Cit9CisKK0tDQ2hhbm5lbFNlbGVjdG9yVHlwZSBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsOjpzdHJpbmdUb0NoYW5uZWwoS0RPTTo6RE9NU3RyaW5nICZrZXkpCit7CisgICAg
aWYoa2V5PT0iUiIpCisgICAgICAgIHJldHVybiBDU19SRUQ7CisgICAgZWxzZSBpZihrZXk9PSJH
IikKKyAgICAgICAgcmV0dXJuIENTX0dSRUVOOworICAgIGVsc2UgaWYoa2V5PT0iQiIpCisgICAg
ICAgIHJldHVybiBDU19CTFVFOworICAgIGVsc2UgaWYoa2V5PT0iQSIpCisgICAgICAgIHJldHVy
biBDU19BTFBIQTsKKyAgICAvL2Vycm9yCisgICAgcmV0dXJuIChLQ0NoYW5uZWxTZWxlY3RvclR5
cGUpLTE7Cit9CisKK3ZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBL
RE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHhDaGFubmVsU2Vs
ZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5uZWwodmFsdWUpKTsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAg
ICB5Q2hhbm5lbFNlbGVjdG9yKCktPnNldEJhc2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAg
IGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1
ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVB
dHRyKQorICAgICAgICBzY2FsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitLQ2FudmFzRkVEaXNw
bGFjZW1lbnRNYXAgKlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OmZpbHRlckVmZmVj
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAgKj4oUVBhaW50ZXI6
OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01B
UCkpOworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybiAwOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUp
KHhDaGFubmVsU2VsZWN0b3IoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3Rv
cigpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3Ry
aW5nKGluMSgpLT5iYXNlVmFsKCkpLnFzdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluMihLRE9NOjpET01TdHJpbmcoaW4yKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUoKS0+YmFzZVZhbCgpKTsKKyAgICBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVj
dDsKK30KKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6353</attachid>
            <date>2006-02-08 18:10:46 -0800</date>
            <delta_ts>2006-02-08 18:29:22 -0800</delta_ts>
            <desc>First patch for displacement mapping</desc>
            <filename>displacementmap.patch</filename>
            <type>text/plain</type>
            <size>27389</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNjY5KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNiAr
NDI1LDExIEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1
OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4MjQ1
RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4c2x0
LmR5bGliICovOyB9OworCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
ICovOyB9OworCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tICovOyB9
OworCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKKwkJQTc2MzhBOTcwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmggKi87IH07CisJCUE3NjM4QTk4MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0EwOTczNzRGNjAw
RDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MTM2OUNCMDk3Mzc0RjYwMEQ3NDQ2MyAv
KiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudElt
cGwuaCAqLzsgfTsKQEAgLTEyNjYsNiArMTI3MSwxMSBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAx
RTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE4QTA5
OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE5
NjA5OTU5NjVEMDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMEUzOTMw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEw
RTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNUcmVlRGVi
dWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0RvY3VtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0yNzMxLDYgKzI3NDEsOCBAQAogCQkJCUE4QzBGODQyMDg5NzAxRjMwMEJBNTExNCAvKiBT
VkdFbGxpcHNlRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0NTA4OTcwMUYzMDBCQTUxMTQg
LyogU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ2
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oICov
LAorCQkJCUE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmggKi8sCisJCQkJQTc2MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ3MDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ4MDg5NzAx
RjMwMEJBNTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0OTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnRJbXBsLmNwcCAqLywKQEAg
LTMwMDEsNiArMzAxMyw5IEBACiAJCUE4QzMyOTFGMDkzQkI3MzIwMDBCOUNBQyAvKiBmaWx0ZXJz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzYzOEE4
OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLywKKwkJCQlB
NzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLywK
KwkJCQlBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgKi8sCiAJCQkJQThDMzI5MjAwOTNCQjczMjAwMEI5Q0FDIC8qIFdLQXJpdGhtZXRp
Y0ZpbHRlci5jaWtlcm5lbCAqLywKIAkJCQlBOEMzMjkyMTA5M0JCNzMyMDAwQjlDQUMgLyogV0tB
cml0aG1ldGljRmlsdGVyLmggKi8sCiAJCQkJQThDMzI5MjIwOTNCQjczMjAwMEI5Q0FDIC8qIFdL
QXJpdGhtZXRpY0ZpbHRlci5tICovLApAQCAtNDM2Miw2ICs0Mzc3LDggQEAKIAkJCQlCQzZCN0VD
RjA5OThBQzdGMDA1Mjg2N0IgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
ODJBMTQwMDk5OTlDRDYwMEJFRUI2RCAvKiBRU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTgyQTE2MDA5OTk5RDZEMDBCRUVCNkQgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc2MzhBOEIwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzYzOEE5NzA5OTU5NjVEMDAwN0UxNEYgLyogU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NTI3LDYg
KzQ1NDQsNyBAQAogCQkJCUJDRUE0NzlDMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nwcm9wZXJ0aWVz
LmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VBNDc5RjA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
dmFsdWVzLmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0M4Q0ZDRDA5ODZDRDI0MDAxNDBCRjIg
LyogQ29sb3JEYXRhLmdwZXJmIGluIFJlc291cmNlcyAqLywKKwkJCQlBNzYzOEE5MjA5OTU5MkMz
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNTQ2NCw2ICs1NDgyLDggQEAKIAkJCQk2NTgyQTE3ODA5OTk5RUEwMDBCRUVCNkQg
LyogUVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMjE1NEVFMDk5QTExQTgwMDM0M0RG
OCAvKiBKU0RPTUNvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMTU0RUYwOTlBMTFBODAw
MzQzREY4IC8qIEpTRE9NRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NjM4QThDMDk5
NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tIGluIFNvdXJjZXMgKi8s
CisJCQkJQTc2MzhBOTgwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTI2NjkpCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDcgKzI1NSw3IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZp
Y2VRdWEKICAgICBjYXNlIEZFX0NPTVBPU0lURTogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb21wb3Np
dGVRdWFydHooKTsKIC8vICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCiAgICAgY2FzZSBGRV9E
SUZGVVNFX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
eigpOwotLy8gIGNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCisgICAgY2FzZSBGRV9ESVNQTEFD
RU1FTlRfTUFQOiByZXR1cm4gbmV3IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0eigpOwog
ICAgIGNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKICAg
ICBjYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVy
UXVhcnR6KCk7CiAgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVJbWFnZVF1
YXJ0eigpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5oCShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBR
dWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFTWVyZ2VRdWFydHogOiBwdWJsaWMg
S0NhbnZhc0ZFTWVyZ2UgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5jaWtlcm5lbAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisvKgorICogUGVy
Zm9ybXMgdGhlIHRyYW5zZm9ybWF0aW9uOgorICogUCcoeCx5KSA8LSBQKCB4ICsgc2NhbGUgKiAo
WEMoeCx5KSAtIC41KSwgeSArIHNjYWxlICogKFlDKHgseSkgLSAuNSkpCisgKgorICogeC95Y2hh
bm5lbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaGFubmVs
IGZvciB4IGFuZAorICogeSBkaXNwbGFjZW1lbnQuICBIZW5jZSBlYWNoIHZlY3RvciBzaG91bGQg
aGF2ZSBvbmx5IG9uZSBub24temVybyBlbGVtZW50LAorICogd2hpY2ggc2hvdWxkIGhhdmUgdGhl
IHZhbHVlIDEuMC4KKyAqLworCitrZXJuZWwgdmVjNCBkaXNwbGFjZW1lbnRNYXAoc2FtcGxlciBp
bWFnZSwgc2FtcGxlciBtYXAsIHZlYzQgeGNoYW5uZWwsIHZlYzQgeWNoYW5uZWwsIGZsb2F0IHNj
YWxlKQoreworCXZlYzIgc2FtcGxlUG9zID0gc2FtcGxlckNvb3JkKGltYWdlKTsKKwl2ZWM0IFhD
WUMgPSBzYW1wbGUobWFwLCBzYW1wbGVQb3MvMi4wKTsKKwlmbG9hdCB4YyA9IGRvdChYQ1lDLCB4
Y2hhbm5lbCk7CisJZmxvYXQgeWMgPSBkb3QoWENZQywgeWNoYW5uZWwpOworCXNhbXBsZVBvcy54
ICs9IHNjYWxlKih4Yy0wLjUpOworCXNhbXBsZVBvcy55ICs9IHNjYWxlKih5Yy0wLjUpOworCXJl
dHVybiBzYW1wbGUoaW1hZ2UsIHNhbXBsZVBvcyk7Cit9CkluZGV4OiBrY2FudmFzL2RldmljZS9x
dWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgJKHJl
dmlzaW9uIDApCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZh
Y2UgV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlu
cHV0SW1hZ2U7CisgICAgQ0lJbWFnZSAgKmlucHV0RGlzcGxhY2VtZW50TWFwOworICAgIENJVmVj
dG9yICppbnB1dFhDaGFubmVsU2VsZWN0b3I7CisgICAgQ0lWZWN0b3IgKmlucHV0WUNoYW5uZWxT
ZWxlY3RvcjsKKyAgICBOU051bWJlciAqaW5wdXRTY2FsZTsKK30KKworQGVuZApJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1h
cEZpbHRlci5tCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS0Rpc3BsYWNlbWVudE1hcEZpbHRl
ci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKmRpc3BsYWNlbWVudE1hcEZpbHRlciA9IG5pbDsKKwor
QGltcGxlbWVudGF0aW9uIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlh
bGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlciIgIAorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6c2VsZgorICAg
ICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgRGlzcGxhY2Vt
ZW50IE1hcCBGaWx0ZXIiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6a0NJQ2F0ZWdvcnlTdHlsaXpl
LCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5
U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRl
RmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6MS4wIFk6MC4wIFo6MC4wIFc6MC4wXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlucHV0WENoYW5uZWxTZWxl
Y3RvciIsICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAuMCBZOjEuMCBaOjAuMCBXOjAuMF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1dFlDaGFubmVsU2VsZWN0b3IiLCAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0
cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlw
ZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxd
LCBAImlucHV0U2NhbGUiLAorICAgICAgICAgICAgICAgICAgICAgbmlsXV07Cit9CisKKysgKENJ
RmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBb
W1tzZWxmIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAg
ICBpZiAoIWRpc3BsYWNlbWVudE1hcEZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3Ry
aW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAg
ICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOwor
ICAgICAgICBkaXNwbGFjZW1lbnRNYXBGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDow
XSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUlt
YWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6ZGlzcGxhY2VtZW50
TWFwRmlsdGVyLCBpbnB1dEltYWdlLCBpbnB1dERpc3BsYWNlbWVudE1hcCwgaW5wdXRYQ2hhbm5l
bFNlbGVjdG9yLCBpbnB1dFlDaGFubmVsU2VsZWN0b3IsIGlucHV0U2NhbGUsIG5pbF07Cit9CisK
K0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6
Lm1tCShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAjaW1w
b3J0ICJLV1FFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
IgogI2ltcG9ydCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaCIKICNpbXBvcnQgIldLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5oIgogI2ltcG9ydCAiV0tTcG90TGlnaHRGaWx0ZXIuaCIKQEAgLTM5
Miw2ICszOTMsNDAgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0ejo6Z2V0Qwog
ICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwogfQogCitzdGF0aWMgaW5saW5lIENJVmVjdG9y
ICpnZXRWZWN0b3JGb3JDaGFubmVsKGludCBpZHgpeworICAgIHN3aXRjaChpZHgpeworICAgIGNh
c2UgMDoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDoxLjAgWTowLjAgWjow
LjAgVzowLjBdOworICAgIGNhc2UgMToKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JX
aXRoWDowLjAgWToxLjAgWjowLjAgVzowLjBdOyAgICAgICAgICAgIAorICAgIGNhc2UgMjoKKyAg
ICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAgWTowLjAgWjoxLjAgVzowLjBd
OworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAg
WTowLjAgWjowLjAgVzoxLjBdOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6MC4wIFk6MC4wIFo6MC4wIFc6MC4wXTsKKyAgICB9Cit9CisKK0NJRmls
dGVyICpLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNG
aWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVy
ID0gbmlsOworICAgIEtXUV9CTE9DS19FWENFUFRJT05TOworICAgIFtXS0Rpc3BsYWNlbWVudE1h
cEZpbHRlciBjbGFzc107CisgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAi
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIiXTsgICAgCisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107
CisgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlz
KTsKKyAgICBDSUltYWdlICpkaXNwbGFjZW1lbnRNYXAgPSBxdWFydHpGaWx0ZXItPmltYWdlRm9y
TmFtZShpbjIoKSk7CisgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGlucHV0SW1hZ2UpOworICAg
IEZFX1FVQVJUWl9DSEVDS19JTlBVVChkaXNwbGFjZW1lbnRNYXApOworICAgIFtmaWx0ZXIgc2V0
VmFsdWU6aW5wdXRJbWFnZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07CisgICAgW2ZpbHRlciBzZXRW
YWx1ZTpkaXNwbGFjZW1lbnRNYXAgZm9yS2V5OkAiaW5wdXREaXNwbGFjZW1lbnRNYXAiXTsKKyAg
ICBbZmlsdGVyIHNldFZhbHVlOmdldFZlY3RvckZvckNoYW5uZWwoWENoYW5uZWxTZWxlY3Rvcigp
KSBmb3JLZXk6QCJpbnB1dFhDaGFubmVsU2VsZWN0b3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVl
OmdldFZlY3RvckZvckNoYW5uZWwoWUNoYW5uZWxTZWxlY3RvcigpKSBmb3JLZXk6QCJpbnB1dFlD
aGFubmVsU2VsZWN0b3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6c2NhbGUoKV0gZm9yS2V5OkAiaW5wdXRTY2FsZSJdOworICAgIEZFX1FVQVJUWl9P
VVRQVVRfUkVUVVJOOworfQorCiBzdGF0aWMgaW5saW5lIENJRmlsdGVyICpnZXRQb2ludExpZ2h0
VmVjdG9ycyhDSUZpbHRlciAqIG5vcm1hbHMsIENJVmVjdG9yICogbGlnaHRQb3NpdGlvbiwgZmxv
YXQgc3VyZmFjZVNjYWxlKQogewogICAgIENJRmlsdGVyICpmaWx0ZXI7CkluZGV4OiBrY2FudmFz
L0tDYW52YXNGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5o
CShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQ5LDcgKzQ0OSwxNSBAQCBjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAg
OiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgUVN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2lu
MjsgfQogICAgIHZvaWQgc2V0SW4yKGNvbnN0IFFTdHJpbmcgJmluMikgeyBtX2luMiA9IGluMjsg
fQorICAgIAorICAgIEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBYQ2hhbm5lbFNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9YQ2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNl
bGVjdG9yKGNvbnN0IEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBYQ2hhbm5lbFNlbGVjdG9yKSB7IG1f
WENoYW5uZWxTZWxlY3RvciA9IFhDaGFubmVsU2VsZWN0b3I7IH0KKyAgICAKKyAgICBLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUgWUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fWUNoYW5u
ZWxTZWxlY3RvcjsgfQorICAgIHZvaWQgc2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUgWUNoYW5uZWxTZWxlY3RvcikgeyBtX1lDaGFubmVsU2VsZWN0b3IgPSBZ
Q2hhbm5lbFNlbGVjdG9yOyB9CiAKKyAgICBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGU7IH0KKyAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2Fs
ZTsgfQogICAgIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFt
ICYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKSW5kZXg6IGtzdmcyL3N2Zy9zdmd0YWdzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9zdmd0YWdzLmluCShyZXZpc2lvbiAxMjY2OSkKKysrIGtz
dmcyL3N2Zy9zdmd0YWdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBAIGZlQ29t
cG9uZW50VHJhbnNmZXIKIGZlQ29tcG9zaXRlCiAjZmVDb252b2x2ZU1hdHJpeAogZmVEaWZmdXNl
TGlnaHRpbmcKLSNmZURpc3BsYWNlbWVudE1hcAorZmVEaXNwbGFjZW1lbnRNYXAKIGZlRGlzdGFu
dExpZ2h0CiBmZUZsb29kCiBmZUZ1bmNBCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworCisjaWZuZGVmIEtTVkdfU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjaWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKyNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVt
YmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7CisgICAgCisgICAgY2xhc3MgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXNJbXBsCisgICAgeworcHVibGljOgorICAgICAgICBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3Vt
ZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4xKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4yKCkgY29uc3Q7CisgICAgICAg
IFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsICp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7Cisg
ICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsICp5Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc2NhbGUoKSBjb25zdDsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgc3RyaW5nVG9DaGFubmVs
KEtET006OkRPTVN0cmluZyAma2V5KTsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJv
bTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CisgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7Cisg
ICAgICAgIAorcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJp
bmdJbXBsPiBtX2luMTsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmdJ
bXBsPiBtX2luMjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bkltcGw+IG1feENoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbkltcGw+IG1feUNoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NjYWxlOworICAgICAgICBtdXRhYmxl
IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqbV9maWx0ZXJFZmZlY3Q7CisgICAgfTsKK307CisK
KyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vIEtTVkdfU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbF9ICisKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI4IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2lmIFNWR19TVVBQT1JUCisjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KKworI2luY2x1ZGUg
PGtkb20vY29yZS9BdHRySW1wbC5oPgorCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzLmg+Cisj
aW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1l
cmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nSW1wbC5oIgorI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTnVtYmVySW1wbC5oIgorI2luY2x1ZGUgIlNWR0RPTUltcGxlbWVudGF0
aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbDo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbChjb25zdCBLRE9N
OjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYykgOiAKK1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwodGFnTmFtZSwgZG9jKQorewor
ICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKK30KKworU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
SW1wbDo6flNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwoKQoreworICAgIGRlbGV0ZSBt
X2ZpbHRlckVmZmVjdDsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsOjppbjEoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJ
bXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5n
SW1wbD4obV9pbjEsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjppbjIoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVs
ZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
U3RyaW5nSW1wbD4obV9pbjIsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbklt
cGwgKlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OnhDaGFubmVsU2VsZWN0b3IoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3hDaGFubmVsU2VsZWN0
b3IsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGwgKlNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudEltcGw6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3lDaGFubmVsU2VsZWN0b3IsIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBs
OjpzY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsK
KyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3NjYWxlLCBk
dW1teSk7Cit9CisKK0tDQ2hhbm5lbFNlbGVjdG9yVHlwZSBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsOjpzdHJpbmdUb0NoYW5uZWwoS0RPTTo6RE9NU3RyaW5nICZrZXkpCit7CisgICAg
aWYoa2V5PT0iUiIpCisgICAgICAgIHJldHVybiBDU19SRUQ7CisgICAgZWxzZSBpZihrZXk9PSJH
IikKKyAgICAgICAgcmV0dXJuIENTX0dSRUVOOworICAgIGVsc2UgaWYoa2V5PT0iQiIpCisgICAg
ICAgIHJldHVybiBDU19CTFVFOworICAgIGVsc2UgaWYoa2V5PT0iQSIpCisgICAgICAgIHJldHVy
biBDU19BTFBIQTsKKyAgICAvL2Vycm9yCisgICAgcmV0dXJuIChLQ0NoYW5uZWxTZWxlY3RvclR5
cGUpLTE7Cit9CisKK3ZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBL
RE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHhDaGFubmVsU2Vs
ZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5uZWwodmFsdWUpKTsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAg
ICB5Q2hhbm5lbFNlbGVjdG9yKCktPnNldEJhc2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAg
IGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1
ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVB
dHRyKQorICAgICAgICBzY2FsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitLQ2FudmFzRkVEaXNw
bGFjZW1lbnRNYXAgKlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OmZpbHRlckVmZmVj
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAgKj4oUVBhaW50ZXI6
OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01B
UCkpOworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybiAwOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUp
KHhDaGFubmVsU2VsZWN0b3IoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3Rv
cigpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3Ry
aW5nKGluMSgpLT5iYXNlVmFsKCkpLnFzdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluMihLRE9NOjpET01TdHJpbmcoaW4yKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUoKS0+YmFzZVZhbCgpKTsKKyAgICBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVj
dDsKK30KKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6354</attachid>
            <date>2006-02-08 18:29:22 -0800</date>
            <delta_ts>2006-02-09 18:40:43 -0800</delta_ts>
            <desc>Formatting changes</desc>
            <filename>displacementmap.patch</filename>
            <type>text/plain</type>
            <size>27403</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNjY5KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNiAr
NDI1LDExIEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1
OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4MjQ1
RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4c2x0
LmR5bGliICovOyB9OworCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
ICovOyB9OworCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tICovOyB9
OworCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKKwkJQTc2MzhBOTcwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmggKi87IH07CisJCUE3NjM4QTk4MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0EwOTczNzRGNjAw
RDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MTM2OUNCMDk3Mzc0RjYwMEQ3NDQ2MyAv
KiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudElt
cGwuaCAqLzsgfTsKQEAgLTEyNjYsNiArMTI3MSwxMSBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAx
RTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE4QTA5
OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE5
NjA5OTU5NjVEMDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMEUzOTMw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEw
RTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNUcmVlRGVi
dWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0RvY3VtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0yNzMxLDYgKzI3NDEsOCBAQAogCQkJCUE4QzBGODQyMDg5NzAxRjMwMEJBNTExNCAvKiBT
VkdFbGxpcHNlRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0NTA4OTcwMUYzMDBCQTUxMTQg
LyogU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ2
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oICov
LAorCQkJCUE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmggKi8sCisJCQkJQTc2MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ3MDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ4MDg5NzAx
RjMwMEJBNTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0OTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnRJbXBsLmNwcCAqLywKQEAg
LTMwMDEsNiArMzAxMyw5IEBACiAJCUE4QzMyOTFGMDkzQkI3MzIwMDBCOUNBQyAvKiBmaWx0ZXJz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzYzOEE4
OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLywKKwkJCQlB
NzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLywK
KwkJCQlBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgKi8sCiAJCQkJQThDMzI5MjAwOTNCQjczMjAwMEI5Q0FDIC8qIFdLQXJpdGhtZXRp
Y0ZpbHRlci5jaWtlcm5lbCAqLywKIAkJCQlBOEMzMjkyMTA5M0JCNzMyMDAwQjlDQUMgLyogV0tB
cml0aG1ldGljRmlsdGVyLmggKi8sCiAJCQkJQThDMzI5MjIwOTNCQjczMjAwMEI5Q0FDIC8qIFdL
QXJpdGhtZXRpY0ZpbHRlci5tICovLApAQCAtNDM2Miw2ICs0Mzc3LDggQEAKIAkJCQlCQzZCN0VD
RjA5OThBQzdGMDA1Mjg2N0IgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
ODJBMTQwMDk5OTlDRDYwMEJFRUI2RCAvKiBRU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTgyQTE2MDA5OTk5RDZEMDBCRUVCNkQgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc2MzhBOEIwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzYzOEE5NzA5OTU5NjVEMDAwN0UxNEYgLyogU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NTI3LDYg
KzQ1NDQsNyBAQAogCQkJCUJDRUE0NzlDMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nwcm9wZXJ0aWVz
LmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VBNDc5RjA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
dmFsdWVzLmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0M4Q0ZDRDA5ODZDRDI0MDAxNDBCRjIg
LyogQ29sb3JEYXRhLmdwZXJmIGluIFJlc291cmNlcyAqLywKKwkJCQlBNzYzOEE5MjA5OTU5MkMz
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNTQ2NCw2ICs1NDgyLDggQEAKIAkJCQk2NTgyQTE3ODA5OTk5RUEwMDBCRUVCNkQg
LyogUVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMjE1NEVFMDk5QTExQTgwMDM0M0RG
OCAvKiBKU0RPTUNvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMTU0RUYwOTlBMTFBODAw
MzQzREY4IC8qIEpTRE9NRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NjM4QThDMDk5
NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tIGluIFNvdXJjZXMgKi8s
CisJCQkJQTc2MzhBOTgwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTI2NjkpCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDcgKzI1NSw3IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZp
Y2VRdWEKICAgICBjYXNlIEZFX0NPTVBPU0lURTogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb21wb3Np
dGVRdWFydHooKTsKIC8vICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCiAgICAgY2FzZSBGRV9E
SUZGVVNFX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
eigpOwotLy8gIGNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCisgICAgY2FzZSBGRV9ESVNQTEFD
RU1FTlRfTUFQOiByZXR1cm4gbmV3IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0eigpOwog
ICAgIGNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKICAg
ICBjYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVy
UXVhcnR6KCk7CiAgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVJbWFnZVF1
YXJ0eigpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5oCShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBR
dWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFTWVyZ2VRdWFydHogOiBwdWJsaWMg
S0NhbnZhc0ZFTWVyZ2UgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5jaWtlcm5lbAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisvKgorICogUGVy
Zm9ybXMgdGhlIHRyYW5zZm9ybWF0aW9uOgorICogUCcoeCx5KSA8LSBQKCB4ICsgc2NhbGUgKiAo
WEMoeCx5KSAtIC41KSwgeSArIHNjYWxlICogKFlDKHgseSkgLSAuNSkpCisgKgorICogeC95Y2hh
bm5lbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaGFubmVs
IGZvciB4IGFuZAorICogeSBkaXNwbGFjZW1lbnQuICBIZW5jZSBlYWNoIHZlY3RvciBzaG91bGQg
aGF2ZSBvbmx5IG9uZSBub24temVybyBlbGVtZW50LAorICogd2hpY2ggc2hvdWxkIGhhdmUgdGhl
IHZhbHVlIDEuMC4KKyAqLworCitrZXJuZWwgdmVjNCBkaXNwbGFjZW1lbnRNYXAoc2FtcGxlciBp
bWFnZSwgc2FtcGxlciBtYXAsIHZlYzQgeGNoYW5uZWwsIHZlYzQgeWNoYW5uZWwsIGZsb2F0IHNj
YWxlKQoreworCXZlYzIgc2FtcGxlUG9zID0gc2FtcGxlckNvb3JkKGltYWdlKTsKKwl2ZWM0IFhD
WUMgPSBzYW1wbGUobWFwLCBzYW1wbGVQb3MvMi4wKTsKKwlmbG9hdCB4YyA9IGRvdChYQ1lDLCB4
Y2hhbm5lbCk7CisJZmxvYXQgeWMgPSBkb3QoWENZQywgeWNoYW5uZWwpOworCXNhbXBsZVBvcy54
ICs9IHNjYWxlKih4Yy0wLjUpOworCXNhbXBsZVBvcy55ICs9IHNjYWxlKih5Yy0wLjUpOworCXJl
dHVybiBzYW1wbGUoaW1hZ2UsIHNhbXBsZVBvcyk7Cit9CkluZGV4OiBrY2FudmFzL2RldmljZS9x
dWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgJKHJl
dmlzaW9uIDApCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZh
Y2UgV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlu
cHV0SW1hZ2U7CisgICAgQ0lJbWFnZSAgKmlucHV0RGlzcGxhY2VtZW50TWFwOworICAgIENJVmVj
dG9yICppbnB1dFhDaGFubmVsU2VsZWN0b3I7CisgICAgQ0lWZWN0b3IgKmlucHV0WUNoYW5uZWxT
ZWxlY3RvcjsKKyAgICBOU051bWJlciAqaW5wdXRTY2FsZTsKK30KKworQGVuZApJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1h
cEZpbHRlci5tCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS0Rpc3BsYWNlbWVudE1hcEZpbHRl
ci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKmRpc3BsYWNlbWVudE1hcEZpbHRlciA9IG5pbDsKKwor
QGltcGxlbWVudGF0aW9uIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlh
bGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlciIgIAorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6c2VsZgorICAg
ICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgRGlzcGxhY2Vt
ZW50IE1hcCBGaWx0ZXIiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6a0NJQ2F0ZWdvcnlTdHlsaXpl
LCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5
U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRl
RmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6MS4wIFk6MC4wIFo6MC4wIFc6MC4wXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlucHV0WENoYW5uZWxTZWxl
Y3RvciIsICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAuMCBZOjEuMCBaOjAuMCBXOjAuMF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1dFlDaGFubmVsU2VsZWN0b3IiLCAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0
cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlw
ZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxd
LCBAImlucHV0U2NhbGUiLAorICAgICAgICAgICAgICAgICAgICAgbmlsXV07Cit9CisKKysgKENJ
RmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBb
W1tzZWxmIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAg
ICBpZiAoIWRpc3BsYWNlbWVudE1hcEZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3Ry
aW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAg
ICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOwor
ICAgICAgICBkaXNwbGFjZW1lbnRNYXBGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDow
XSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUlt
YWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6ZGlzcGxhY2VtZW50
TWFwRmlsdGVyLCBpbnB1dEltYWdlLCBpbnB1dERpc3BsYWNlbWVudE1hcCwgaW5wdXRYQ2hhbm5l
bFNlbGVjdG9yLCBpbnB1dFlDaGFubmVsU2VsZWN0b3IsIGlucHV0U2NhbGUsIG5pbF07Cit9CisK
K0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6
Lm1tCShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAjaW1w
b3J0ICJLV1FFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
IgogI2ltcG9ydCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaCIKICNpbXBvcnQgIldLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5oIgogI2ltcG9ydCAiV0tTcG90TGlnaHRGaWx0ZXIuaCIKQEAgLTM5
Miw2ICszOTMsNDAgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0ejo6Z2V0Qwog
ICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwogfQogCitzdGF0aWMgaW5saW5lIENJVmVjdG9y
ICpnZXRWZWN0b3JGb3JDaGFubmVsKGludCBpZHgpeworICAgIHN3aXRjaChpZHgpeworICAgIGNh
c2UgMDoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDoxLjAgWTowLjAgWjow
LjAgVzowLjBdOworICAgIGNhc2UgMToKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JX
aXRoWDowLjAgWToxLjAgWjowLjAgVzowLjBdOyAgICAgICAgICAgIAorICAgIGNhc2UgMjoKKyAg
ICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAgWTowLjAgWjoxLjAgVzowLjBd
OworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAg
WTowLjAgWjowLjAgVzoxLjBdOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6MC4wIFk6MC4wIFo6MC4wIFc6MC4wXTsKKyAgICB9Cit9CisKK0NJRmls
dGVyICpLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNG
aWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVy
ID0gbmlsOworICAgIEtXUV9CTE9DS19FWENFUFRJT05TOworICAgIFtXS0Rpc3BsYWNlbWVudE1h
cEZpbHRlciBjbGFzc107CisgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAi
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIiXTsgICAgCisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107
CisgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlz
KTsKKyAgICBDSUltYWdlICpkaXNwbGFjZW1lbnRNYXAgPSBxdWFydHpGaWx0ZXItPmltYWdlRm9y
TmFtZShpbjIoKSk7CisgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGlucHV0SW1hZ2UpOworICAg
IEZFX1FVQVJUWl9DSEVDS19JTlBVVChkaXNwbGFjZW1lbnRNYXApOworICAgIFtmaWx0ZXIgc2V0
VmFsdWU6aW5wdXRJbWFnZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07CisgICAgW2ZpbHRlciBzZXRW
YWx1ZTpkaXNwbGFjZW1lbnRNYXAgZm9yS2V5OkAiaW5wdXREaXNwbGFjZW1lbnRNYXAiXTsKKyAg
ICBbZmlsdGVyIHNldFZhbHVlOmdldFZlY3RvckZvckNoYW5uZWwoWENoYW5uZWxTZWxlY3Rvcigp
KSBmb3JLZXk6QCJpbnB1dFhDaGFubmVsU2VsZWN0b3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVl
OmdldFZlY3RvckZvckNoYW5uZWwoWUNoYW5uZWxTZWxlY3RvcigpKSBmb3JLZXk6QCJpbnB1dFlD
aGFubmVsU2VsZWN0b3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6c2NhbGUoKV0gZm9yS2V5OkAiaW5wdXRTY2FsZSJdOworICAgIEZFX1FVQVJUWl9P
VVRQVVRfUkVUVVJOOworfQorCiBzdGF0aWMgaW5saW5lIENJRmlsdGVyICpnZXRQb2ludExpZ2h0
VmVjdG9ycyhDSUZpbHRlciAqIG5vcm1hbHMsIENJVmVjdG9yICogbGlnaHRQb3NpdGlvbiwgZmxv
YXQgc3VyZmFjZVNjYWxlKQogewogICAgIENJRmlsdGVyICpmaWx0ZXI7CkluZGV4OiBrY2FudmFz
L0tDYW52YXNGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5o
CShyZXZpc2lvbiAxMjY2OSkKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQ5LDcgKzQ0OSwxNiBAQCBjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAg
OiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgUVN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2lu
MjsgfQogICAgIHZvaWQgc2V0SW4yKGNvbnN0IFFTdHJpbmcgJmluMikgeyBtX2luMiA9IGluMjsg
fQorICAgIAorICAgIEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBYQ2hhbm5lbFNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9YQ2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNl
bGVjdG9yKGNvbnN0IEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBYQ2hhbm5lbFNlbGVjdG9yKSB7IG1f
WENoYW5uZWxTZWxlY3RvciA9IFhDaGFubmVsU2VsZWN0b3I7IH0KKyAgICAKKyAgICBLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUgWUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fWUNoYW5u
ZWxTZWxlY3RvcjsgfQorICAgIHZvaWQgc2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUgWUNoYW5uZWxTZWxlY3RvcikgeyBtX1lDaGFubmVsU2VsZWN0b3IgPSBZ
Q2hhbm5lbFNlbGVjdG9yOyB9CiAKKyAgICBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGU7IH0KKyAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2Fs
ZTsgfQorICAgIAogICAgIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0
U3RyZWFtICYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKSW5kZXg6IGtzdmcyL3N2Zy9zdmd0YWdz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9zdmd0YWdzLmluCShyZXZpc2lvbiAxMjY2OSkK
KysrIGtzdmcyL3N2Zy9zdmd0YWdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
IGZlQ29tcG9uZW50VHJhbnNmZXIKIGZlQ29tcG9zaXRlCiAjZmVDb252b2x2ZU1hdHJpeAogZmVE
aWZmdXNlTGlnaHRpbmcKLSNmZURpc3BsYWNlbWVudE1hcAorZmVEaXNwbGFjZW1lbnRNYXAKIGZl
RGlzdGFudExpZ2h0CiBmZUZsb29kCiBmZUZ1bmNBCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3
IEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5j
YW50ZXJidXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworCisjaWZuZGVmIEtT
VkdfU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjaWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKyNpbmNsdWRlICJL
Q2FudmFzRmlsdGVycy5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1h
dGVkTnVtYmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZ0ltcGw7CisgICAgY2xh
c3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7CisgICAgCisgICAgY2xhc3MgU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXNJbXBsCisgICAgeworcHVibGljOgorICAgICAgICBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006
OkRvY3VtZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCogaW4x
KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCogaW4yKCkgY29uc3Q7Cisg
ICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiB4Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiB5Q2hhbm5lbFNlbGVjdG9y
KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCogc2NhbGUoKSBjb25zdDsK
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgc3RyaW5nVG9D
aGFubmVsKEtET006OkRPTVN0cmluZyAma2V5KTsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2
ZWQgZnJvbTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CisgICAgICAgIAorICAg
ICAgICB2aXJ0dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogZmlsdGVyRWZmZWN0KCkgY29u
c3Q7CisgICAgICAgIAorcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRTdHJpbmdJbXBsPiBtX2luMTsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmdJbXBsPiBtX2luMjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbkltcGw+IG1feENoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw+IG1feUNoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NjYWxlOworICAgICAgICBt
dXRhYmxlIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqbV9maWx0ZXJFZmZlY3Q7CisgICAgfTsK
K307CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vIEtTVkdfU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbF9ICisKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI4
IEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5j
YW50ZXJidXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2lmIFNWR19TVVBQT1JUCisjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KKworI2lu
Y2x1ZGUgPGtkb20vY29yZS9BdHRySW1wbC5oPgorCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFz
Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUg
IlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRl
ZEVudW1lcmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nSW1wbC5oIgor
I2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVySW1wbC5oIgorI2luY2x1ZGUgIlNWR0RPTUltcGxl
bWVudGF0aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbDo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbChjb25z
dCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwqIGRvYykg
OiAKK1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwodGFnTmFtZSwgZG9j
KQoreworICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKK30KKworU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50SW1wbDo6flNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwoKQoreworICAgIGRl
bGV0ZSBtX2ZpbHRlckVmZmVjdDsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjppbjEoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVs
ZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
U3RyaW5nSW1wbD4obV9pbjEsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsKiBT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjppbjIoKSBjb25zdAoreworICAgIFNWR1N0
eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkU3RyaW5nSW1wbD4obV9pbjIsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbkltcGwqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OnhDaGFubmVsU2VsZWN0
b3IoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3hDaGFubmVs
U2VsZWN0b3IsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGwqIFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25zdAorewor
ICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3lDaGFubmVsU2VsZWN0b3IsIGR1bW15
KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnRJbXBsOjpzY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwqIGR1bW15
ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3Nj
YWxlLCBkdW1teSk7Cit9CisKK0tDQ2hhbm5lbFNlbGVjdG9yVHlwZSBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnRJbXBsOjpzdHJpbmdUb0NoYW5uZWwoS0RPTTo6RE9NU3RyaW5nJiBrZXkpCit7
CisgICAgaWYoa2V5ID09ICJSIikKKyAgICAgICAgcmV0dXJuIENTX1JFRDsKKyAgICBlbHNlIGlm
KGtleSA9PSAiRyIpCisgICAgICAgIHJldHVybiBDU19HUkVFTjsKKyAgICBlbHNlIGlmKGtleSA9
PSAiQiIpCisgICAgICAgIHJldHVybiBDU19CTFVFOworICAgIGVsc2UgaWYoa2V5ID09ICJBIikK
KyAgICAgICAgcmV0dXJuIENTX0FMUEhBOworICAgIC8vZXJyb3IKKyAgICByZXR1cm4gKEtDQ2hh
bm5lbFNlbGVjdG9yVHlwZSktMTsKK30KKwordm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKiBh
dHRyKQoreworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICAg
ICAgeENoYW5uZWxTZWxlY3RvcigpLT5zZXRCYXNlVmFsKHN0cmluZ1RvQ2hhbm5lbCh2YWx1ZSkp
OworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3Rv
ckF0dHIpCisgICAgICAgIHlDaGFubmVsU2VsZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0No
YW5uZWwodmFsdWUpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omlu
QXR0cikKKyAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIGluMigpLT5z
ZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpzY2FsZUF0dHIpCisgICAgICAgIHNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUucXN0
cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisK
K0tDYW52YXNGRURpc3BsYWNlbWVudE1hcCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1w
bDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQorICAg
ICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpc3BsYWNlbWVudE1h
cCAqPihRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9E
SVNQTEFDRU1FTlRfTUFQKSk7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5l
bFNlbGVjdG9yVHlwZSkoeENoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JUeXBlKSh5
Q2hhbm5lbFNlbGVjdG9yKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJ
bihLRE9NOjpET01TdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0SW4yKEtET006OkRPTVN0cmluZyhpbjIoKS0+YmFzZVZhbCgpKS5xc3Ry
aW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTY2FsZShzY2FsZSgpLT5iYXNlVmFsKCkp
OworICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CisgICAgcmV0dXJu
IG1fZmlsdGVyRWZmZWN0OworfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCg==
</data>
<flag name="review"
          id="1557"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6375</attachid>
            <date>2006-02-09 18:40:43 -0800</date>
            <delta_ts>2006-02-11 17:46:47 -0800</delta_ts>
            <desc>A few more formatting changes</desc>
            <filename>displacementmap.patch</filename>
            <type>text/plain</type>
            <size>28529</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNzI3KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNiAr
NDI1LDExIEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1
OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4MjQ1
RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4c2x0
LmR5bGliICovOyB9OworCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
ICovOyB9OworCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tICovOyB9
OworCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKKwkJQTc2MzhBOTcwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmggKi87IH07CisJCUE3NjM4QTk4MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0EwOTczNzRGNjAw
RDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MTM2OUNCMDk3Mzc0RjYwMEQ3NDQ2MyAv
KiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudElt
cGwuaCAqLzsgfTsKQEAgLTEyNjYsNiArMTI3MSwxMSBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAx
RTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE4QTA5
OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE5
NjA5OTU5NjVEMDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMEUzOTMw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEw
RTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNUcmVlRGVi
dWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0RvY3VtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0yNzMyLDYgKzI3NDIsOCBAQAogCQkJCUE4QzBGODQyMDg5NzAxRjMwMEJBNTExNCAvKiBT
VkdFbGxpcHNlRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0NTA4OTcwMUYzMDBCQTUxMTQg
LyogU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ2
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oICov
LAorCQkJCUE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmggKi8sCisJCQkJQTc2MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ3MDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ4MDg5NzAx
RjMwMEJBNTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0OTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnRJbXBsLmNwcCAqLywKQEAg
LTMwMDIsNiArMzAxNCw5IEBACiAJCUE4QzMyOTFGMDkzQkI3MzIwMDBCOUNBQyAvKiBmaWx0ZXJz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzYzOEE4
OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLywKKwkJCQlB
NzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLywK
KwkJCQlBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgKi8sCiAJCQkJQThDMzI5MjAwOTNCQjczMjAwMEI5Q0FDIC8qIFdLQXJpdGhtZXRp
Y0ZpbHRlci5jaWtlcm5lbCAqLywKIAkJCQlBOEMzMjkyMTA5M0JCNzMyMDAwQjlDQUMgLyogV0tB
cml0aG1ldGljRmlsdGVyLmggKi8sCiAJCQkJQThDMzI5MjIwOTNCQjczMjAwMEI5Q0FDIC8qIFdL
QXJpdGhtZXRpY0ZpbHRlci5tICovLApAQCAtNDM2Miw2ICs0Mzc3LDggQEAKIAkJCQlCQzZCN0VD
RjA5OThBQzdGMDA1Mjg2N0IgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
ODJBMTQwMDk5OTlDRDYwMEJFRUI2RCAvKiBRU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTgyQTE2MDA5OTk5RDZEMDBCRUVCNkQgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc2MzhBOEIwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzYzOEE5NzA5OTU5NjVEMDAwN0UxNEYgLyogU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NTI3LDYg
KzQ1NDQsNyBAQAogCQkJCUJDRUE0NzlDMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nwcm9wZXJ0aWVz
LmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VBNDc5RjA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
dmFsdWVzLmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0M4Q0ZDRDA5ODZDRDI0MDAxNDBCRjIg
LyogQ29sb3JEYXRhLmdwZXJmIGluIFJlc291cmNlcyAqLywKKwkJCQlBNzYzOEE5MjA5OTU5MkMz
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNTQ2NCw2ICs1NDgyLDggQEAKIAkJCQk2NTgyQTE3ODA5OTk5RUEwMDBCRUVCNkQg
LyogUVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMjE1NEVFMDk5QTExQTgwMDM0M0RG
OCAvKiBKU0RPTUNvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMTU0RUYwOTlBMTFBODAw
MzQzREY4IC8qIEpTRE9NRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NjM4QThDMDk5
NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tIGluIFNvdXJjZXMgKi8s
CisJCQkJQTc2MzhBOTgwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTI3MjcpCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDcgKzI1NSw3IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZp
Y2VRdWEKICAgICBjYXNlIEZFX0NPTVBPU0lURTogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb21wb3Np
dGVRdWFydHooKTsKIC8vICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCiAgICAgY2FzZSBGRV9E
SUZGVVNFX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
eigpOwotLy8gIGNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCisgICAgY2FzZSBGRV9ESVNQTEFD
RU1FTlRfTUFQOiByZXR1cm4gbmV3IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0eigpOwog
ICAgIGNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKICAg
ICBjYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVy
UXVhcnR6KCk7CiAgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVJbWFnZVF1
YXJ0eigpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5oCShyZXZpc2lvbiAxMjcyNykKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBR
dWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFTWVyZ2VRdWFydHogOiBwdWJsaWMg
S0NhbnZhc0ZFTWVyZ2UgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5jaWtlcm5lbAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisvKgorICogUGVy
Zm9ybXMgdGhlIHRyYW5zZm9ybWF0aW9uOgorICogUCcoeCx5KSA8LSBQKCB4ICsgc2NhbGUgKiAo
WEMoeCx5KSAtIC41KSwgeSArIHNjYWxlICogKFlDKHgseSkgLSAuNSkpCisgKgorICogeC95Y2hh
bm5lbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaGFubmVs
IGZvciB4IGFuZAorICogeSBkaXNwbGFjZW1lbnQuICBIZW5jZSBlYWNoIHZlY3RvciBzaG91bGQg
aGF2ZSBvbmx5IG9uZSBub24temVybyBlbGVtZW50LAorICogd2hpY2ggc2hvdWxkIGhhdmUgdGhl
IHZhbHVlIDEuMC4KKyAqLworCitrZXJuZWwgdmVjNCBkaXNwbGFjZW1lbnRNYXAoc2FtcGxlciBp
bWFnZSwgc2FtcGxlciBtYXAsIHZlYzQgeGNoYW5uZWwsIHZlYzQgeWNoYW5uZWwsIGZsb2F0IHNj
YWxlKQoreworICAgIHZlYzIgc2FtcGxlUG9zID0gc2FtcGxlckNvb3JkKGltYWdlKTsKKyAgICB2
ZWM0IFhDWUMgPSBzYW1wbGUobWFwLCBzYW1wbGVQb3MpOworICAgIGZsb2F0IHhjID0gZG90KFhD
WUMsIHhjaGFubmVsKTsKKyAgICBmbG9hdCB5YyA9IGRvdChYQ1lDLCB5Y2hhbm5lbCk7CisgICAg
c2FtcGxlUG9zLnggKz0gc2NhbGUqKHhjLTAuNSk7CisgICAgc2FtcGxlUG9zLnkgKz0gc2NhbGUq
KHljLTAuNSk7CisgICAgcmV0dXJuIHNhbXBsZShpbWFnZSwgc2FtcGxlUG9zKTsKK30KSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQu
Y2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1h
Z2UuaD4KKworQGludGVyZmFjZSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlciA6IENJRmlsdGVyIHsK
KyAgICBDSUltYWdlICAqaW5wdXRJbWFnZTsKKyAgICBDSUltYWdlICAqaW5wdXREaXNwbGFjZW1l
bnRNYXA7CisgICAgQ0lWZWN0b3IgKmlucHV0WENoYW5uZWxTZWxlY3RvcjsKKyAgICBDSVZlY3Rv
ciAqaW5wdXRZQ2hhbm5lbFNlbGVjdG9yOworICAgIE5TTnVtYmVyICppbnB1dFNjYWxlOworfQor
CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm0JKHJldmlzaW9uIDApCisrKyBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxv
amgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldLRGlz
cGxhY2VtZW50TWFwRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqZGlzcGxhY2VtZW50TWFw
RmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIK
KworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFt
ZTpAIldLRGlzcGxhY2VtZW50TWFwRmlsdGVyIiAgCisgICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3RvcjpzZWxmCisgICAgICAgICAgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICBA
IldlYktpdCBEaXNwbGFjZW1lbnQgTWFwIEZpbHRlciIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3Bs
YXlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpr
Q0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxu
aWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAg
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDoxLjAgWTowLjAgWjowLjAgVzowLjBd
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQsIG5pbF0sIEAi
aW5wdXRYQ2hhbm5lbFNlbGVjdG9yIiwgICAKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MC4wIFk6MS4wIFo6MC4wIFc6MC4wXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlucHV0WUNo
YW5uZWxTZWxlY3RvciIsICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRl
RGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTY2FsZSIsCisgICAgICAgICAgICAgICAgICAgICBu
aWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1l
Cit7CisgICAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKwor
LSAoaWQpaW5pdAoreworICAgIGlmICghZGlzcGxhY2VtZW50TWFwRmlsdGVyKSB7CisgICAgICAg
IE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3Nd
XTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJj
ZTpAIldLRGlzcGxhY2VtZW50TWFwRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAg
ICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2Vy
bmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dp
dGhTdHJpbmc6Y29kZV07CisgICAgICAgIGRpc3BsYWNlbWVudE1hcEZpbHRlciA9IFtba2VybmVs
cyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5p
dF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBh
cHBseTpkaXNwbGFjZW1lbnRNYXBGaWx0ZXIsIGlucHV0SW1hZ2UsIGlucHV0RGlzcGxhY2VtZW50
TWFwLCBpbnB1dFhDaGFubmVsU2VsZWN0b3IsIGlucHV0WUNoYW5uZWxTZWxlY3RvciwgaW5wdXRT
Y2FsZSwgbmlsXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52
YXNGaWx0ZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNGaWx0ZXJRdWFydHoubW0JKHJldmlzaW9uIDEyNzI3KQorKysga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIlF1YXJ0
elN1cHBvcnQuaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIldLRGlzcGxh
Y2VtZW50TWFwRmlsdGVyLmgiCiAjaW1wb3J0ICJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgog
I2ltcG9ydCAiV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgiCiAjaW1wb3J0ICJXS1Nwb3RMaWdo
dEZpbHRlci5oIgpAQCAtMzkyLDYgKzM5Myw0MCBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFQ29tcG9z
aXRlUXVhcnR6OjpnZXRDCiAgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK3N0YXRp
YyBpbmxpbmUgQ0lWZWN0b3IgKmdldFZlY3RvckZvckNoYW5uZWwoaW50IGlkeCl7CisgICAgc3dp
dGNoKGlkeCl7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3Rvcldp
dGhYOjEuMCBZOjAuMCBaOjAuMCBXOjAuMF07CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4g
W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAuMCBZOjEuMCBaOjAuMCBXOjAuMF07ICAgICAgICAgICAg
CisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhYOjAuMCBZ
OjAuMCBaOjEuMCBXOjAuMF07CisgICAgY2FzZSAzOgorICAgICAgICByZXR1cm4gW0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAuMCBZOjAuMCBaOjAuMCBXOjEuMF07CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAgWTowLjAgWjowLjAgVzowLjBdOwor
ICAgIH0KK30KKworQ0lGaWx0ZXIgKktDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0ejo6Z2V0
Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAg
IENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAg
W1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyIGNsYXNzXTsKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJXS0Rpc3BsYWNlbWVudE1hcEZpbHRlciJdOyAgICAKKyAgICBbZmls
dGVyIHNldERlZmF1bHRzXTsKKyAgICBDSUltYWdlICppbnB1dEltYWdlID0gcXVhcnR6RmlsdGVy
LT5pbnB1dEltYWdlKHRoaXMpOworICAgIENJSW1hZ2UgKmRpc3BsYWNlbWVudE1hcCA9IHF1YXJ0
ekZpbHRlci0+aW1hZ2VGb3JOYW1lKGluMigpKTsKKyAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQo
aW5wdXRJbWFnZSk7CisgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGRpc3BsYWNlbWVudE1hcCk7
CisgICAgW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZvcktleTpAImlucHV0SW1hZ2UiXTsK
KyAgICBbZmlsdGVyIHNldFZhbHVlOmRpc3BsYWNlbWVudE1hcCBmb3JLZXk6QCJpbnB1dERpc3Bs
YWNlbWVudE1hcCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Z2V0VmVjdG9yRm9yQ2hhbm5lbCh4
Q2hhbm5lbFNlbGVjdG9yKCkpIGZvcktleTpAImlucHV0WENoYW5uZWxTZWxlY3RvciJdOworICAg
IFtmaWx0ZXIgc2V0VmFsdWU6Z2V0VmVjdG9yRm9yQ2hhbm5lbCh5Q2hhbm5lbFNlbGVjdG9yKCkp
IGZvcktleTpAImlucHV0WUNoYW5uZWxTZWxlY3RvciJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFNjYWxlIl07
CisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47Cit9CisKIHN0YXRpYyBpbmxpbmUgQ0lGaWx0
ZXIgKmdldFBvaW50TGlnaHRWZWN0b3JzKENJRmlsdGVyICogbm9ybWFscywgQ0lWZWN0b3IgKiBs
aWdodFBvc2l0aW9uLCBmbG9hdCBzdXJmYWNlU2NhbGUpCiB7CiAgICAgQ0lGaWx0ZXIgKmZpbHRl
cjsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52
YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCShyZXZpc2lvbiAxMjcyNykKKysrIGtjYW52YXMvS0NhbnZh
c0ZpbHRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsOCArMzQzLDggQEAgUVRleHRTdHJl
YW0gJktDYW52YXNGRURpc3BsYWNlbWVudE1hcDo6ZQogICAgIGlmICghaW4yKCkuaXNFbXB0eSgp
KQogICAgICAgICB0cyA8PCAiIFtpbjI9IiA8PCBpbjIoKSA8PCAiXSI7ICAgICAgICAKICAgICB0
cyA8PCAiIFtzY2FsZT0iIDw8IG1fc2NhbGUgPDwgIl0iCi0gICAgICAgIDw8ICIgW3ggY2hhbm5l
bCBzZWxlY3Rvcj0iIDw8IG1fWENoYW5uZWxTZWxlY3RvciA8PCAiXSIKLSAgICAgICAgPDwgIiBb
eSBjaGFubmVsIHNlbGVjdG9yPSIgPDwgbV9YQ2hhbm5lbFNlbGVjdG9yIDw8ICJdIjsKKyAgICAg
ICAgPDwgIiBbeCBjaGFubmVsIHNlbGVjdG9yPSIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJd
IgorICAgICAgICA8PCAiIFt5IGNoYW5uZWwgc2VsZWN0b3I9IiA8PCBtX3lDaGFubmVsU2VsZWN0
b3IgPDwgIl0iOwogICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBrY2FudmFzL0tDYW52YXNGaWx0
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCShyZXZpc2lvbiAx
MjcyNykKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ3
LDE2ICs0NDcsMjcgQEAgdHlwZWRlZiBlbnVtIHsKIGNsYXNzIEtDYW52YXNGRURpc3BsYWNlbWVu
dE1hcCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CisgICAgS0NhbnZh
c0ZFRGlzcGxhY2VtZW50TWFwKCkgOiBtX3hDaGFubmVsU2VsZWN0b3IoQ1NfUkVEKSwgbV95Q2hh
bm5lbFNlbGVjdG9yKENTX1JFRCksIG1fc2NhbGUoMCkge30KKyAgICAKICAgICBRU3RyaW5nIGlu
MigpIGNvbnN0IHsgcmV0dXJuIG1faW4yOyB9CiAgICAgdm9pZCBzZXRJbjIoY29uc3QgUVN0cmlu
ZyAmaW4yKSB7IG1faW4yID0gaW4yOyB9CisgICAgCisgICAgS0NDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7IH0K
KyAgICB2b2lkIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgS0NDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IpIHsgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3Rv
cjsgfQorICAgIAorICAgIEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRZQ2hhbm5l
bFNlbGVjdG9yKGNvbnN0IEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKSB7
IG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7IH0KIAorICAgIGZsb2F0IHNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQg
c2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxlOyB9CisgICAgCiAgICAgUVRleHRTdHJlYW0gJmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgot
ICAgIGZsb2F0IG1fc2NhbGU7Ci0gICAgS0NDaGFubmVsU2VsZWN0b3JUeXBlIG1fWENoYW5uZWxT
ZWxlY3RvcjsKLSAgICBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgbV9ZQ2hhbm5lbFNlbGVjdG9yOwog
ICAgIFFTdHJpbmcgbV9pbjI7CisgICAgS0NDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxT
ZWxlY3RvcjsKKyAgICBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5lbFNlbGVjdG9yOwor
ICAgIGZsb2F0IG1fc2NhbGU7CiB9OwogCiBjbGFzcyBLQ2FudmFzRkVGbG9vZCA6IHB1YmxpYyBL
Q2FudmFzRmlsdGVyRWZmZWN0CkluZGV4OiBrc3ZnMi9zdmcvc3ZndGFncy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvc3ZndGFncy5pbgkocmV2aXNpb24gMTI3MjcpCisrKyBrc3ZnMi9zdmcv
c3ZndGFncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQCBmZUNvbXBvbmVudFRy
YW5zZmVyCiBmZUNvbXBvc2l0ZQogI2ZlQ29udm9sdmVNYXRyaXgKIGZlRGlmZnVzZUxpZ2h0aW5n
Ci0jZmVEaXNwbGFjZW1lbnRNYXAKK2ZlRGlzcGxhY2VtZW50TWFwCiBmZURpc3RhbnRMaWdodAog
ZmVGbG9vZAogZmVGdW5jQQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50SW1wbC5oCShyZXZpc2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudEltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5u
ej4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKworI2lmbmRlZiBLU1ZHX1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudEltcGxfSAorI2lmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmgiCisjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMu
aCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7
CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVk
RW51bWVyYXRpb25JbXBsOworICAgIAorICAgIGNsYXNzIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1w
bAorICAgIHsKK3B1YmxpYzoKKyAgICAgICAgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1w
bChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwg
KmRvYyk7CisgICAgICAgIHZpcnR1YWwgflNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwo
KTsKKyAgICAgICAgCisgICAgICAgIC8vICdTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQnIGZ1
bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZFN0cmluZ0ltcGwqIGluMSgpIGNvbnN0OworICAg
ICAgICBTVkdBbmltYXRlZFN0cmluZ0ltcGwqIGluMigpIGNvbnN0OworICAgICAgICBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uSW1wbCogeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0OworICAgICAgICBT
VkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbCogeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0OworICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckltcGwqIHNjYWxlKCkgY29uc3Q7CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHN0cmluZ1RvQ2hhbm5lbChLRE9NOjpE
T01TdHJpbmcgJmtleSk7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVt
ZW50SW1wbCcKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006
Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBL
Q2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIGZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgICAgICAK
K3ByaXZhdGU6CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4g
bV9pbjE7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4gbV9p
bjI7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPiBt
X3hDaGFubmVsU2VsZWN0b3I7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51
bWVyYXRpb25JbXBsPiBtX3lDaGFubmVsU2VsZWN0b3I7CisgICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9zY2FsZTsKKyAgICAgICAgbXV0YWJsZSBLQ2FudmFz
RkVEaXNwbGFjZW1lbnRNYXAgKm1fZmlsdGVyRWZmZWN0OworICAgIH07Cit9OworCisjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyBLU1ZHX1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGxfSAorCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5u
ej4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBT
VkdfU1VQUE9SVAorI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2Nv
cmUvQXR0ckltcGwuaD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJrc3ZnLmgiCisjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbklt
cGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdB
bmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwu
aCIKKwordXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGw6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsKiBkb2MpIDogCitTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsKHRhZ05hbWUsIGRvYykKK3sKKyAgICBtX2Zp
bHRlckVmZmVjdCA9IDA7Cit9CisKK1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6On5T
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsKCkKK3sKKyAgICBkZWxldGUgbV9maWx0ZXJF
ZmZlY3Q7Cit9CisKK1NWR0FuaW1hdGVkU3RyaW5nSW1wbCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50SW1wbDo6aW4xKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCogZHVt
bXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1f
aW4xLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkU3RyaW5nSW1wbCogU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbDo6aW4yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1w
bCogZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0lt
cGw+KG1faW4yLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKK3sK
KyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCogZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbD4obV94Q2hhbm5lbFNlbGVjdG9yLCBkdW1t
eSk7Cit9CisKK1NWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsOjp5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRF
bGVtZW50SW1wbCogZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uSW1wbD4obV95Q2hhbm5lbFNlbGVjdG9yLCBkdW1teSk7Cit9CisKK1NWR0Fu
aW1hdGVkTnVtYmVySW1wbCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6c2NhbGUo
KSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9zY2FsZSwgZHVtbXkpOwor
fQorCitLQ0NoYW5uZWxTZWxlY3RvclR5cGUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1w
bDo6c3RyaW5nVG9DaGFubmVsKEtET006OkRPTVN0cmluZyYga2V5KQoreworICAgIGlmKGtleSA9
PSAiUiIpCisgICAgICAgIHJldHVybiBDU19SRUQ7CisgICAgZWxzZSBpZihrZXkgPT0gIkciKQor
ICAgICAgICByZXR1cm4gQ1NfR1JFRU47CisgICAgZWxzZSBpZihrZXkgPT0gIkIiKQorICAgICAg
ICByZXR1cm4gQ1NfQkxVRTsKKyAgICBlbHNlIGlmKGtleSA9PSAiQSIpCisgICAgICAgIHJldHVy
biBDU19BTFBIQTsKKyAgICAvL2Vycm9yCisgICAgcmV0dXJuIChLQ0NoYW5uZWxTZWxlY3RvclR5
cGUpLTE7Cit9CisKK3ZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKK3sKKyAgICBL
RE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHhDaGFubmVsU2Vs
ZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5uZWwodmFsdWUpKTsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAg
ICB5Q2hhbm5lbFNlbGVjdG9yKCktPnNldEJhc2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAg
IGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQorICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1
ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVB
dHRyKQorICAgICAgICBzY2FsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitLQ2FudmFzRkVEaXNw
bGFjZW1lbnRNYXAqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OmZpbHRlckVmZmVj
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAgKj4oUVBhaW50ZXI6
OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01B
UCkpOworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybiAwOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUp
KHhDaGFubmVsU2VsZWN0b3IoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3Rv
cigpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3Ry
aW5nKGluMSgpLT5iYXNlVmFsKCkpLnFzdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluMihLRE9NOjpET01TdHJpbmcoaW4yKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUoKS0+YmFzZVZhbCgpKTsKKyAgICBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVj
dDsKK30KKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAo=
</data>
<flag name="review"
          id="1569"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6417</attachid>
            <date>2006-02-11 17:46:47 -0800</date>
            <delta_ts>2006-02-11 19:00:47 -0800</delta_ts>
            <desc>Fixed filter kernel</desc>
            <filename>displacementmap.patch</filename>
            <type>text/plain</type>
            <size>28537</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNzI3KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNiAr
NDI1LDExIEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1
OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4MjQ1
RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4c2x0
LmR5bGliICovOyB9OworCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
ICovOyB9OworCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tICovOyB9
OworCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKKwkJQTc2MzhBOTcwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmggKi87IH07CisJCUE3NjM4QTk4MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0EwOTczNzRGNjAw
RDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MTM2OUNCMDk3Mzc0RjYwMEQ3NDQ2MyAv
KiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudElt
cGwuaCAqLzsgfTsKQEAgLTEyNjYsNiArMTI3MSwxMSBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAx
RTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE4QTA5
OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE5
NjA5OTU5NjVEMDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMEUzOTMw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEw
RTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNUcmVlRGVi
dWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0RvY3VtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0yNzMyLDYgKzI3NDIsOCBAQAogCQkJCUE4QzBGODQyMDg5NzAxRjMwMEJBNTExNCAvKiBT
VkdFbGxpcHNlRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0NTA4OTcwMUYzMDBCQTUxMTQg
LyogU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ2
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oICov
LAorCQkJCUE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmggKi8sCisJCQkJQTc2MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ3MDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ4MDg5NzAx
RjMwMEJBNTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0OTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnRJbXBsLmNwcCAqLywKQEAg
LTMwMDIsNiArMzAxNCw5IEBACiAJCUE4QzMyOTFGMDkzQkI3MzIwMDBCOUNBQyAvKiBmaWx0ZXJz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzYzOEE4
OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLywKKwkJCQlB
NzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLywK
KwkJCQlBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgKi8sCiAJCQkJQThDMzI5MjAwOTNCQjczMjAwMEI5Q0FDIC8qIFdLQXJpdGhtZXRp
Y0ZpbHRlci5jaWtlcm5lbCAqLywKIAkJCQlBOEMzMjkyMTA5M0JCNzMyMDAwQjlDQUMgLyogV0tB
cml0aG1ldGljRmlsdGVyLmggKi8sCiAJCQkJQThDMzI5MjIwOTNCQjczMjAwMEI5Q0FDIC8qIFdL
QXJpdGhtZXRpY0ZpbHRlci5tICovLApAQCAtNDM2Miw2ICs0Mzc3LDggQEAKIAkJCQlCQzZCN0VD
RjA5OThBQzdGMDA1Mjg2N0IgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
ODJBMTQwMDk5OTlDRDYwMEJFRUI2RCAvKiBRU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTgyQTE2MDA5OTk5RDZEMDBCRUVCNkQgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc2MzhBOEIwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzYzOEE5NzA5OTU5NjVEMDAwN0UxNEYgLyogU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NTI3LDYg
KzQ1NDQsNyBAQAogCQkJCUJDRUE0NzlDMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nwcm9wZXJ0aWVz
LmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VBNDc5RjA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
dmFsdWVzLmluIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0M4Q0ZDRDA5ODZDRDI0MDAxNDBCRjIg
LyogQ29sb3JEYXRhLmdwZXJmIGluIFJlc291cmNlcyAqLywKKwkJCQlBNzYzOEE5MjA5OTU5MkMz
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNTQ2NCw2ICs1NDgyLDggQEAKIAkJCQk2NTgyQTE3ODA5OTk5RUEwMDBCRUVCNkQg
LyogUVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMjE1NEVFMDk5QTExQTgwMDM0M0RG
OCAvKiBKU0RPTUNvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMTU0RUYwOTlBMTFBODAw
MzQzREY4IC8qIEpTRE9NRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NjM4QThDMDk5
NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tIGluIFNvdXJjZXMgKi8s
CisJCQkJQTc2MzhBOTgwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTI3MjcpCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDcgKzI1NSw3IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZp
Y2VRdWEKICAgICBjYXNlIEZFX0NPTVBPU0lURTogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb21wb3Np
dGVRdWFydHooKTsKIC8vICBjYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCiAgICAgY2FzZSBGRV9E
SUZGVVNFX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
eigpOwotLy8gIGNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCisgICAgY2FzZSBGRV9ESVNQTEFD
RU1FTlRfTUFQOiByZXR1cm4gbmV3IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0eigpOwog
ICAgIGNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKICAg
ICBjYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVy
UXVhcnR6KCk7CiAgICAgY2FzZSBGRV9JTUFHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVJbWFnZVF1
YXJ0eigpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5oCShyZXZpc2lvbiAxMjcyNykKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBR
dWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFTWVyZ2VRdWFydHogOiBwdWJsaWMg
S0NhbnZhc0ZFTWVyZ2UgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5jaWtlcm5lbAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisvKgorICogUGVy
Zm9ybXMgdGhlIHRyYW5zZm9ybWF0aW9uOgorICogUCcoeCx5KSA8LSBQKCB4ICsgc2NhbGUgKiAo
WEMoeCx5KSAtIC41KSwgeSArIHNjYWxlICogKFlDKHgseSkgLSAuNSkpCisgKgorICogeC95Y2hh
bm5lbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaGFubmVs
IGZvciB4IGFuZAorICogeSBkaXNwbGFjZW1lbnQuICBIZW5jZSBlYWNoIHZlY3RvciBzaG91bGQg
aGF2ZSBvbmx5IG9uZSBub24temVybyBlbGVtZW50LAorICogd2hpY2ggc2hvdWxkIGhhdmUgdGhl
IHZhbHVlIDEuMC4KKyAqLworCitrZXJuZWwgdmVjNCBkaXNwbGFjZW1lbnRNYXAoc2FtcGxlciBp
bWFnZSwgc2FtcGxlciBtYXAsIHZlYzQgeGNoYW5uZWwsIHZlYzQgeWNoYW5uZWwsIGZsb2F0IHNj
YWxlKQoreworICAgIHZlYzIgc2FtcGxlUG9zID0gc2FtcGxlckNvb3JkKGltYWdlKTsKKyAgICB2
ZWM0IFhDWUMgPSBzYW1wbGUobWFwLCBzYW1wbGVyQ29vcmQobWFwKSk7CisgICAgZmxvYXQgeGMg
PSBkb3QoWENZQywgeGNoYW5uZWwpOworICAgIGZsb2F0IHljID0gZG90KFhDWUMsIHljaGFubmVs
KTsKKyAgICBzYW1wbGVQb3MueCArPSBzY2FsZSooeGMtMC41KTsKKyAgICBzYW1wbGVQb3MueSAt
PSBzY2FsZSooeWMtMC41KTsKKyAgICByZXR1cm4gc2FtcGxlKGltYWdlLCBzYW1wbGVQb3MpOwor
fQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5oCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZA
c3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3Jl
L0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyIDogQ0lG
aWx0ZXIgeworICAgIENJSW1hZ2UgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICppbnB1dERp
c3BsYWNlbWVudE1hcDsKKyAgICBDSVZlY3RvciAqaW5wdXRYQ2hhbm5lbFNlbGVjdG9yOworICAg
IENJVmVjdG9yICppbnB1dFlDaGFubmVsU2VsZWN0b3I7CisgICAgTlNOdW1iZXIgKmlucHV0U2Nh
bGU7Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlz
cGxhY2VtZW50TWFwRmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubQkocmV2aXNpb24gMCkKKysrIGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm0JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVy
IEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCAiV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpkaXNwbGFj
ZW1lbnRNYXBGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS0Rpc3BsYWNlbWVudE1h
cEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJG
aWx0ZXJOYW1lOkAiV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIiICAKKyAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0cnVjdG9yOnNlbGYKKyAgICAgICAgICAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOltO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAg
ICAgICAgIEAiV2ViS2l0IERpc3BsYWNlbWVudCBNYXAgRmlsdGVyIiwga0NJQXR0cmlidXRlRmls
dGVyRGlzcGxheU5hbWUsCisgICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3RzOmtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJl
UGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgICAgICAg
ICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOjEuMCBZOjAuMCBaOjAu
MCBXOjAuMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwg
bmlsXSwgQCJpbnB1dFhDaGFubmVsU2VsZWN0b3IiLCAgIAorICAgICAgICAgICAgICAgICAgICAg
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowLjAgWToxLjAgWjowLjAgVzowLjBd
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQsIG5pbF0sIEAi
aW5wdXRZQ2hhbm5lbFNlbGVjdG9yIiwgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lB
dHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFNjYWxlIiwKKyAgICAgICAgICAgICAg
ICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmlu
ZyAqKW5hbWUKK3sKKyAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworfQorCistIChpZClpbml0Cit7CisgICAgaWYgKCFkaXNwbGFjZW1lbnRNYXBGaWx0ZXIpIHsK
KyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2Vs
ZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZv
clJlc291cmNlOkAiV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07
CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09m
RmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBr
ZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgZGlzcGxhY2VtZW50TWFwRmlsdGVyID0g
W1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtz
dXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0dXJu
IFtzZWxmIGFwcGx5OmRpc3BsYWNlbWVudE1hcEZpbHRlciwgaW5wdXRJbWFnZSwgaW5wdXREaXNw
bGFjZW1lbnRNYXAsIGlucHV0WENoYW5uZWxTZWxlY3RvciwgaW5wdXRZQ2hhbm5lbFNlbGVjdG9y
LCBpbnB1dFNjYWxlLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFy
dHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQkocmV2aXNpb24gMTI3MjcpCisrKyBrY2FudmFz
L2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9y
dCAiUXVhcnR6U3VwcG9ydC5oIgogI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAi
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCIKICNpbXBvcnQgIldLRGlmZnVzZUxpZ2h0aW5nRmls
dGVyLmgiCiAjaW1wb3J0ICJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaCIKICNpbXBvcnQgIldL
U3BvdExpZ2h0RmlsdGVyLmgiCkBAIC0zOTIsNiArMzkzLDQwIEBAIENJRmlsdGVyICpLQ2FudmFz
RkVDb21wb3NpdGVRdWFydHo6OmdldEMKICAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0K
IAorc3RhdGljIGlubGluZSBDSVZlY3RvciAqZ2V0VmVjdG9yRm9yQ2hhbm5lbChpbnQgaWR4KXsK
KyAgICBzd2l0Y2goaWR4KXsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6MS4wIFk6MC4wIFo6MC4wIFc6MC4wXTsKKyAgICBjYXNlIDE6CisgICAgICAg
IHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MC4wIFk6MS4wIFo6MC4wIFc6MC4wXTsgICAg
ICAgICAgICAKKyAgICBjYXNlIDI6CisgICAgICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6MC4wIFk6MC4wIFo6MS4wIFc6MC4wXTsKKyAgICBjYXNlIDM6CisgICAgICAgIHJldHVybiBb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6MC4wIFk6MC4wIFo6MC4wIFc6MS4wXTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhYOjAuMCBZOjAuMCBaOjAuMCBX
OjAuMF07CisgICAgfQorfQorCitDSUZpbHRlciAqS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwUXVh
cnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0
Cit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UzsKKyAgICBbV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIgY2xhc3NdOworICAgIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLRGlzcGxhY2VtZW50TWFwRmlsdGVyIl07ICAgIAor
ICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIENJSW1hZ2UgKmlucHV0SW1hZ2UgPSBxdWFy
dHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7CisgICAgQ0lJbWFnZSAqZGlzcGxhY2VtZW50TWFw
ID0gcXVhcnR6RmlsdGVyLT5pbWFnZUZvck5hbWUoaW4yKCkpOworICAgIEZFX1FVQVJUWl9DSEVD
S19JTlBVVChpbnB1dEltYWdlKTsKKyAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQoZGlzcGxhY2Vt
ZW50TWFwKTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UgZm9yS2V5OkAiaW5wdXRJ
bWFnZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6ZGlzcGxhY2VtZW50TWFwIGZvcktleTpAImlu
cHV0RGlzcGxhY2VtZW50TWFwIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpnZXRWZWN0b3JGb3JD
aGFubmVsKHhDaGFubmVsU2VsZWN0b3IoKSkgZm9yS2V5OkAiaW5wdXRYQ2hhbm5lbFNlbGVjdG9y
Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpnZXRWZWN0b3JGb3JDaGFubmVsKHlDaGFubmVsU2Vs
ZWN0b3IoKSkgZm9yS2V5OkAiaW5wdXRZQ2hhbm5lbFNlbGVjdG9yIl07CisgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNjYWxlKCldIGZvcktleTpAImlucHV0
U2NhbGUiXTsKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKwogc3RhdGljIGlubGlu
ZSBDSUZpbHRlciAqZ2V0UG9pbnRMaWdodFZlY3RvcnMoQ0lGaWx0ZXIgKiBub3JtYWxzLCBDSVZl
Y3RvciAqIGxpZ2h0UG9zaXRpb24sIGZsb2F0IHN1cmZhY2VTY2FsZSkKIHsKICAgICBDSUZpbHRl
ciAqZmlsdGVyOwpJbmRleDoga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHAJKHJldmlzaW9uIDEyNzI3KQorKysga2NhbnZh
cy9LQ2FudmFzRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw4ICszNDMsOCBAQCBR
VGV4dFN0cmVhbSAmS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwOjplCiAgICAgaWYgKCFpbjIoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHRzIDw8ICIgW2luMj0iIDw8IGluMigpIDw8ICJdIjsgICAgICAg
IAogICAgIHRzIDw8ICIgW3NjYWxlPSIgPDwgbV9zY2FsZSA8PCAiXSIKLSAgICAgICAgPDwgIiBb
eCBjaGFubmVsIHNlbGVjdG9yPSIgPDwgbV9YQ2hhbm5lbFNlbGVjdG9yIDw8ICJdIgotICAgICAg
ICA8PCAiIFt5IGNoYW5uZWwgc2VsZWN0b3I9IiA8PCBtX1hDaGFubmVsU2VsZWN0b3IgPDwgIl0i
OworICAgICAgICA8PCAiIFt4IGNoYW5uZWwgc2VsZWN0b3I9IiA8PCBtX3hDaGFubmVsU2VsZWN0
b3IgPDwgIl0iCisgICAgICAgIDw8ICIgW3kgY2hhbm5lbCBzZWxlY3Rvcj0iIDw8IG1feUNoYW5u
ZWxTZWxlY3RvciA8PCAiXSI7CiAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IGtjYW52YXMvS0Nh
bnZhc0ZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJKHJl
dmlzaW9uIDEyNzI3KQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NDcsMTYgKzQ0NywyNyBAQCB0eXBlZGVmIGVudW0gewogY2xhc3MgS0NhbnZhc0ZFRGlz
cGxhY2VtZW50TWFwIDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsKIHB1YmxpYzoKKyAg
ICBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAoKSA6IG1feENoYW5uZWxTZWxlY3RvcihDU19SRUQp
LCBtX3lDaGFubmVsU2VsZWN0b3IoQ1NfUkVEKSwgbV9zY2FsZSgwKSB7fQorICAgIAogICAgIFFT
dHJpbmcgaW4yKCkgY29uc3QgeyByZXR1cm4gbV9pbjI7IH0KICAgICB2b2lkIHNldEluMihjb25z
dCBRU3RyaW5nICZpbjIpIHsgbV9pbjIgPSBpbjI7IH0KKyAgICAKKyAgICBLQ0NoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvcjsgfQorICAgIHZvaWQgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBLQ0NoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcikgeyBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5l
bFNlbGVjdG9yOyB9CisgICAgCisgICAgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3I7IH0KKyAgICB2b2lkIHNl
dFlDaGFubmVsU2VsZWN0b3IoY29uc3QgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IpIHsgbV95Q2hhbm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxlY3RvcjsgfQogCisgICAg
ZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CisgICAgdm9pZCBzZXRTY2Fs
ZShmbG9hdCBzY2FsZSkgeyBtX3NjYWxlID0gc2NhbGU7IH0KKyAgICAKICAgICBRVGV4dFN0cmVh
bSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKICAgICAKIHBy
aXZhdGU6Ci0gICAgZmxvYXQgbV9zY2FsZTsKLSAgICBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgbV9Y
Q2hhbm5lbFNlbGVjdG9yOwotICAgIEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX1lDaGFubmVsU2Vs
ZWN0b3I7CiAgICAgUVN0cmluZyBtX2luMjsKKyAgICBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgbV94
Q2hhbm5lbFNlbGVjdG9yOworICAgIEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2Vs
ZWN0b3I7CisgICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKIGNsYXNzIEtDYW52YXNGRUZsb29kIDog
cHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKSW5kZXg6IGtzdmcyL3N2Zy9zdmd0YWdzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9zdmd0YWdzLmluCShyZXZpc2lvbiAxMjcyNykKKysrIGtz
dmcyL3N2Zy9zdmd0YWdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBAIGZlQ29t
cG9uZW50VHJhbnNmZXIKIGZlQ29tcG9zaXRlCiAjZmVDb252b2x2ZU1hdHJpeAogZmVEaWZmdXNl
TGlnaHRpbmcKLSNmZURpc3BsYWNlbWVudE1hcAorZmVEaXNwbGFjZW1lbnRNYXAKIGZlRGlzdGFu
dExpZ2h0CiBmZUZsb29kCiBmZUZ1bmNBCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworCisjaWZuZGVmIEtTVkdfU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbF9ICisjaWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKyNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVt
YmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7CisgICAgCisgICAgY2xhc3MgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXNJbXBsCisgICAgeworcHVibGljOgorICAgICAgICBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3Vt
ZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCogaW4xKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCogaW4yKCkgY29uc3Q7CisgICAgICAg
IFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7Cisg
ICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiB5Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCogc2NhbGUoKSBjb25zdDsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgc3RyaW5nVG9DaGFubmVs
KEtET006OkRPTVN0cmluZyAma2V5KTsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJv
bTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CisgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogZmlsdGVyRWZmZWN0KCkgY29uc3Q7Cisg
ICAgICAgIAorcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJp
bmdJbXBsPiBtX2luMTsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmdJ
bXBsPiBtX2luMjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bkltcGw+IG1feENoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbkltcGw+IG1feUNoYW5uZWxTZWxlY3RvcjsKKyAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NjYWxlOworICAgICAgICBtdXRhYmxl
IEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqbV9maWx0ZXJFZmZlY3Q7CisgICAgfTsKK307CisK
KyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vIEtTVkdfU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbF9ICisKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI4IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2lmIFNWR19TVVBQT1JUCisjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KKworI2luY2x1ZGUg
PGtkb20vY29yZS9BdHRySW1wbC5oPgorCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzLmg+Cisj
aW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1l
cmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nSW1wbC5oIgorI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTnVtYmVySW1wbC5oIgorI2luY2x1ZGUgIlNWR0RPTUltcGxlbWVudGF0
aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50SW1wbDo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbChjb25zdCBLRE9N
OjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwqIGRvYykgOiAKK1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwodGFnTmFtZSwgZG9jKQorewor
ICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKK30KKworU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
SW1wbDo6flNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwoKQoreworICAgIGRlbGV0ZSBt
X2ZpbHRlckVmZmVjdDsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsKiBTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnRJbXBsOjppbjEoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJ
bXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5n
SW1wbD4obV9pbjEsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjppbjIoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVs
ZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
U3RyaW5nSW1wbD4obV9pbjIsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbklt
cGwqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OnhDaGFubmVsU2VsZWN0b3IoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3hDaGFubmVsU2VsZWN0
b3IsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGwqIFNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudEltcGw6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPihtX3lDaGFubmVsU2VsZWN0b3IsIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBs
OjpzY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwqIGR1bW15ID0gMDsK
KyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3NjYWxlLCBk
dW1teSk7Cit9CisKK0tDQ2hhbm5lbFNlbGVjdG9yVHlwZSBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsOjpzdHJpbmdUb0NoYW5uZWwoS0RPTTo6RE9NU3RyaW5nJiBrZXkpCit7CisgICAg
aWYoa2V5ID09ICJSIikKKyAgICAgICAgcmV0dXJuIENTX1JFRDsKKyAgICBlbHNlIGlmKGtleSA9
PSAiRyIpCisgICAgICAgIHJldHVybiBDU19HUkVFTjsKKyAgICBlbHNlIGlmKGtleSA9PSAiQiIp
CisgICAgICAgIHJldHVybiBDU19CTFVFOworICAgIGVsc2UgaWYoa2V5ID09ICJBIikKKyAgICAg
ICAgcmV0dXJuIENTX0FMUEhBOworICAgIC8vZXJyb3IKKyAgICByZXR1cm4gKEtDQ2hhbm5lbFNl
bGVjdG9yVHlwZSktMTsKK30KKwordm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQor
eworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICAgICAgeENo
YW5uZWxTZWxlY3RvcigpLT5zZXRCYXNlVmFsKHN0cmluZ1RvQ2hhbm5lbCh2YWx1ZSkpOworICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIp
CisgICAgICAgIHlDaGFubmVsU2VsZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5uZWwo
dmFsdWUpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikK
KyAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCisgICAgICAgIGluMigpLT5zZXRCYXNl
VmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzY2FsZUF0dHIpCisgICAgICAgIHNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygp
LnRvRG91YmxlKCkpOworICAgIGVsc2UKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK0tDYW52
YXNGRURpc3BsYWNlbWVudE1hcCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6Zmls
dGVyRWZmZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQorICAgICAgICBt
X2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCAqPihR
UGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESVNQTEFD
RU1FTlRfTUFQKSk7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVj
dG9yVHlwZSkoeENoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JUeXBlKSh5Q2hhbm5l
bFNlbGVjdG9yKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihLRE9N
OjpET01TdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4yKEtET006OkRPTVN0cmluZyhpbjIoKS0+YmFzZVZhbCgpKS5xc3RyaW5nKCkp
OworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTY2FsZShzY2FsZSgpLT5iYXNlVmFsKCkpOworICAg
IHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CisgICAgcmV0dXJuIG1fZmls
dGVyRWZmZWN0OworfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6418</attachid>
            <date>2006-02-11 19:00:47 -0800</date>
            <delta_ts>2006-02-12 04:57:17 -0800</delta_ts>
            <desc>Updated to patch against ToT</desc>
            <filename>displacementmap.patch</filename>
            <type>text/plain</type>
            <size>28853</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNzY1KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNiAr
NDMzLDExIEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1
OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4MjQ1
RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4c2x0
LmR5bGliICovOyB9OworCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5o
ICovOyB9OworCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBG
aWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tICovOyB9
OworCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKKwkJQTc2MzhBOTcwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmggKi87IH07CisJCUE3NjM4QTk4MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0EwOTczNzRGNjAw
RDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MTM2OUNCMDk3Mzc0RjYwMEQ3NDQ2MyAv
KiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFGMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudElt
cGwuaCAqLzsgfTsKQEAgLTEyODQsNiArMTI4OSwxMSBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAx
RTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rpc3BsYWNl
bWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE4QTA5
OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzYzOEE5
NjA5OTU5NjVEMDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMEUzOTMw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEw
RTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNUcmVlRGVi
dWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3VtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0RvY3VtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0yNzQ4LDYgKzI3NTgsOCBAQAogCQkJCUE4QzBGODQyMDg5NzAxRjMwMEJBNTExNCAvKiBT
VkdFbGxpcHNlRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0NTA4OTcwMUYzMDBCQTUxMTQg
LyogU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ2
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oICov
LAorCQkJCUE3NjM4QTk1MDk5NTk2NUQwMDA3RTE0RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsLmggKi8sCisJCQkJQTc2MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ3MDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODQ4MDg5NzAx
RjMwMEJBNTExNCAvKiBTVkdGRUJsZW5kRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjg0OTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnRJbXBsLmNwcCAqLywKQEAg
LTMwMTgsNiArMzAzMCw5IEBACiAJCUE4QzMyOTFGMDkzQkI3MzIwMDBCOUNBQyAvKiBmaWx0ZXJz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzYzOEE4
OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLywKKwkJCQlB
NzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLywK
KwkJCQlBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIu
Y2lrZXJuZWwgKi8sCiAJCQkJQThDMzI5MjAwOTNCQjczMjAwMEI5Q0FDIC8qIFdLQXJpdGhtZXRp
Y0ZpbHRlci5jaWtlcm5lbCAqLywKIAkJCQlBOEMzMjkyMTA5M0JCNzMyMDAwQjlDQUMgLyogV0tB
cml0aG1ldGljRmlsdGVyLmggKi8sCiAJCQkJQThDMzI5MjIwOTNCQjczMjAwMEI5Q0FDIC8qIFdL
QXJpdGhtZXRpY0ZpbHRlci5tICovLApAQCAtNDM4NSw2ICs0NDAwLDggQEAKIAkJCQlCQzZCN0VD
RjA5OThBQzdGMDA1Mjg2N0IgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
ODJBMTQwMDk5OTlDRDYwMEJFRUI2RCAvKiBRU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTgyQTE2MDA5OTk5RDZEMDBCRUVCNkQgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc2MzhBOEIwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzYzOEE5NzA5OTU5NjVEMDAwN0UxNEYgLyogU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2
OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbkltcGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1NTBCNkEwMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhSW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjU1MEI2QTIwOTlERjAyNzAwOTBENzgxIC8qIENvbW1lbnRJbXBsLmgg
aW4gSGVhZGVycyAqLywKQEAgLTQ1NTUsNiArNDU3Miw3IEBACiAJCQkJQkNFQTQ3OUMwOTdDQUFD
ODAwOTRDOUU0IC8qIGNzc3Byb3BlcnRpZXMuaW4gaW4gUmVzb3VyY2VzICovLAogCQkJCUJDRUE0
NzlGMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3N2YWx1ZXMuaW4gaW4gUmVzb3VyY2VzICovLAogCQkJ
CUJDQzhDRkNEMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgaW4gUmVzb3VyY2Vz
ICovLAorCQkJCUE3NjM4QTkyMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZp
bHRlci5jaWtlcm5lbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01NDkxLDYgKzU1MDksOCBAQAogCQkJ
CTY1ODJBMTc4MDk5OTlFQTAwMEJFRUI2RCAvKiBRU3RyaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUEyMTU0RUUwOTlBMTFBODAwMzQzREY4IC8qIEpTRE9NQ29yZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTIxNTRFRjA5OUExMUE4MDAzNDNERjggLyogSlNET01FdmVudHMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTc2MzhBOEMwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxhY2Vt
ZW50TWFwRmlsdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQlBNzYzOEE5ODA5OTU5NjVEMDAwN0Ux
NEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2NTUwQjY5RDA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9uSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk2NTUwQjY5RjA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0
YUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2QTEwOTlERjAyNzAwOTBENzgxIC8q
IENvbW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHJldmlzaW9uIDEyNzY1KQorKysg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI1Nyw3ICsyNTcsNyBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVyaW5n
RGV2aWNlUXVhCiAgICAgY2FzZSBGRV9DT01QT1NJVEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFQ29t
cG9zaXRlUXVhcnR6KCk7CiAvLyAgY2FzZSBGRV9DT05WT0xWRV9NQVRSSVg6IAogICAgIGNhc2Ug
RkVfRElGRlVTRV9MSUdIVElORzogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdR
dWFydHooKTsKLS8vICBjYXNlIEZFX0RJU1BMQUNFTUVOVF9NQVA6IAorICAgIGNhc2UgRkVfRElT
UExBQ0VNRU5UX01BUDogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXBRdWFydHoo
KTsKICAgICBjYXNlIEZFX0ZMT09EOiByZXR1cm4gbmV3IEtDYW52YXNGRUZsb29kUXVhcnR6KCk7
CiAgICAgY2FzZSBGRV9HQVVTU0lBTl9CTFVSOiByZXR1cm4gbmV3IEtDYW52YXNGRUdhdXNzaWFu
Qmx1clF1YXJ0eigpOwogICAgIGNhc2UgRkVfSU1BR0U6IHJldHVybiBuZXcgS0NhbnZhc0ZFSW1h
Z2VRdWFydHooKTsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVh
cnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJR
dWFydHouaAkocmV2aXNpb24gMTI3NjUpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZh
c0ZpbHRlclF1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDExIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6
ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogfTsKIAorY2xhc3MgS0NhbnZhc0ZFRGlzcGxhY2VtZW50
TWFwUXVhcnR6IDogcHVibGljIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVh
cnR6RmlsdGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52YXNGRU1lcmdlUXVhcnR6IDogcHVi
bGljIEtDYW52YXNGRU1lcmdlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRD
SUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpJbmRleDog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lr
ZXJuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNw
bGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorLyoKKyAq
IFBlcmZvcm1zIHRoZSB0cmFuc2Zvcm1hdGlvbjoKKyAqIFAnKHgseSkgPC0gUCggeCArIHNjYWxl
ICogKFhDKHgseSkgLSAuNSksIHkgKyBzY2FsZSAqIChZQyh4LHkpIC0gLjUpKQorICoKKyAqIHgv
eWNoYW5uZWwgYXJndW1lbnRzIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgY2hh
bm5lbCBmb3IgeCBhbmQKKyAqIHkgZGlzcGxhY2VtZW50LiAgSGVuY2UgZWFjaCB2ZWN0b3Igc2hv
dWxkIGhhdmUgb25seSBvbmUgbm9uLXplcm8gZWxlbWVudCwKKyAqIHdoaWNoIHNob3VsZCBoYXZl
IHRoZSB2YWx1ZSAxLjAuCisgKgorICovCisKK2tlcm5lbCB2ZWM0IGRpc3BsYWNlbWVudE1hcChz
YW1wbGVyIGltYWdlLCBzYW1wbGVyIG1hcCwgdmVjNCB4Y2hhbm5lbCwgdmVjNCB5Y2hhbm5lbCwg
ZmxvYXQgc2NhbGUpCit7CisgICAgdmVjMiBzYW1wbGVQb3MgPSBzYW1wbGVyQ29vcmQoaW1hZ2Up
OworICAgIHZlYzQgWENZQyA9IHNhbXBsZShtYXAsIHNhbXBsZXJDb29yZChtYXApKTsKKyAgICBm
bG9hdCB4YyA9IGRvdChYQ1lDLCB4Y2hhbm5lbCk7CisgICAgZmxvYXQgeWMgPSBkb3QoWENZQywg
eWNoYW5uZWwpOworICAgIHNhbXBsZVBvcy54ICs9IHNjYWxlKih4Yy0wLjUpOworICAgIC8vZmxp
cCB0aGUgeS1heGlzCisgICAgc2FtcGxlUG9zLnkgLT0gc2NhbGUqKHljLTAuNSk7CisgICAgcmV0
dXJuIHNhbXBsZShpbWFnZSwgc2FtcGxlUG9zKTsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaAkocmV2
aXNpb24gMCkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50
TWFwRmlsdGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4u
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFj
ZSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICAqaW5w
dXRJbWFnZTsKKyAgICBDSUltYWdlICAqaW5wdXREaXNwbGFjZW1lbnRNYXA7CisgICAgQ0lWZWN0
b3IgKmlucHV0WENoYW5uZWxTZWxlY3RvcjsKKyAgICBDSVZlY3RvciAqaW5wdXRZQ2hhbm5lbFNl
bGVjdG9yOworICAgIE5TTnVtYmVyICppbnB1dFNjYWxlOworfQorCitAZW5kCkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzcGxhY2VtZW50TWFw
RmlsdGVyLm0JKHJldmlzaW9uIDApCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9X
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRl
cmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldLRGlzcGxhY2VtZW50TWFwRmlsdGVy
LmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqZGlzcGxhY2VtZW50TWFwRmlsdGVyID0gbmlsOworCitA
aW1wbGVtZW50YXRpb24gV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIKKworKyAodm9pZClpbml0aWFs
aXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLRGlzcGxhY2VtZW50
TWFwRmlsdGVyIiAgCisgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcjpzZWxmCisgICAg
ICAgICAgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICBAIldlYktpdCBEaXNwbGFjZW1l
bnQgTWFwIEZpbHRlciIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czprQ0lDYXRlZ29yeVN0eWxpemUs
IGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlT
dGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVG
aWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtDSVZl
Y3RvciB2ZWN0b3JXaXRoWDoxLjAgWTowLjAgWjowLjAgVzowLjBdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQsIG5pbF0sIEAiaW5wdXRYQ2hhbm5lbFNlbGVj
dG9yIiwgICAKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6MC4wIFk6MS4wIFo6MC4wIFc6MC4wXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlucHV0WUNoYW5uZWxTZWxlY3RvciIsICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRy
aWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBl
U2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0s
IEAiaW5wdXRTY2FsZSIsCisgICAgICAgICAgICAgICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lG
aWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgcmV0dXJuIFtb
W3NlbGYgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAg
IGlmICghZGlzcGxhY2VtZW50TWFwRmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUg
PSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJp
bmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLRGlzcGxhY2VtZW50
TWFwRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAg
IE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07Cisg
ICAgICAgIGRpc3BsYWNlbWVudE1hcEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBd
IHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1h
Z2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaXNwbGFjZW1lbnRN
YXBGaWx0ZXIsIGlucHV0SW1hZ2UsIGlucHV0RGlzcGxhY2VtZW50TWFwLCBpbnB1dFhDaGFubmVs
U2VsZWN0b3IsIGlucHV0WUNoYW5uZWxTZWxlY3RvciwgaW5wdXRTY2FsZSwgbmlsXTsKK30KKwor
QGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
bW0JKHJldmlzaW9uIDEyNzY1KQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0
ZXJRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIktS
ZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIlF1YXJ0elN1cHBvcnQuaCIKICNpbXBv
cnQgIktXUUV4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIldLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmgi
CiAjaW1wb3J0ICJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgogI2ltcG9ydCAiV0tTcGVjdWxh
ckxpZ2h0aW5nRmlsdGVyLmgiCiAjaW1wb3J0ICJXS1Nwb3RMaWdodEZpbHRlci5oIgpAQCAtMzk0
LDYgKzM5NSw0MCBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6OjpnZXRDCiAg
ICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK3N0YXRpYyBpbmxpbmUgQ0lWZWN0b3Ig
KmdldFZlY3RvckZvckNoYW5uZWwoaW50IGlkeCl7CisgICAgc3dpdGNoKGlkeCl7CisgICAgY2Fz
ZSAwOgorICAgICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhYOjEuMCBZOjAuMCBaOjAu
MCBXOjAuMF07CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3Rvcldp
dGhYOjAuMCBZOjEuMCBaOjAuMCBXOjAuMF07ICAgICAgICAgICAgCisgICAgY2FzZSAyOgorICAg
ICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhYOjAuMCBZOjAuMCBaOjEuMCBXOjAuMF07
CisgICAgY2FzZSAzOgorICAgICAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhYOjAuMCBZ
OjAuMCBaOjAuMCBXOjEuMF07CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFtDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowLjAgWTowLjAgWjowLjAgVzowLjBdOworICAgIH0KK30KKworQ0lGaWx0
ZXIgKktDYW52YXNGRURpc3BsYWNlbWVudE1hcFF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0Zp
bHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIENJRmlsdGVyICpmaWx0ZXIg
PSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgW1dLRGlzcGxhY2VtZW50TWFw
RmlsdGVyIGNsYXNzXTsKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlciJdOyAgICAKKyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsK
KyAgICBDSUltYWdlICppbnB1dEltYWdlID0gcXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMp
OworICAgIENJSW1hZ2UgKmRpc3BsYWNlbWVudE1hcCA9IHF1YXJ0ekZpbHRlci0+aW1hZ2VGb3JO
YW1lKGluMigpKTsKKyAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQoaW5wdXRJbWFnZSk7CisgICAg
RkVfUVVBUlRaX0NIRUNLX0lOUFVUKGRpc3BsYWNlbWVudE1hcCk7CisgICAgW2ZpbHRlciBzZXRW
YWx1ZTppbnB1dEltYWdlIGZvcktleTpAImlucHV0SW1hZ2UiXTsKKyAgICBbZmlsdGVyIHNldFZh
bHVlOmRpc3BsYWNlbWVudE1hcCBmb3JLZXk6QCJpbnB1dERpc3BsYWNlbWVudE1hcCJdOworICAg
IFtmaWx0ZXIgc2V0VmFsdWU6Z2V0VmVjdG9yRm9yQ2hhbm5lbCh4Q2hhbm5lbFNlbGVjdG9yKCkp
IGZvcktleTpAImlucHV0WENoYW5uZWxTZWxlY3RvciJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6
Z2V0VmVjdG9yRm9yQ2hhbm5lbCh5Q2hhbm5lbFNlbGVjdG9yKCkpIGZvcktleTpAImlucHV0WUNo
YW5uZWxTZWxlY3RvciJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpzY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFNjYWxlIl07CisgICAgRkVfUVVBUlRaX09V
VFBVVF9SRVRVUk47Cit9CisKIHN0YXRpYyBpbmxpbmUgQ0lGaWx0ZXIgKmdldFBvaW50TGlnaHRW
ZWN0b3JzKENJRmlsdGVyICogbm9ybWFscywgQ0lWZWN0b3IgKiBsaWdodFBvc2l0aW9uLCBmbG9h
dCBzdXJmYWNlU2NhbGUpCiB7CiAgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKSW5kZXg6IGtjYW52YXMv
S0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMu
Y3BwCShyZXZpc2lvbiAxMjc2NSkKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDUsOCArMzQ1LDggQEAgUVRleHRTdHJlYW0gJktDYW52YXNGRURpc3Bs
YWNlbWVudE1hcDo6ZQogICAgIGlmICghaW4yKCkuaXNFbXB0eSgpKQogICAgICAgICB0cyA8PCAi
IFtpbjI9IiA8PCBpbjIoKSA8PCAiXSI7ICAgICAgICAKICAgICB0cyA8PCAiIFtzY2FsZT0iIDw8
IG1fc2NhbGUgPDwgIl0iCi0gICAgICAgIDw8ICIgW3ggY2hhbm5lbCBzZWxlY3Rvcj0iIDw8IG1f
WENoYW5uZWxTZWxlY3RvciA8PCAiXSIKLSAgICAgICAgPDwgIiBbeSBjaGFubmVsIHNlbGVjdG9y
PSIgPDwgbV9YQ2hhbm5lbFNlbGVjdG9yIDw8ICJdIjsKKyAgICAgICAgPDwgIiBbeCBjaGFubmVs
IHNlbGVjdG9yPSIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJdIgorICAgICAgICA8PCAiIFt5
IGNoYW5uZWwgc2VsZWN0b3I9IiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIl0iOwogICAgcmV0
dXJuIHRzOwogfQogCkluZGV4OiBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCShyZXZpc2lvbiAxMjc2NSkKKysrIGtjYW52YXMv
S0NhbnZhc0ZpbHRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ5LDE2ICs0NDksMjcgQEAgdHlw
ZWRlZiBlbnVtIHsKIGNsYXNzIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBLQ2Fu
dmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CisgICAgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFw
KCkgOiBtX3hDaGFubmVsU2VsZWN0b3IoQ1NfUkVEKSwgbV95Q2hhbm5lbFNlbGVjdG9yKENTX1JF
RCksIG1fc2NhbGUoMCkge30KKyAgICAKICAgICBRU3RyaW5nIGluMigpIGNvbnN0IHsgcmV0dXJu
IG1faW4yOyB9CiAgICAgdm9pZCBzZXRJbjIoY29uc3QgUVN0cmluZyAmaW4yKSB7IG1faW4yID0g
aW4yOyB9CisgICAgCisgICAgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7IH0KKyAgICB2b2lkIHNldFhDaGFu
bmVsU2VsZWN0b3IoY29uc3QgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Ip
IHsgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsgfQorICAgIAorICAgIEtD
Q2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV95
Q2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IEtD
Q2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKSB7IG1feUNoYW5uZWxTZWxlY3Rv
ciA9IHlDaGFubmVsU2VsZWN0b3I7IH0KIAorICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9
IHNjYWxlOyB9CisgICAgCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24o
UVRleHRTdHJlYW0gJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIGZsb2F0IG1fc2NhbGU7
Ci0gICAgS0NDaGFubmVsU2VsZWN0b3JUeXBlIG1fWENoYW5uZWxTZWxlY3RvcjsKLSAgICBLQ0No
YW5uZWxTZWxlY3RvclR5cGUgbV9ZQ2hhbm5lbFNlbGVjdG9yOwogICAgIFFTdHJpbmcgbV9pbjI7
CisgICAgS0NDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKKyAgICBLQ0No
YW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5lbFNlbGVjdG9yOworICAgIGZsb2F0IG1fc2NhbGU7
CiB9OwogCiBjbGFzcyBLQ2FudmFzRkVGbG9vZCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0
CkluZGV4OiBrc3ZnMi9zdmcvc3ZndGFncy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvc3Zn
dGFncy5pbgkocmV2aXNpb24gMTI3NjUpCisrKyBrc3ZnMi9zdmcvc3ZndGFncy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQCBmZUNvbXBvbmVudFRyYW5zZmVyCiBmZUNvbXBvc2l0
ZQogI2ZlQ29udm9sdmVNYXRyaXgKIGZlRGlmZnVzZUxpZ2h0aW5nCi0jZmVEaXNwbGFjZW1lbnRN
YXAKK2ZlRGlzcGxhY2VtZW50TWFwCiBmZURpc3RhbnRMaWdodAogZmVGbG9vZAogZmVGdW5jQQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5oCShyZXZp
c2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqLworCisKKworI2lmbmRlZiBLU1ZHX1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudElt
cGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGxfSAorI2lm
IFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXNJbXBsLmgiCisjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKKworbmFtZXNwYWNlIEtT
VkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5p
bWF0ZWRTdHJpbmdJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsOwor
ICAgIAorICAgIGNsYXNzIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwgOiBwdWJsaWMg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbAorICAgIHsKK3B1YmxpYzoK
KyAgICAgICAgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CisgICAgICAgIHZp
cnR1YWwgflNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vICdTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQnIGZ1bmN0aW9ucworICAgICAgICBT
VkdBbmltYXRlZFN0cmluZ0ltcGwqIGluMSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZFN0
cmluZ0ltcGwqIGluMigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1w
bCogeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uSW1wbCogeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51
bWJlckltcGwqIHNjYWxlKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgS0NDaGFu
bmVsU2VsZWN0b3JUeXBlIHN0cmluZ1RvQ2hhbm5lbChLRE9NOjpET01TdHJpbmcgJmtleSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50SW1wbCcKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006Ok1hcHBlZEF0dHJpYnV0ZUlt
cGwgKmF0dHIpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVEaXNwbGFjZW1l
bnRNYXAqIGZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgICAgICAKK3ByaXZhdGU6CisgICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4gbV9pbjE7CisgICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4gbV9pbjI7CisgICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPiBtX3hDaGFubmVsU2VsZWN0b3I7
CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsPiBtX3lD
aGFubmVsU2VsZWN0b3I7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVy
SW1wbD4gbV9zY2FsZTsKKyAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAg
Km1fZmlsdGVyRWZmZWN0OworICAgIH07Cit9OworCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNl
bmRpZiAvLyBLU1ZHX1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGxfSAorCkluZGV4OiBr
c3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwCShyZXZpc2lv
biAwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGwuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBTVkdfU1VQUE9SVAorI2luY2x1
ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0ckltcGwuaD4KKwor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0Zp
bHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisK
KyNpbmNsdWRlICJrc3ZnLmgiCisjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZH
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBs
LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwu
aCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKwordXNpbmcgbmFtZXNw
YWNlIEtTVkc7CisKK1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OlNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
S0RPTTo6RG9jdW1lbnRJbXBsKiBkb2MpIDogCitTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXNJbXBsKHRhZ05hbWUsIGRvYykKK3sKKyAgICBtX2ZpbHRlckVmZmVjdCA9IDA7Cit9
CisKK1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6On5TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnRJbXBsKCkKK3sKKyAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7Cit9CisKK1NWR0Fu
aW1hdGVkU3RyaW5nSW1wbCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6aW4xKCkg
Y29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCogZHVtbXkgPSAwOworICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1faW4xLCBkdW1teSk7Cit9CisK
K1NWR0FuaW1hdGVkU3RyaW5nSW1wbCogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6
aW4yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCogZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1faW4yLCBkdW1teSk7
Cit9CisKK1NWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBsKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnRJbXBsOjp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVt
ZW50SW1wbCogZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVu
dW1lcmF0aW9uSW1wbD4obV94Q2hhbm5lbFNlbGVjdG9yLCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkRW51bWVyYXRpb25JbXBsKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRJbXBsOjp5Q2hh
bm5lbFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCogZHVtbXkg
PSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbD4o
bV95Q2hhbm5lbFNlbGVjdG9yLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCog
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6c2NhbGUoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsKiBkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVySW1wbD4obV9zY2FsZSwgZHVtbXkpOworfQorCitLQ0NoYW5uZWxTZWxl
Y3RvclR5cGUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6c3RyaW5nVG9DaGFubmVs
KEtET006OkRPTVN0cmluZyYga2V5KQoreworICAgIGlmKGtleSA9PSAiUiIpCisgICAgICAgIHJl
dHVybiBDU19SRUQ7CisgICAgZWxzZSBpZihrZXkgPT0gIkciKQorICAgICAgICByZXR1cm4gQ1Nf
R1JFRU47CisgICAgZWxzZSBpZihrZXkgPT0gIkIiKQorICAgICAgICByZXR1cm4gQ1NfQkxVRTsK
KyAgICBlbHNlIGlmKGtleSA9PSAiQSIpCisgICAgICAgIHJldHVybiBDU19BTFBIQTsKKyAgICAv
L2Vycm9yCisgICAgcmV0dXJuIChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpLTE7Cit9CisKK3ZvaWQg
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RP
TTo6TWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKK3sKKyAgICBLRE9NOjpET01TdHJpbmcgdmFs
dWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eENo
YW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIHhDaGFubmVsU2VsZWN0b3IoKS0+c2V0QmFzZVZh
bChzdHJpbmdUb0NoYW5uZWwodmFsdWUpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAgICB5Q2hhbm5lbFNlbGVjdG9y
KCktPnNldEJhc2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIGluMSgpLT5zZXRCYXNlVmFs
KHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bjJBdHRyKQorICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAgICBzY2Fs
ZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworfQorCitLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGw6OmZpbHRlckVmZmVjdCgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2Fz
dDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAgKj4oUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01BUCkpOworICAgIGlmICghbV9m
aWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybiAwOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRY
Q2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3Io
KS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2VsZWN0b3Io
KEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3RyaW5nKGluMSgpLT5iYXNlVmFs
KCkpLnFzdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihLRE9NOjpET01TdHJp
bmcoaW4yKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
U2NhbGUoc2NhbGUoKS0+YmFzZVZhbCgpKTsKKyAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKK30KKyNlbmRpZiAvLyBT
VkdfU1VQUE9SVAo=
</data>
<flag name="review"
          id="1584"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>6419</attachid>
            <date>2006-02-11 19:01:43 -0800</date>
            <delta_ts>2006-02-11 19:01:43 -0800</delta_ts>
            <desc>Testcase </desc>
            <filename>filtertest.svg</filename>
            <type>image/svg+xml</type>
            <size>1375</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">PHN2ZyB2ZXJzaW9uPSIxLjEiIGJhc2VQcm9maWxlPSJmdWxsIiBpZD0ic3ZnLXJvb3QiIHdpZHRo
PSIxMDAlIiBoZWlnaHQ9IjEwMCUiDQogICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyIgDQogICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiA+
CiAgICAgPCEtLSBUaGlzIHRlc3RjYXNlIHByb3ZpZGVzIGEgc2ltcGxlIGRlbW9uc3RyYXRpb24g
b2YgdGhlIGZlRGlzcGxhY2VtZW50TWFwIGZpbHRlci4KICAgICAgICAgIFRoZSBvdXRwdXQgc2hv
dWxkIGJlIGEgMTAweDEwMCBncmVlbiByZWN0YW5nbGUsIGhvd2V2ZXIgZHVlIHRvIHRoZSBuYXR1
cmUgb2YgdGhlCiAgICAgICAgICB0ZXN0IGl0IG1heSBwcm9kdWNlIGEgfjFweCByZWQgbGluZSBh
cm91bmQgdGhlIHJpZ2h0IGhhbGYgb2YgdGhlIGltYWdlLiAgV2hpbGUgbm90CiAgICAgICAgICBp
ZGVhbCB0aGlzIGlzIGN1cnJlbnRseSBleHBlY3RlZC4KICAgICAgICAgIAogICAgICAgICAgSWYg
dGhlIHNxdWFyZSBpcyBub3QgYXQgKDAsMCkgdGhlbiB0aGVyZSBpcyBzb21lIGZvcm0gb2YgY29s
b3VyIG1hdGNoaW5nIG9jY3VyaW5nCiAgICAgICAgICBvdXRzaWRlIHRoZSBkb21haW4gb2YgdGhl
IGZpbHRlci4gIEluIHRoYXQgY2FzZSwgcHJvdmlkZWQgdGhlcmUgaXMgc3RpbGwgbm8gCiAgICAg
ICAgICBzaWduaWZpY2FudCByZWQgdmlzaWJsZSB0aGUgdGVzdCBpcyBhIHBhc3MuICAgICAgICAg
IAogICAgICAgLS0+DQogIDx0aXRsZSBpZD0idGVzdC10aXRsZSI+RGlzcGxhY2VtZW50IG1hcHBp
bmcgdGVzdCBjYXNlPC90aXRsZT4NCiAgPGcgaWQ9InRlc3QtYm9keS1jb250ZW50Ij4NCiAgICA8
ZGVmcz4NCiAgICAgIDxmaWx0ZXIgaWQ9IlJlc3VsdEltYWdlIj4NCiAgICAgICAgPGZlSW1hZ2Ug
cmVzdWx0PSJNYXAiICAgICB4bGluazpocmVmPSJkaXNtYXAucG5nIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIvPg0KICAgICAgICA8ZmVJbWFnZSByZXN1bHQ9IlRleHR1cmUiIHhsaW5rOmhyZWY9
InNyY21hcC5wbmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQogICAgICAgIDxmZURpc3Bs
YWNlbWVudE1hcCBpbj0iVGV4dHVyZSIgaW4yPSJNYXAiIHNjYWxlPSIxMDAiIHhDaGFubmVsU2Vs
ZWN0b3I9IlIiIHlDaGFubmVsU2VsZWN0b3I9IkciLz4NCiAgICAgIDwvZmlsdGVyPg0KICAgIDwv
ZGVmcz4NCiAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmls
dGVyPSJ1cmwoI1Jlc3VsdEltYWdlKSIgLz4KICAgIDxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0i
Ymx1ZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCiAgPC9nPg0KPC9z
dmc+DQoNCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>6420</attachid>
            <date>2006-02-11 19:02:27 -0800</date>
            <delta_ts>2006-02-11 19:02:27 -0800</delta_ts>
            <desc>displacement map for testcase</desc>
            <filename>dismap.png</filename>
            <type>image/png</type>
            <size>260</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAy0lEQVR42u3RQREAAAwCIKPbfOvh
8SABaXsL0owQIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSI
ECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFC
hAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgR
IkSIECFChAgRMh7yG6j9dGgJ4t0AAAAASUVORK5CYII=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>6421</attachid>
            <date>2006-02-11 19:03:24 -0800</date>
            <delta_ts>2006-02-11 19:03:24 -0800</delta_ts>
            <desc>Source image for testcase</desc>
            <filename>srcmap.png</filename>
            <type>image/png</type>
            <size>260</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAy0lEQVR42u3RAQ0AAAzCMPyb5jpO
mmUKmnSn5v8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI
ECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA
gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB
AgQIECBAgAABsg5ycS/WZPRbb+oAAAAASUVORK5CYII=
</data>

          </attachment>
      

    </bug>

</bugzilla>