<?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>34857</bug_id>
          
          <creation_ts>2010-02-11 11:51:44 -0800</creation_ts>
          <short_desc>Move InlineIterator and BidiRun code into new files</short_desc>
          <delta_ts>2010-02-11 12:06:10 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>189762</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-02-11 11:51:44 -0800</bug_when>
    <thetext>No logical changes.  Just moving the code into separate files so that the iterator can be accessed from block subclasses (like list items).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189763</commentid>
    <comment_count>1</comment_count>
      <attachid>48588</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-02-11 11:52:12 -0800</bug_when>
    <thetext>Created attachment 48588
Patch to move files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189765</commentid>
    <comment_count>2</comment_count>
      <attachid>48588</attachid>
    <who name="">mitz</who>
    <bug_when>2010-02-11 11:55:43 -0800</bug_when>
    <thetext>Comment on attachment 48588
Patch to move files

&gt; +        WebCore/rendering/BidiRun.cpp \
&gt; +        WebCore/rendering/BidiRun.h \

tab/space mismatch.

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189767</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-02-11 12:06:10 -0800</bug_when>
    <thetext>Fixed in r54665.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48588</attachid>
            <date>2010-02-11 11:52:12 -0800</date>
            <delta_ts>2010-02-11 11:55:42 -0800</delta_ts>
            <desc>Patch to move files</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33340</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNTQ1NjEpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzM0LDYgKzE3MzQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGx1Z2lucy9ucGZ1bmN0aW9ucy5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9BdXRv
VGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaCBc
CisgICAgICAgIFdlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwIFwKKyAgICAgICAgV2ViQ29y
ZS9yZW5kZXJpbmcvQmlkaVJ1bi5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5j
cHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogCVdlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcCBcCkBAIC0xNzQ4LDYgKzE3NTAsNyBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oIFwKIAlXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oIFwKKyAgICAgICAgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaCBcCiAJV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lUnVuQm94LmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDU0NTYxKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTI5NjUsNiArMjk2NSw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N0eWxlL1N0
eWxlVmlzdWFsRGF0YS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvQmlkaVJ1bi5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9C
aWRpUnVuLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9Db3VudGVyTm9kZS5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwJywKQEAgLTI5NzksNiArMjk4MSw3IEBACiAgICAgICAgICAgICAn
cmVuZGVyaW5nL0lubGluZUJveC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvSW5saW5lUnVuQm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZVRleHRCb3guaCcsCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDU0NTYxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtODY0LDYgKzg2NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsdWdpbnMvUGx1Z2luVmlldy5j
cHAgXAogICAgIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKICAgICByZW5kZXJpbmcv
YnJlYWtfbGluZXMuY3BwIFwKKyAgICByZW5kZXJpbmcvQmlkaVJ1bi5jcHAgXAogICAgIHJlbmRl
cmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAog
ICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU0NTYxKQorKysgV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcwNDQsNiArMjcwNDQs
MTQgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xicmVha19saW5lcy5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEJpZGlSdW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEJpZGlSdW4uaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xDb3VudGVyTm9kZS5jcHAiDQogCQkJCT4NCkBAIC0yNzEwMCw2ICsyNzEwOCwxMCBA
QAogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXElubGluZUZsb3dCb3guaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xJbmxpbmVJdGVyYXRvci5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXElubGluZVJ1
bkJveC5oIg0KIAkJCQk+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDU0NTYxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1NDgsNiArNDU0OCw5IEBACiAJCUJD
RTY1QkVBMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNjVCRTgwRUFDREYxNjAwN0U0NTMzIC8qIExl
bmd0aC5jcHAgKi87IH07CiAJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTY1QkU5MEVB
Q0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQ0U2NUQzMjBFQUQxMjExMDA3RTQ1MzMgLyogVGhlbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNjVEMzEw
RUFEMTIxMTAwN0U0NTMzIC8qIFRoZW1lLmNwcCAqLzsgfTsKKwkJQkNFNzg5MTYxMTIwRDYwODAw
NjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0U3ODkxNTExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0
b3IuaCAqLzsgfTsKKwkJQkNFNzg5ODYxMTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTc4OTg1MTEyMEU3
QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggKi87IH07CisJCUJDRTc4OThCMTEyMEU4MDIwMDYwRUNF
NSAvKiBCaWRpUnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRTc4OThBMTEyMEU4MDIwMDYwRUNFNSAvKiBCaWRpUnVuLmNwcCAqLzsgfTsKIAkJ
QkNFN0IxOTMwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U3QjE5MjBENEU4Njk2MDA3
NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkNFOTlFQzMwRENBNjI0MTAw
MTgyNjgzIC8qIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTk5RUMxMERDQTYyNDEwMDE4MjY4MyAv
KiBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCUJDRTk5RUM0MERDQTYy
NDEwMDE4MjY4MyAvKiBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFOTlFQzIwRENBNjI0MTAwMTgyNjgz
IC8qIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmggKi87IH07CkBAIC05ODEwLDYgKzk4MTMs
OSBAQAogCQlCQ0U2NUJFODBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRTY1RDMxMEVBRDEyMTEwMDdFNDUzMyAvKiBUaGVtZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRTc4OTE1MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVJdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlk
aVJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUnVuLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRTc4OThBMTEyMEU4MDIwMDYwRUNFNSAvKiBCaWRp
UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpZGlSdW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0U3QjE5MjBENEU4Njk2MDA3NUE1Mzkg
LyogSlNIaXN0b3J5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTSGlzdG9yeUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
RTk5RUMxMERDQTYyNDEwMDE4MjY4MyAvKiBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hTTFRQcm9jZXNzb3JDb25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTk5RUMyMERDQTYy
NDEwMDE4MjY4MyAvKiBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1NTYsNiArMTU1NjIsOCBAQAogCQkJCUJDOEM4RkFB
MEREQ0QyRjIwMEI1OTJGNCAvKiBzdHlsZSAqLywKIAkJCQlBOENGRjA0QjBBMTU0RjA5MDAwQTQy
MzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCAqLywKIAkJCQlBOENGRjA0OTBBMTU0RjA5MDAwQTQy
MzQgLyogQXV0b1RhYmxlTGF5b3V0LmggKi8sCisJCQkJQkNFNzg5OEExMTIwRTgwMjAwNjBFQ0U1
IC8qIEJpZGlSdW4uY3BwICovLAorCQkJCUJDRTc4OTg1MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRp
UnVuLmggKi8sCiAJCQkJQkNFQTQ4MTUwOTdEOTMwMjAwOTRDOUU0IC8qIGJyZWFrX2xpbmVzLmNw
cCAqLywKIAkJCQlCQ0VBNDgxNjA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMuaCAqLywK
IAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLApAQCAt
MTU1NzIsNiArMTU1ODAsNyBAQAogCQkJCUE4Q0ZGNURFMEExNTVBMDUwMDBBNDIzNCAvKiBJbmxp
bmVCb3guaCAqLywKIAkJCQlBOENGRjVERDBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0Jv
eC5jcHAgKi8sCiAJCQkJQThDRkY1REMwQTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUZsb3dCb3gu
aCAqLywKKwkJCQlCQ0U3ODkxNTExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCAq
LywKIAkJCQlBOENGRjVEQjBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lUnVuQm94LmggKi8sCiAJ
CQkJQkNFQTQ4MUEwOTdEOTMwMjAwOTRDOUU0IC8qIElubGluZVRleHRCb3guY3BwICovLAogCQkJ
CUJDRUE0ODFCMDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmggKi8sCkBAIC0xODUw
NSw2ICsxODUxNCw4IEBACiAJCQkJQjcxRkU2REYxMTA5MUNCMzAwREFFRjc3IC8qIFByaW50Q29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUY3MjMwNEYxMTE4NEI0MTAwQUQwMTI2IC8qIFNj
cmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGNzIzMDUxMTExODRCNDEwMEFEMDEy
NiAvKiBTY3JpcHRQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNzg5MTYxMTIwRDYw
ODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0U3ODk4
NjExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDY4Myw2
ICsyMDY5NCw3IEBACiAJCQkJODREMEM0MDQxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5z
Zm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIwRUMgLyog
UHJpbnRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlGNzIzMDUwMTExODRCNDEwMEFE
MDEyNiAvKiBTY3JpcHRQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0U3ODk4QjEx
MjBFODAyMDA2MEVDRTUgLyogQmlkaVJ1bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L0JpZGlSdW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRhcHBlZC5u
ZXQpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmlkaVJ1bi5oIgorI2luY2x1
ZGUgIklubGluZUJveC5oIgorI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgUmVmQ291bnRlZExlYWtD
b3VudGVyIGJpZGlSdW5Db3VudGVyKCJCaWRpUnVuIik7CisKK3N0YXRpYyBib29sIGluQmlkaVJ1
bkRlc3Ryb3k7CisjZW5kaWYKKwordm9pZCBCaWRpUnVuOjpkZXN0cm95KCkKK3sKKyNpZm5kZWYg
TkRFQlVHCisgICAgaW5CaWRpUnVuRGVzdHJveSA9IHRydWU7CisjZW5kaWYKKyAgICBSZW5kZXJB
cmVuYSogcmVuZGVyQXJlbmEgPSBtX29iamVjdC0+cmVuZGVyQXJlbmEoKTsKKyAgICBkZWxldGUg
dGhpczsKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5CaWRpUnVuRGVzdHJveSA9IGZhbHNlOworI2Vu
ZGlmCisKKyAgICAvLyBSZWNvdmVyIHRoZSBzaXplIGxlZnQgdGhlcmUgZm9yIHVzIGJ5IG9wZXJh
dG9yIGRlbGV0ZSBhbmQgZnJlZSB0aGUgbWVtb3J5LgorICAgIHJlbmRlckFyZW5hLT5mcmVlKCpy
ZWludGVycHJldF9jYXN0PHNpemVfdCo+KHRoaXMpLCB0aGlzKTsKK30KKwordm9pZCogQmlkaVJ1
bjo6b3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJv
dygpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGJpZGlSdW5Db3VudGVyLmluY3JlbWVudCgpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlbmRlckFyZW5hLT5hbGxvY2F0ZShzeik7Cit9CisKK3ZvaWQg
QmlkaVJ1bjo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc2l6ZV90IHN6KQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBiaWRpUnVuQ291bnRlci5kZWNyZW1lbnQoKTsKKyNlbmRpZgorICAgIEFT
U0VSVChpbkJpZGlSdW5EZXN0cm95KTsKKworICAgIC8vIFN0YXNoIHNpemUgd2hlcmUgZGVzdHJv
eSgpIGNhbiBmaW5kIGl0LgorICAgICooc2l6ZV90KilwdHIgPSBzejsKK30KKworfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0JpZGlSdW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4u
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFdlbGxpbmd0b24gKHByb3RvbkB3aXJldGFwcGVkLm5l
dCkKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgQmlkaVJ1bl9oCisjZGVmaW5lIEJpZGlSdW5faAorCisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgorI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaWRpQ29udGV4
dDsKK2NsYXNzIElubGluZUJveDsKKworc3RydWN0IEJpZGlSdW4gOiBCaWRpQ2hhcmFjdGVyUnVu
IHsKKyAgICBCaWRpUnVuKGludCBzdGFydCwgaW50IHN0b3AsIFJlbmRlck9iamVjdCogb2JqZWN0
LCBCaWRpQ29udGV4dCogY29udGV4dCwgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGlyKQorICAg
ICAgICA6IEJpZGlDaGFyYWN0ZXJSdW4oc3RhcnQsIHN0b3AsIGNvbnRleHQsIGRpcikKKyAgICAg
ICAgLCBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9ib3goMCkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBkZXN0cm95KCk7CisKKyAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4K
KyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBSZW5kZXJBcmVuYSopIHRocm93KCk7CisK
KyAgICAvLyBPdmVycmlkZGVuIHRvIHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUgZnJvbSBiZWlu
ZyBjYWxsZWQuCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIHNpemVfdCk7CisKKyAg
ICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaVJ1bio+KG1fbmV4dCk7
IH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxv
d2VkLgorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpIHRocm93KCk7CisKK3B1YmxpYzoK
KyAgICBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OworICAgIElubGluZUJveCogbV9ib3g7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBCaWRpUnVuX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0
b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgSW5saW5lSXRlcmF0b3JfaAorI2RlZmluZSBJbmxpbmVJdGVyYXRvcl9o
CisKKyNpbmNsdWRlICJCaWRpUnVuLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNs
dWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bmxpbmVJdGVyYXRvciB7CitwdWJsaWM6CisgICAgSW5saW5lSXRlcmF0b3IoKQorICAgICAgICA6
IGJsb2NrKDApCisgICAgICAgICwgb2JqKDApCisgICAgICAgICwgcG9zKDApCisgICAgICAgICwg
bmV4dEJyZWFrYWJsZVBvc2l0aW9uKC0xKQorICAgIHsKKyAgICB9CisKKyAgICBJbmxpbmVJdGVy
YXRvcihSZW5kZXJCbG9jayogYiwgUmVuZGVyT2JqZWN0KiBvLCB1bnNpZ25lZCBwKQorICAgICAg
ICA6IGJsb2NrKGIpCisgICAgICAgICwgb2JqKG8pCisgICAgICAgICwgcG9zKHApCisgICAgICAg
ICwgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKC0xKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGlu
Y3JlbWVudChJbmxpbmVCaWRpUmVzb2x2ZXIqIHJlc29sdmVyID0gMCk7CisgICAgYm9vbCBhdEVu
ZCgpIGNvbnN0OworCisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0OworICAgIFdURjo6VW5pY29k
ZTo6RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OworCisgICAgUmVuZGVyQmxvY2sqIGJsb2Nr
OworICAgIFJlbmRlck9iamVjdCogb2JqOworICAgIHVuc2lnbmVkIHBvczsKKyAgICBpbnQgbmV4
dEJyZWFrYWJsZVBvc2l0aW9uOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
bmxpbmVJdGVyYXRvciYgaXQxLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQyKQoreworICAgIHJl
dHVybiBpdDEucG9zID09IGl0Mi5wb3MgJiYgaXQxLm9iaiA9PSBpdDIub2JqOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0IElubGlu
ZUl0ZXJhdG9yJiBpdDIpCit7CisgICAgcmV0dXJuIGl0MS5wb3MgIT0gaXQyLnBvcyB8fCBpdDEu
b2JqICE9IGl0Mi5vYmo7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpTmV4
dChSZW5kZXJCbG9jayogYmxvY2ssIFJlbmRlck9iamVjdCogY3VycmVudCwgSW5saW5lQmlkaVJl
c29sdmVyKiByZXNvbHZlciA9IDAsIGJvb2wgc2tpcElubGluZXMgPSB0cnVlLCBib29sKiBlbmRP
ZklubGluZVB0ciA9IDApCit7CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gMDsKKyAgICBib29s
IG9sZEVuZE9mSW5saW5lID0gZW5kT2ZJbmxpbmVQdHIgPyAqZW5kT2ZJbmxpbmVQdHIgOiBmYWxz
ZTsKKyAgICBib29sIGVuZE9mSW5saW5lID0gZmFsc2U7CisKKyAgICB3aGlsZSAoY3VycmVudCkg
eworICAgICAgICBuZXh0ID0gMDsKKyAgICAgICAgaWYgKCFvbGRFbmRPZklubGluZSAmJiAhY3Vy
cmVudC0+aXNGbG9hdGluZygpICYmICFjdXJyZW50LT5pc1JlcGxhY2VkKCkgJiYgIWN1cnJlbnQt
PmlzUG9zaXRpb25lZCgpICYmICFjdXJyZW50LT5pc1RleHQoKSkgeworICAgICAgICAgICAgbmV4
dCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICYmIHJlc29s
dmVyICYmIG5leHQtPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICBFVW5pY29k
ZUJpZGkgdWIgPSBuZXh0LT5zdHlsZSgpLT51bmljb2RlQmlkaSgpOworICAgICAgICAgICAgICAg
IGlmICh1YiAhPSBVQk5vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9u
IGRpciA9IG5leHQtPnN0eWxlKCktPmRpcmVjdGlvbigpOworICAgICAgICAgICAgICAgICAgICBX
VEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkID0gKHViID09IEVtYmVkCisgICAgICAgICAgICAgICAg
ICAgICAgICA/IChkaXIgPT0gUlRMID8gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEVtYmVkZGlu
ZyA6IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRFbWJlZGRpbmcpCisgICAgICAgICAgICAgICAg
ICAgICAgICA6IChkaXIgPT0gUlRMID8gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJyaWRl
IDogV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodE92ZXJyaWRlKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJlc29sdmVyLT5lbWJlZChkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5leHQpIHsKKyAgICAgICAgICAgIGlmICghc2tp
cElubGluZXMgJiYgIW9sZEVuZE9mSW5saW5lICYmIGN1cnJlbnQtPmlzUmVuZGVySW5saW5lKCkp
IHsKKyAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBlbmRP
ZklubGluZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT0gYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmVzb2x2ZXIgJiYgY3VycmVudC0+aXNSZW5kZXJJbmxpbmUoKSAmJiBj
dXJyZW50LT5zdHlsZSgpLT51bmljb2RlQmlkaSgpICE9IFVCTm9ybWFsKQorICAgICAgICAgICAg
ICAgICAgICByZXNvbHZlci0+ZW1iZWQoV1RGOjpVbmljb2RlOjpQb3BEaXJlY3Rpb25hbEZvcm1h
dCk7CisKKyAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobmV4dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2
ZXIgJiYgbmV4dC0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
RVVuaWNvZGVCaWRpIHViID0gbmV4dC0+c3R5bGUoKS0+dW5pY29kZUJpZGkoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh1YiAhPSBVQk5vcm1hbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyID0gbmV4dC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZCA9
ICh1YiA9PSBFbWJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChkaXIgPT0g
UlRMID8gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEVtYmVkZGluZzogV1RGOjpVbmljb2RlOjpM
ZWZ0VG9SaWdodEVtYmVkZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAo
ZGlyID09IFJUTCA/IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRPdmVycmlkZSA6IFdURjo6VW5p
Y29kZTo6TGVmdFRvUmlnaHRPdmVycmlkZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmVyLT5lbWJlZChkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQt
PnBhcmVudCgpOworICAgICAgICAgICAgICAgIGlmICghc2tpcElubGluZXMgJiYgY3VycmVudCAm
JiBjdXJyZW50ICE9IGJsb2NrICYmIGN1cnJlbnQtPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbmV4dCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGVuZE9m
SW5saW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFuZXh0KQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG5leHQtPmlzVGV4dCgpIHx8IG5leHQtPmlz
RmxvYXRpbmcoKSB8fCBuZXh0LT5pc1JlcGxhY2VkKCkgfHwgbmV4dC0+aXNQb3NpdGlvbmVkKCkK
KyAgICAgICAgICAgIHx8ICgoIXNraXBJbmxpbmVzIHx8ICFuZXh0LT5maXJzdENoaWxkKCkpIC8v
IEFsd2F5cyByZXR1cm4gRU1QVFkgaW5saW5lcy4KKyAgICAgICAgICAgICAgICAmJiBuZXh0LT5p
c1JlbmRlcklubGluZSgpKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjdXJyZW50ID0g
bmV4dDsKKyAgICB9CisKKyAgICBpZiAoZW5kT2ZJbmxpbmVQdHIpCisgICAgICAgICplbmRPZklu
bGluZVB0ciA9IGVuZE9mSW5saW5lOworCisgICAgcmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyBp
bmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmlyc3QoUmVuZGVyQmxvY2sqIGJsb2NrLCBJbmxpbmVC
aWRpUmVzb2x2ZXIqIHJlc29sdmVyLCBib29sIHNraXBJbmxpbmVzID0gdHJ1ZSkKK3sKKyAgICBp
ZiAoIWJsb2NrLT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFJl
bmRlck9iamVjdCogbyA9IGJsb2NrLT5maXJzdENoaWxkKCk7CisgICAgaWYgKG8tPmlzUmVuZGVy
SW5saW5lKCkpIHsKKyAgICAgICAgaWYgKHJlc29sdmVyKSB7CisgICAgICAgICAgICBFVW5pY29k
ZUJpZGkgdWIgPSBvLT5zdHlsZSgpLT51bmljb2RlQmlkaSgpOworICAgICAgICAgICAgaWYgKHVi
ICE9IFVCTm9ybWFsKSB7CisgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXIgPSBvLT5z
dHlsZSgpLT5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVj
dGlvbiBkID0gKHViID09IEVtYmVkCisgICAgICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwg
PyBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0RW1iZWRkaW5nIDogV1RGOjpVbmljb2RlOjpMZWZ0
VG9SaWdodEVtYmVkZGluZykKKyAgICAgICAgICAgICAgICAgICAgOiAoZGlyID09IFJUTCA/IFdU
Rjo6VW5pY29kZTo6UmlnaHRUb0xlZnRPdmVycmlkZSA6IFdURjo6VW5pY29kZTo6TGVmdFRvUmln
aHRPdmVycmlkZSkpOworICAgICAgICAgICAgICAgIHJlc29sdmVyLT5lbWJlZChkKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc2tpcElubGluZXMgJiYgby0+Zmlyc3RD
aGlsZCgpKQorICAgICAgICAgICAgbyA9IGJpZGlOZXh0KGJsb2NrLCBvLCByZXNvbHZlciwgc2tp
cElubGluZXMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5ldmVyIHNraXAgZW1w
dHkgaW5saW5lcy4KKyAgICAgICAgICAgIGlmIChyZXNvbHZlcikKKyAgICAgICAgICAgICAgICBy
ZXNvbHZlci0+Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBv
OyAKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvICYmICFvLT5pc1RleHQoKSAmJiAhby0+
aXNSZXBsYWNlZCgpICYmICFvLT5pc0Zsb2F0aW5nKCkgJiYgIW8tPmlzUG9zaXRpb25lZCgpKQor
ICAgICAgICBvID0gYmlkaU5leHQoYmxvY2ssIG8sIHJlc29sdmVyLCBza2lwSW5saW5lcyk7CisK
KyAgICBpZiAocmVzb2x2ZXIpCisgICAgICAgIHJlc29sdmVyLT5jb21taXRFeHBsaWNpdEVtYmVk
ZGluZygpOworICAgIHJldHVybiBvOworfQorCitpbmxpbmUgdm9pZCBJbmxpbmVJdGVyYXRvcjo6
aW5jcmVtZW50KElubGluZUJpZGlSZXNvbHZlciogcmVzb2x2ZXIpCit7CisgICAgaWYgKCFvYmop
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2JqLT5pc1RleHQoKSkgeworICAgICAgICBwb3Mr
KzsKKyAgICAgICAgaWYgKHBvcyA+PSB0b1JlbmRlclRleHQob2JqKS0+dGV4dExlbmd0aCgpKSB7
CisgICAgICAgICAgICBvYmogPSBiaWRpTmV4dChibG9jaywgb2JqLCByZXNvbHZlcik7CisgICAg
ICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gLTE7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvYmogPSBiaWRpTmV4dChibG9jaywg
b2JqLCByZXNvbHZlcik7CisgICAgICAgIHBvcyA9IDA7CisgICAgICAgIG5leHRCcmVha2FibGVQ
b3NpdGlvbiA9IC0xOworICAgIH0KK30KKworaW5saW5lIGJvb2wgSW5saW5lSXRlcmF0b3I6OmF0
RW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW9iajsKK30KKworaW5saW5lIFVDaGFyIElubGlu
ZUl0ZXJhdG9yOjpjdXJyZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW9iaiB8fCAhb2JqLT5pc1Rl
eHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5k
ZXJUZXh0KG9iaik7CisgICAgaWYgKHBvcyA+PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIHRleHQtPmNoYXJhY3RlcnMoKVtwb3NdOworfQorCitB
TFdBWVNfSU5MSU5FIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIElubGluZUl0ZXJhdG9yOjpkaXJl
Y3Rpb24oKSBjb25zdAoreworICAgIGlmIChVQ2hhciBjID0gY3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oYyk7CisKKyAgICBpZiAob2JqICYmIG9iai0+
aXNMaXN0TWFya2VyKCkpCisgICAgICAgIHJldHVybiBvYmotPnN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUiA/IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQgOiBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0OworCisgICAgcmV0dXJuIFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsOworfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3JlbWVudCgpCit7
CisgICAgY3VycmVudC5pbmNyZW1lbnQodGhpcyk7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUg
dm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bigpCit7CisgICAgaWYgKCFlbXB0eVJ1
biAmJiAhZW9yLmF0RW5kKCkpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gc29yLnBvczsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0ICpvYmogPSBzb3Iub2JqOworICAgICAgICB3aGlsZSAob2JqICYmIG9i
aiAhPSBlb3Iub2JqICYmIG9iaiAhPSBlbmRPZkxpbmUub2JqKSB7CisgICAgICAgICAgICBSZW5k
ZXJCbG9jazo6YXBwZW5kUnVuc0Zvck9iamVjdChzdGFydCwgb2JqLT5sZW5ndGgoKSwgb2JqLCAq
dGhpcyk7ICAgICAgICAKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgIG9iaiA9
IGJpZGlOZXh0KHNvci5ibG9jaywgb2JqKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2JqKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSBvYmogPT0gZW9yLm9iaiA/IGVvci5wb3MgOiBV
SU5UX01BWDsKKyAgICAgICAgICAgIGlmIChvYmogPT0gZW5kT2ZMaW5lLm9iaiAmJiBlbmRPZkxp
bmUucG9zIDw9IHBvcykgeworICAgICAgICAgICAgICAgIHJlYWNoZWRFbmRPZkxpbmUgPSB0cnVl
OworICAgICAgICAgICAgICAgIHBvcyA9IGVuZE9mTGluZS5wb3M7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGFkZCBydW5zIGZvciB6ZXJvLWxlbmd0aCBSZW5kZXJP
YmplY3RzLCBqdXN0IGRvbid0IG1ha2UgdGhlIHJ1biBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUK
KyAgICAgICAgICAgIGludCBlbmQgPSBvYmotPmxlbmd0aCgpID8gcG9zKzEgOiAwOworICAgICAg
ICAgICAgUmVuZGVyQmxvY2s6OmFwcGVuZFJ1bnNGb3JPYmplY3Qoc3RhcnQsIGVuZCwgb2JqLCAq
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVvci5pbmNyZW1lbnQoKTsKKyAg
ICAgICAgc29yID0gZW9yOworICAgIH0KKworICAgIG1fZGlyZWN0aW9uID0gV1RGOjpVbmljb2Rl
OjpPdGhlck5ldXRyYWw7CisgICAgbV9zdGF0dXMuZW9yID0gV1RGOjpVbmljb2RlOjpPdGhlck5l
dXRyYWw7Cit9CisKK30KKworI2VuZGlmIC8vIElubGluZUl0ZXJhdG9yX2gKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNTQ1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDkgQEAgcHVibGljOgog
ICAgIC8vIHN0eWxlIGZyb20gdGhpcyBSZW5kZXJCbG9jay4KICAgICBSZW5kZXJCbG9jayogY3Jl
YXRlQW5vbnltb3VzQmxvY2soYm9vbCBpc0ZsZXhpYmxlQm94ID0gZmFsc2UpIGNvbnN0OwogCisg
ICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChpbnQgc3RhcnQsIGludCBlbmQsIFJl
bmRlck9iamVjdCosIElubGluZUJpZGlSZXNvbHZlciYpOyAgICAKKyAgICBzdGF0aWMgYm9vbCBy
ZXF1aXJlc0xpbmVCb3goY29uc3QgSW5saW5lSXRlcmF0b3ImLCBib29sIGlzTGluZUVtcHR5ID0g
dHJ1ZSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlKTsKKwogcHJvdGVjdGVk
OgogICAgIHZvaWQgbW92ZUNoaWxkVG8oUmVuZGVyT2JqZWN0KiB0bywgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiB0b0NoaWxkTGlzdCwgUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAgICAgdm9pZCBtb3Zl
Q2hpbGRUbyhSZW5kZXJPYmplY3QqIHRvLCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHRvQ2hpbGRM
aXN0LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJPYmplY3QqIGNoaWxkKTsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNp
b24gNTQ1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgpAQCAtNDYsMzYgKzQ3LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gV2UgZG9uJ3QgbGV0IG91ciBsaW5lIGJveCB0cmVlIGZvciBhIHNpbmdsZSBs
aW5lIGdldCBhbnkgZGVlcGVyIHRoYW4gdGhpcy4KIGNvbnN0IHVuc2lnbmVkIGNNYXhMaW5lRGVw
dGggPSAyMDA7CiAKLWNsYXNzIElubGluZUl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBJbmxpbmVJ
dGVyYXRvcigpCi0gICAgICAgIDogYmxvY2soMCkKLSAgICAgICAgLCBvYmooMCkKLSAgICAgICAg
LCBwb3MoMCkKLSAgICAgICAgLCBuZXh0QnJlYWthYmxlUG9zaXRpb24oLTEpCi0gICAgewotICAg
IH0KLQotICAgIElubGluZUl0ZXJhdG9yKFJlbmRlckJsb2NrKiBiLCBSZW5kZXJPYmplY3QqIG8s
IHVuc2lnbmVkIHApCi0gICAgICAgIDogYmxvY2soYikKLSAgICAgICAgLCBvYmoobykKLSAgICAg
ICAgLCBwb3MocCkKLSAgICAgICAgLCBuZXh0QnJlYWthYmxlUG9zaXRpb24oLTEpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgaW5jcmVtZW50KElubGluZUJpZGlSZXNvbHZlciogcmVzb2x2ZXIg
PSAwKTsKLSAgICBib29sIGF0RW5kKCkgY29uc3Q7Ci0KLSAgICBVQ2hhciBjdXJyZW50KCkgY29u
c3Q7Ci0gICAgRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwotCi0gICAgUmVuZGVyQmxvY2sq
IGJsb2NrOwotICAgIFJlbmRlck9iamVjdCogb2JqOwotICAgIHVuc2lnbmVkIHBvczsKLSAgICBp
bnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uOwotfTsKLQogc3RhdGljIGludCBnZXRCb3JkZXJQYWRk
aW5nTWFyZ2luKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCwgYm9vbCBlbmRPZklubGluZSkK
IHsKICAgICBib29sIGxlZnRTaWRlID0gKGNoaWxkLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIpID8gIWVuZE9mSW5saW5lIDogZW5kT2ZJbmxpbmU7CkBAIC0xMDAsMjQ3ICs3MSw2IEBAIHN0
YXRpYyBpbnQgaW5saW5lV2lkdGgoUmVuZGVyT2JqZWN0KiBjaGkKICAgICByZXR1cm4gZXh0cmFX
aWR0aDsKIH0KIAotc3RydWN0IEJpZGlSdW4gOiBCaWRpQ2hhcmFjdGVyUnVuIHsKLSAgICBCaWRp
UnVuKGludCBzdGFydCwgaW50IHN0b3AsIFJlbmRlck9iamVjdCogb2JqZWN0LCBCaWRpQ29udGV4
dCogY29udGV4dCwgRGlyZWN0aW9uIGRpcikKLSAgICAgICAgOiBCaWRpQ2hhcmFjdGVyUnVuKHN0
YXJ0LCBzdG9wLCBjb250ZXh0LCBkaXIpCi0gICAgICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAg
ICAgICAsIG1fYm94KDApCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZGVzdHJveSgpOwotCi0g
ICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCwgUmVuZGVyQXJlbmEqKSB0aHJvdygpOwotCi0gICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2
ZW50IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgotICAgIHZvaWQgb3BlcmF0
b3IgZGVsZXRlKHZvaWQqLCBzaXplX3QpOwotCi0gICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PEJpZGlSdW4qPihtX25leHQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhl
IG5vcm1hbCBvcGVyYXRvciBuZXcgaXMgZGlzYWxsb3dlZC4KLSAgICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90KSB0aHJvdygpOwotCi1wdWJsaWM6Ci0gICAgUmVuZGVyT2JqZWN0KiBtX29iamVj
dDsKLSAgICBJbmxpbmVCb3gqIG1fYm94OwotfTsKLQotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyBS
ZWZDb3VudGVkTGVha0NvdW50ZXIgYmlkaVJ1bkNvdW50ZXIoIkJpZGlSdW4iKTsKLQotc3RhdGlj
IGJvb2wgaW5CaWRpUnVuRGVzdHJveTsKLSNlbmRpZgotCi12b2lkIEJpZGlSdW46OmRlc3Ryb3ko
KQotewotI2lmbmRlZiBOREVCVUcKLSAgICBpbkJpZGlSdW5EZXN0cm95ID0gdHJ1ZTsKLSNlbmRp
ZgotICAgIFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSA9IG1fb2JqZWN0LT5yZW5kZXJBcmVuYSgp
OwotICAgIGRlbGV0ZSB0aGlzOwotI2lmbmRlZiBOREVCVUcKLSAgICBpbkJpZGlSdW5EZXN0cm95
ID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIC8vIFJlY292ZXIgdGhlIHNpemUgbGVmdCB0aGVyZSBm
b3IgdXMgYnkgb3BlcmF0b3IgZGVsZXRlIGFuZCBmcmVlIHRoZSBtZW1vcnkuCi0gICAgcmVuZGVy
QXJlbmEtPmZyZWUoKnJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4odGhpcyksIHRoaXMpOwotfQot
Ci12b2lkKiBCaWRpUnVuOjpvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVu
ZGVyQXJlbmEpIHRocm93KCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgYmlkaVJ1bkNvdW50ZXIu
aW5jcmVtZW50KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVuZGVyQXJlbmEtPmFsbG9jYXRlKHN6
KTsKLX0KLQotdm9pZCBCaWRpUnVuOjpvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qg
c3opCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJpZGlSdW5Db3VudGVyLmRlY3JlbWVudCgpOwot
I2VuZGlmCi0gICAgQVNTRVJUKGluQmlkaVJ1bkRlc3Ryb3kpOwotCi0gICAgLy8gU3Rhc2ggc2l6
ZSB3aGVyZSBkZXN0cm95KCkgY2FuIGZpbmQgaXQuCi0gICAgKihzaXplX3QqKXB0ciA9IHN6Owot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbmxp
bmVJdGVyYXRvciYgaXQxLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQyKQotewotICAgIHJldHVy
biBpdDEucG9zID09IGl0Mi5wb3MgJiYgaXQxLm9iaiA9PSBpdDIub2JqOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0IElubGluZUl0
ZXJhdG9yJiBpdDIpCi17Ci0gICAgcmV0dXJuIGl0MS5wb3MgIT0gaXQyLnBvcyB8fCBpdDEub2Jq
ICE9IGl0Mi5vYmo7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpTmV4dChS
ZW5kZXJCbG9jayogYmxvY2ssIFJlbmRlck9iamVjdCogY3VycmVudCwgSW5saW5lQmlkaVJlc29s
dmVyKiByZXNvbHZlciA9IDAsIGJvb2wgc2tpcElubGluZXMgPSB0cnVlLCBib29sKiBlbmRPZklu
bGluZVB0ciA9IDApCi17Ci0gICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gMDsKLSAgICBib29sIG9s
ZEVuZE9mSW5saW5lID0gZW5kT2ZJbmxpbmVQdHIgPyAqZW5kT2ZJbmxpbmVQdHIgOiBmYWxzZTsK
LSAgICBib29sIGVuZE9mSW5saW5lID0gZmFsc2U7Ci0KLSAgICB3aGlsZSAoY3VycmVudCkgewot
ICAgICAgICBuZXh0ID0gMDsKLSAgICAgICAgaWYgKCFvbGRFbmRPZklubGluZSAmJiAhY3VycmVu
dC0+aXNGbG9hdGluZygpICYmICFjdXJyZW50LT5pc1JlcGxhY2VkKCkgJiYgIWN1cnJlbnQtPmlz
UG9zaXRpb25lZCgpICYmICFjdXJyZW50LT5pc1RleHQoKSkgewotICAgICAgICAgICAgbmV4dCA9
IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmIChuZXh0ICYmIHJlc29sdmVy
ICYmIG5leHQtPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICBFVW5pY29kZUJp
ZGkgdWIgPSBuZXh0LT5zdHlsZSgpLT51bmljb2RlQmlkaSgpOwotICAgICAgICAgICAgICAgIGlm
ICh1YiAhPSBVQk5vcm1hbCkgewotICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGRp
ciA9IG5leHQtPnN0eWxlKCktPmRpcmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBEaXJl
Y3Rpb24gZCA9ICh1YiA9PSBFbWJlZAotICAgICAgICAgICAgICAgICAgICAgICAgPyAoZGlyID09
IFJUTCA/IFJpZ2h0VG9MZWZ0RW1iZWRkaW5nIDogTGVmdFRvUmlnaHRFbWJlZGRpbmcpCi0gICAg
ICAgICAgICAgICAgICAgICAgICA6IChkaXIgPT0gUlRMID8gUmlnaHRUb0xlZnRPdmVycmlkZSA6
IExlZnRUb1JpZ2h0T3ZlcnJpZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmVt
YmVkKGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghbmV4dCkgewotICAgICAgICAgICAgaWYgKCFza2lwSW5saW5lcyAmJiAhb2xk
RW5kT2ZJbmxpbmUgJiYgY3VycmVudC0+aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAg
ICAgIG5leHQgPSBjdXJyZW50OwotICAgICAgICAgICAgICAgIGVuZE9mSW5saW5lID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd2hp
bGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSBibG9jaykgewotICAgICAgICAgICAgICAgIGlmIChy
ZXNvbHZlciAmJiBjdXJyZW50LT5pc1JlbmRlcklubGluZSgpICYmIGN1cnJlbnQtPnN0eWxlKCkt
PnVuaWNvZGVCaWRpKCkgIT0gVUJOb3JtYWwpCi0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVy
LT5lbWJlZChQb3BEaXJlY3Rpb25hbEZvcm1hdCk7Ci0KLSAgICAgICAgICAgICAgICBuZXh0ID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dCkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZXIgJiYgbmV4dC0+aXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgRVVuaWNvZGVCaWRpIHViID0gbmV4dC0+c3R5bGUo
KS0+dW5pY29kZUJpZGkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1YiAhPSBVQk5v
cm1hbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyID0g
bmV4dC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGlyZWN0aW9uIGQgPSAodWIgPT0gRW1iZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyAoZGlyID09IFJUTCA/IFJpZ2h0VG9MZWZ0RW1iZWRkaW5nOiBMZWZ0VG9SaWdodEVtYmVk
ZGluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZGlyID09IFJUTCA/IFJp
Z2h0VG9MZWZ0T3ZlcnJpZGUgOiBMZWZ0VG9SaWdodE92ZXJyaWRlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZXItPmVtYmVkKGQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFza2lwSW5saW5l
cyAmJiBjdXJyZW50ICYmIGN1cnJlbnQgIT0gYmxvY2sgJiYgY3VycmVudC0+aXNSZW5kZXJJbmxp
bmUoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVudDsKLSAgICAgICAgICAg
ICAgICAgICAgZW5kT2ZJbmxpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIW5leHQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobmV4dC0+aXNUZXh0
KCkgfHwgbmV4dC0+aXNGbG9hdGluZygpIHx8IG5leHQtPmlzUmVwbGFjZWQoKSB8fCBuZXh0LT5p
c1Bvc2l0aW9uZWQoKQotICAgICAgICAgICAgfHwgKCghc2tpcElubGluZXMgfHwgIW5leHQtPmZp
cnN0Q2hpbGQoKSkgLy8gQWx3YXlzIHJldHVybiBFTVBUWSBpbmxpbmVzLgotICAgICAgICAgICAg
ICAgICYmIG5leHQtPmlzUmVuZGVySW5saW5lKCkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGN1cnJlbnQgPSBuZXh0OwotICAgIH0KLQotICAgIGlmIChlbmRPZklubGluZVB0cikKLSAg
ICAgICAgKmVuZE9mSW5saW5lUHRyID0gZW5kT2ZJbmxpbmU7Ci0KLSAgICByZXR1cm4gbmV4dDsK
LX0KLQotc3RhdGljIFJlbmRlck9iamVjdCogYmlkaUZpcnN0KFJlbmRlckJsb2NrKiBibG9jaywg
SW5saW5lQmlkaVJlc29sdmVyKiByZXNvbHZlciwgYm9vbCBza2lwSW5saW5lcyA9IHRydWUpCi17
Ci0gICAgaWYgKCFibG9jay0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICBSZW5kZXJPYmplY3QqIG8gPSBibG9jay0+Zmlyc3RDaGlsZCgpOwotICAgIGlmIChvLT5p
c1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIGlmIChyZXNvbHZlcikgewotICAgICAgICAgICAg
RVVuaWNvZGVCaWRpIHViID0gby0+c3R5bGUoKS0+dW5pY29kZUJpZGkoKTsKLSAgICAgICAgICAg
IGlmICh1YiAhPSBVQk5vcm1hbCkgewotICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZGly
ID0gby0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgRGlyZWN0aW9uIGQg
PSAodWIgPT0gRW1iZWQKLSAgICAgICAgICAgICAgICAgICAgPyAoZGlyID09IFJUTCA/IFJpZ2h0
VG9MZWZ0RW1iZWRkaW5nIDogTGVmdFRvUmlnaHRFbWJlZGRpbmcpCi0gICAgICAgICAgICAgICAg
ICAgIDogKGRpciA9PSBSVEwgPyBSaWdodFRvTGVmdE92ZXJyaWRlIDogTGVmdFRvUmlnaHRPdmVy
cmlkZSkpOwotICAgICAgICAgICAgICAgIHJlc29sdmVyLT5lbWJlZChkKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2tpcElubGluZXMgJiYgby0+Zmlyc3RDaGlsZCgp
KQotICAgICAgICAgICAgbyA9IGJpZGlOZXh0KGJsb2NrLCBvLCByZXNvbHZlciwgc2tpcElubGlu
ZXMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5ldmVyIHNraXAgZW1wdHkgaW5s
aW5lcy4KLSAgICAgICAgICAgIGlmIChyZXNvbHZlcikKLSAgICAgICAgICAgICAgICByZXNvbHZl
ci0+Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKTsKLSAgICAgICAgICAgIHJldHVybiBvOyAKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChvICYmICFvLT5pc1RleHQoKSAmJiAhby0+aXNSZXBs
YWNlZCgpICYmICFvLT5pc0Zsb2F0aW5nKCkgJiYgIW8tPmlzUG9zaXRpb25lZCgpKQotICAgICAg
ICBvID0gYmlkaU5leHQoYmxvY2ssIG8sIHJlc29sdmVyLCBza2lwSW5saW5lcyk7Ci0KLSAgICBp
ZiAocmVzb2x2ZXIpCi0gICAgICAgIHJlc29sdmVyLT5jb21taXRFeHBsaWNpdEVtYmVkZGluZygp
OwotICAgIHJldHVybiBvOwotfQotCi1pbmxpbmUgdm9pZCBJbmxpbmVJdGVyYXRvcjo6aW5jcmVt
ZW50KElubGluZUJpZGlSZXNvbHZlciogcmVzb2x2ZXIpCi17Ci0gICAgaWYgKCFvYmopCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAob2JqLT5pc1RleHQoKSkgewotICAgICAgICBwb3MrKzsKLSAg
ICAgICAgaWYgKHBvcyA+PSB0b1JlbmRlclRleHQob2JqKS0+dGV4dExlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBvYmogPSBiaWRpTmV4dChibG9jaywgb2JqLCByZXNvbHZlcik7Ci0gICAgICAgICAg
ICBwb3MgPSAwOwotICAgICAgICAgICAgbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gLTE7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBvYmogPSBiaWRpTmV4dChibG9jaywgb2JqLCBy
ZXNvbHZlcik7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIG5leHRCcmVha2FibGVQb3NpdGlv
biA9IC0xOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgSW5saW5lQmlkaVJl
c29sdmVyOjppbmNyZW1lbnQoKQotewotICAgIGN1cnJlbnQuaW5jcmVtZW50KHRoaXMpOwotfQot
Ci1pbmxpbmUgYm9vbCBJbmxpbmVJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAotewotICAgIHJldHVy
biAhb2JqOwotfQotCi1pbmxpbmUgVUNoYXIgSW5saW5lSXRlcmF0b3I6OmN1cnJlbnQoKSBjb25z
dAotewotICAgIGlmICghb2JqIHx8ICFvYmotPmlzVGV4dCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQob2JqKTsKLSAgICBpZiAocG9z
ID49IHRleHQtPnRleHRMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
dGV4dC0+Y2hhcmFjdGVycygpW3Bvc107Ci19Ci0KLUFMV0FZU19JTkxJTkUgRGlyZWN0aW9uIElu
bGluZUl0ZXJhdG9yOjpkaXJlY3Rpb24oKSBjb25zdAotewotICAgIGlmIChVQ2hhciBjID0gY3Vy
cmVudCgpKQotICAgICAgICByZXR1cm4gVW5pY29kZTo6ZGlyZWN0aW9uKGMpOwotCi0gICAgaWYg
KG9iaiAmJiBvYmotPmlzTGlzdE1hcmtlcigpKQotICAgICAgICByZXR1cm4gb2JqLT5zdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBMZWZ0VG9SaWdodCA6IFJpZ2h0VG9MZWZ0OwotCi0gICAg
cmV0dXJuIE90aGVyTmV1dHJhbDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCiBzdGF0aWMgdm9pZCBjaG9wTWlkcG9pbnRzQXQoTGluZU1pZHBvaW50
U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlLCBSZW5kZXJPYmplY3QqIG9iaiwgdW5zaWduZWQgcG9z
KQogewogICAgIGlmICghbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzKQpAQCAtMzk4LDcg
KzEyOCw3IEBAIHN0YXRpYyB2b2lkIGFkZE1pZHBvaW50KExpbmVNaWRwb2ludFN0YXQKICAgICBt
aWRwb2ludHNbbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzKytdID0gbWlkcG9pbnQ7CiB9
CiAKLXN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBS
ZW5kZXJPYmplY3QqIG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKK3ZvaWQgUmVu
ZGVyQmxvY2s6OmFwcGVuZFJ1bnNGb3JPYmplY3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJP
YmplY3QqIG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKICAgICBpZiAoc3Rh
cnQgPiBlbmQgfHwgb2JqLT5pc0Zsb2F0aW5nKCkgfHwKICAgICAgICAgKG9iai0+aXNQb3NpdGlv
bmVkKCkgJiYgIW9iai0+c3R5bGUoKS0+aGFzU3RhdGljWCgpICYmICFvYmotPnN0eWxlKCktPmhh
c1N0YXRpY1koKSAmJiAhb2JqLT5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkpCkBAIC00
NDEsMzYgKzE3MSw2IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoaW50IHN0YXIK
ICAgICB9CiB9CiAKLXRlbXBsYXRlIDw+Ci12b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5k
UnVuKCkKLXsKLSAgICBpZiAoIWVtcHR5UnVuICYmICFlb3IuYXRFbmQoKSkgewotICAgICAgICBp
bnQgc3RhcnQgPSBzb3IucG9zOwotICAgICAgICBSZW5kZXJPYmplY3QgKm9iaiA9IHNvci5vYmo7
Ci0gICAgICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGVvci5vYmogJiYgb2JqICE9IGVuZE9mTGlu
ZS5vYmopIHsKLSAgICAgICAgICAgIGFwcGVuZFJ1bnNGb3JPYmplY3Qoc3RhcnQsIG9iai0+bGVu
Z3RoKCksIG9iaiwgKnRoaXMpOyAgICAgICAgCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAg
ICAgICAgICBvYmogPSBiaWRpTmV4dChzb3IuYmxvY2ssIG9iaik7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKG9iaikgewotICAgICAgICAgICAgdW5zaWduZWQgcG9zID0gb2JqID09IGVvci5vYmog
PyBlb3IucG9zIDogVUlOVF9NQVg7Ci0gICAgICAgICAgICBpZiAob2JqID09IGVuZE9mTGluZS5v
YmogJiYgZW5kT2ZMaW5lLnBvcyA8PSBwb3MpIHsKLSAgICAgICAgICAgICAgICByZWFjaGVkRW5k
T2ZMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUucG9zOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gSXQncyBPSyB0byBhZGQgcnVucyBmb3IgemVyby1s
ZW5ndGggUmVuZGVyT2JqZWN0cywganVzdCBkb24ndCBtYWtlIHRoZSBydW4gbGFyZ2VyIHRoYW4g
aXQgc2hvdWxkIGJlCi0gICAgICAgICAgICBpbnQgZW5kID0gb2JqLT5sZW5ndGgoKSA/IHBvcysx
IDogMDsKLSAgICAgICAgICAgIGFwcGVuZFJ1bnNGb3JPYmplY3Qoc3RhcnQsIGVuZCwgb2JqLCAq
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGVvci5pbmNyZW1lbnQoKTsKLSAg
ICAgICAgc29yID0gZW9yOwotICAgIH0KLQotICAgIG1fZGlyZWN0aW9uID0gT3RoZXJOZXV0cmFs
OwotICAgIG1fc3RhdHVzLmVvciA9IE90aGVyTmV1dHJhbDsKLX0KLQogc3RhdGljIGlubGluZSBJ
bmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBi
b29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuID0gZmFsc2UpCiB7CiAgICAgaWYgKGlz
Um9vdExpbmVCb3gpCkBAIC0xNDQ0LDcgKzExNDQsNyBAQCBzdGF0aWMgYm9vbCBpbmxpbmVGbG93
UmVxdWlyZXNMaW5lQm94KFJlCiAgICAgcmV0dXJuICFmbG93LT5maXJzdENoaWxkKCkgJiYgZmxv
dy0+aGFzSG9yaXpvbnRhbEJvcmRlcnNQYWRkaW5nT3JNYXJnaW4oKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHJlcXVpcmVzTGluZUJveChjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQsIGJvb2wg
aXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQorYm9vbCBSZW5kZXJC
bG9jazo6cmVxdWlyZXNMaW5lQm94KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdCwgYm9vbCBpc0xp
bmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCiB7CiAgICAgaWYgKGl0Lm9i
ai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Cg==
</data>
<flag name="review"
          id="31300"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>