<?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>21295</bug_id>
          
          <creation_ts>2008-10-01 23:11:12 -0700</creation_ts>
          <short_desc>Replace ExecState with a call frame Register pointer</short_desc>
          <delta_ts>2008-10-04 14:14:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20812</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93671</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-01 23:11:12 -0700</bug_when>
    <thetext>Darin has been working on replacing ExecStates with a call frame Register pointer. This should be a small increase in function call performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93822</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-02 16:38:51 -0700</bug_when>
    <thetext>*** Bug 21214 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93831</commentid>
    <comment_count>2</comment_count>
      <attachid>24036</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-02 17:07:49 -0700</bug_when>
    <thetext>Created attachment 24036
some work in progress on getting fields out of ExecState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93925</commentid>
    <comment_count>3</comment_count>
      <attachid>24059</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 12:03:56 -0700</bug_when>
    <thetext>Created attachment 24059
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93950</commentid>
    <comment_count>4</comment_count>
      <attachid>24059</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-03 13:11:22 -0700</bug_when>
    <thetext>Comment on attachment 24059
patch

+        ScopeChainNode(ScopeChainNode* next, JSObject* object, JSGlobalData* globalData, JSObject* globalThis)
+            : next(next)
+            , object(object)
+            , globalData(globalData)
+            , globalThis(globalThis)

I don&apos;t think you ended up using this, did you?

r=me -- should probably remove the ScopeChainNode change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93972</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 13:54:22 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 24059 [edit])
&gt; +        ScopeChainNode(ScopeChainNode* next, JSObject* object, JSGlobalData*
&gt; globalData, JSObject* globalThis)
&gt; +            : next(next)
&gt; +            , object(object)
&gt; +            , globalData(globalData)
&gt; +            , globalThis(globalThis)
&gt; 
&gt; I don&apos;t think you ended up using this, did you?

Yes, I did. That&apos;s still the way we get JSGlobalData faster in the more typical cases. It&apos;s possible we could roll that optimization back out because the really hot cases get it from the CTI. But all my performance testing has been with both mechanisms in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93973</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 13:55:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Yes, I did. That&apos;s still the way we get JSGlobalData faster in the more typical
&gt; cases.

More typical case means anyone who calls exec-&gt;globalData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93974</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-03 14:04:49 -0700</bug_when>
    <thetext>okeedokee!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93987</commentid>
    <comment_count>8</comment_count>
      <attachid>24059</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 14:43:49 -0700</bug_when>
    <thetext>Comment on attachment 24059
patch

Clearing flag since I landed this.

http://trac.webkit.org/changeset/37257</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94093</commentid>
    <comment_count>9</comment_count>
      <attachid>24090</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-04 13:11:53 -0700</bug_when>
    <thetext>Created attachment 24090
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94102</commentid>
    <comment_count>10</comment_count>
      <attachid>24090</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-04 14:06:58 -0700</bug_when>
    <thetext>Comment on attachment 24090
patch

r=me if you do the

#define exec CallFrame::create(r)

workaround for the local variable &apos;exec&apos; in Machine::privateExecute() that we discussed, and then remove the use of &apos;exec&apos; afterwards in a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94103</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-04 14:14:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/37297</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24036</attachid>
            <date>2008-10-02 17:07:49 -0700</date>
            <delta_ts>2008-10-03 12:03:56 -0700</delta_ts>
            <desc>some work in progress on getting fields out of ExecState</desc>
            <filename>MaulExecStatePatch.txt</filename>
            <type>text/plain</type>
            <size>38501</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM3MjE1KQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyAr
MTQ1LDcgQEAgX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTZzdG9wVGltZW91dENoZQogX19aTjNK
U0MxNEpTR2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFagogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdz
dGFydFRpbWVvdXRDaGVja0V2CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNs
b3RFCi1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEV2CitfX1pOM0pTQzE0SlNHbG9iYWxP
YmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NG1hcmtF
dgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
bndFbVBOU18xMkpTR2xvYmFsRGF0YUUKQEAgLTIwNiw2ICsyMDYsNyBAQCBfX1pOM0pTQzdBcmdM
aXN0MTBzbG93QXBwZW5kRVBOU183SlNWYWx1CiBfX1pOM0pTQzdDU3RyaW5nRDFFdgogX19aTjNK
U0M3Q1N0cmluZ2FTRVJLUzBfCiBfX1pOM0pTQzdKU0FycmF5NGluZm9FCitfX1pOM0pTQzdNYWNo
aW5lMTRmaXJzdENhbGxGcmFtZUVQS05TXzhSZWdpc3RlckUKIF9fWk4zSlNDN1Byb2ZpbGUxMHJl
c3RvcmVBbGxFdgogX19aTjNKU0M3UHJvZmlsZTVmb2N1c0VQS05TXzExUHJvZmlsZU5vZGVFCiBf
X1pOM0pTQzdQcm9maWxlN2V4Y2x1ZGVFUEtOU18xMVByb2ZpbGVOb2RlRQpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAzNzIxNSkKKysrIEphdmFTY3Jp
cHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogCiAjaW5jbHVkZSA8a2pzL0V4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgPGtqcy9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPGtqcy9p
ZGVudGlmaWVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9WTS9DVEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAJKHJl
dmlzaW9uIDM3MjE1KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjE2LDEyICs2MTYsOCBAQCB2b2lkIENUSTo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNp
Z25lZCBvCiB7CiAgICAgbV9qaXQuc3VibF9pOHIoMSwgWDg2Ojplc2kpOwogICAgIFg4NkFzc2Vt
Ymxlcjo6Sm1wU3JjIHNraXBUaW1lb3V0ID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7CisgICAg
ZW1pdFB1dEFyZyhYODY6OmVzaSwgMCk7CiAgICAgZW1pdENhbGwob3Bjb2RlSW5kZXgsIE1hY2hp
bmU6OmN0aV90aW1lb3V0X2NoZWNrKTsKLQotICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19l
eGVjLCBYODY6OmVjeCk7Ci0gICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKEV4ZWNTdGF0
ZSwgbV9nbG9iYWxEYXRhKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICBtX2ppdC5tb3ZsX21y
KE9CSkVDVF9PRkZTRVQoSlNHbG9iYWxEYXRhLCBtYWNoaW5lKSwgWDg2OjplY3gsIFg4Njo6ZWN4
KTsKLSAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoTWFjaGluZSwgbV90aWNrc1VudGls
TmV4dFRpbWVvdXRDaGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7CiAgICAgbV9qaXQubGluayhz
a2lwVGltZW91dCwgbV9qaXQubGFiZWwoKSk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZN
L0NUSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCShyZXZpc2lvbiAz
NzIxNSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nywx
MSArNTcsMTMgQEAKICNkZWZpbmUgQ1RJX0FSR1NfciAweDBGCiAjZGVmaW5lIENUSV9BUkdTX2V4
Y2VwdGlvbiAweDEwCiAjZGVmaW5lIENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlIDB4MTEKKyNk
ZWZpbmUgQ1RJX0FSR1NfZ2xvYmFsRGF0YSAweDEyCiAjZGVmaW5lIEFSR19leGVjICgoRXhlY1N0
YXRlKikoQVJHUylbQ1RJX0FSR1NfZXhlY10pCiAjZGVmaW5lIEFSR19yZWdpc3RlckZpbGUgKChS
ZWdpc3RlckZpbGUqKShBUkdTKVtDVElfQVJHU19yZWdpc3RlckZpbGVdKQogI2RlZmluZSBBUkdf
ciAoKFJlZ2lzdGVyKikoQVJHUylbQ1RJX0FSR1Nfcl0pCiAjZGVmaW5lIEFSR19leGNlcHRpb24g
KChKU1ZhbHVlKiopKEFSR1MpW0NUSV9BUkdTX2V4Y2VwdGlvbl0pCiAjZGVmaW5lIEFSR19wcm9m
aWxlclJlZmVyZW5jZSAoKFByb2ZpbGVyKiopKEFSR1MpW0NUSV9BUkdTX3Byb2ZpbGVyUmVmZXJl
bmNlXSkKKyNkZWZpbmUgQVJHX2dsb2JhbERhdGEgKChKU0dsb2JhbERhdGEqKShBUkdTKVtDVElf
QVJHU19nbG9iYWxEYXRhXSkKIAogI2RlZmluZSBBUkdfc2V0UihuZXdSKSAoKih2b2xhdGlsZSBS
ZWdpc3RlcioqKSYoQVJHUylbQ1RJX0FSR1Nfcl0gPSBuZXdSKQogI2RlZmluZSBBUkdfc2V0Mm5k
UmVzdWx0KG5ldzJuZFJlc3VsdCkgKCoodm9sYXRpbGUgSlNWYWx1ZSoqKSYoQVJHUylbQ1RJX0FS
R1NfMm5kUmVzdWx0XSA9IG5ldzJuZFJlc3VsdCkKQEAgLTIzMiw3ICsyMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9OwogCiAgICAgZXh0ZXJuICJDIiB7Ci0gICAgICAgIEpTVmFsdWUqIGN0
aVRyYW1wb2xpbmUodm9pZCogY29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiop
OworICAgICAgICBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIEV4ZWNTdGF0ZSos
IFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24s
IFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOwogICAgICAgICB2b2lkIGN0aVZNVGhyb3dUcmFt
cG9saW5lKCk7CiAgICAgfTsKIApAQCAtMzIxLDkgKzMyMyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIGN0aS5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgo
cmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFs
dWUqIGV4ZWN1dGUodm9pZCogY29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIEpTVmFsdWUqKiBleGNlcHRpb24pCisgICAgICAgIGlu
bGluZSBzdGF0aWMgSlNWYWx1ZSogZXhlY3V0ZSh2b2lkKiBjb2RlLCBFeGVjU3RhdGUqIGV4ZWMs
IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiB2YWx1ZSA9IGN0aVRyYW1wb2xpbmUoY29kZSwgZXhlYywgcmVnaXN0ZXJGaWxlLCBy
LCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGN0aVRyYW1wb2xpbmUoY29kZSwgZXhlYywgcmVnaXN0
ZXJGaWxlLCByLCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Uo
KSwgZ2xvYmFsRGF0YSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgICAgICAgICBj
dXJyZW50T3Bjb2RlSUQgPSBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oLTEpOwogI2VuZGlmCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9WTS9Db2RlQmxvY2suaAkocmV2aXNpb24gMzcyMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9W
TS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKIAorICAgIGVudW0gQ29kZVR5cGUgeyBHbG9i
YWxDb2RlLCBFdmFsQ29kZSwgRnVuY3Rpb25Db2RlIH07CisKICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBpbnQgbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOyB9CiAKICAgICBzdHJ1Y3QgSGFuZGxlckluZm8gewpJbmRleDog
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM3MjE1KQorKysgSmF2YVNjcmlwdENvcmUvVk0v
TWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNCw3ICs5MDQsNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbikKICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPmNvcHkoKTsK
IAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMsIHIpOworICAgIEV4ZWNTdGF0ZSBuZXdFeGVj
KHIpOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQpAQCAtOTE0LDcgKzkxNCw3IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHAKICNpZiBFTkFCTEUoQ1RJKQog
ICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQogICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywg
ZXhlYywgY29kZUJsb2NrKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29k
ZUJsb2NrLT5jdGlDb2RlLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24p
OworICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUs
ICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsICZuZXdFeGVjLmdsb2JhbERhdGEoKSwgZXhj
ZXB0aW9uKTsKICNlbHNlCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOwogI2VuZGlmCkBA
IC05NjYsNyArOTY2LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlO
bwogICAgIC8vIGEgMCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCiAgICAg
aW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIG1ha2VIb3N0
Q2FsbEZyYW1lUG9pbnRlcihleGVjLT5tX2NhbGxGcmFtZSksIDAsIGFyZ2MsIGZ1bmN0aW9uKTsK
IAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMsIHIpOworICAgIEV4ZWNTdGF0ZSBuZXdFeGVj
KHIpOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQpAQCAtOTc2LDcgKzk3Niw3IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICNpZiBFTkFCTEUoQ1RJKQog
ICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQogICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywg
ZXhlYywgY29kZUJsb2NrKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29k
ZUJsb2NrLT5jdGlDb2RlLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24p
OworICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUs
ICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsICZuZXdFeGVjLmdsb2JhbERhdGEoKSwgZXhj
ZXB0aW9uKTsKICNlbHNlCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOwogI2VuZGlmCkBA
IC0xMDUyLDcgKzEwNTIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBl
dmFsCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKICAgICAgICAgc2Nv
cGVDaGFpbiA9IHNjb3BlQ2hhaW4tPmNvcHkoKTsKIAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGV4
ZWMsIHIpOworICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKHIpOwogCiAgICAgUHJvZmlsZXIqKiBwcm9m
aWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnBy
b2ZpbGVyKQpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShF
dmFsTm9kZSogZXZhbAogI2lmIEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNv
ZGUpCiAgICAgICAgIENUSTo6Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVj
LCAmbV9yZWdpc3RlckZpbGUsIHIsIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0g
Q1RJOjpleGVjdXRlKGNvZGVCbG9jay0+Y3RpQ29kZSwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmls
ZSwgciwgJm5ld0V4ZWMuZ2xvYmFsRGF0YSgpLCBleGNlcHRpb24pOwogI2Vsc2UKICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVjLCAmbV9yZWdpc3Rl
ckZpbGUsIHIsIGV4Y2VwdGlvbik7CiAjZW5kaWYKQEAgLTM5MTIsNiArMzkxMiwxNCBAQCB2b2lk
IE1hY2hpbmU6OnJldHJpZXZlTGFzdENhbGxlcihFeGVjU3RhCiAgICAgZnVuY3Rpb24gPSBjYWxs
ZXI7CiB9CiAKK2NvbnN0IFJlZ2lzdGVyKiBNYWNoaW5lOjpmaXJzdENhbGxGcmFtZShjb25zdCBS
ZWdpc3RlciogY2FsbEZyYW1lKQoreworICAgIGNvbnN0IFJlZ2lzdGVyKiBmaXJzdCA9IDA7Cisg
ICAgZm9yIChjb25zdCBSZWdpc3RlciogZnJhbWUgPSBjYWxsRnJhbWU7IGZyYW1lOyBmcmFtZSA9
IHN0cmlwSG9zdENhbGxGcmFtZUJpdChmcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVy
c10ucigpKSkKKyAgICAgICAgZmlyc3QgPSBmcmFtZTsKKyAgICByZXR1cm4gZmlyc3Q7Cit9CisK
IFJlZ2lzdGVyKiBNYWNoaW5lOjpjYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBmb3IgKFJlZ2lzdGVyKiByID0gZXhlYy0+
bV9jYWxsRnJhbWU7IHI7IHIgPSBzdHJpcEhvc3RDYWxsRnJhbWVCaXQocltSZWdpc3RlckZpbGU6
OkNhbGxlclJlZ2lzdGVyc10ucigpKSkKQEAgLTQyMDUsMTQgKzQyMTMsMTUgQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2FkZChDVElfQVJHUykKICAgICBKU1ZhbHVlKiB2MSA9IEFSR19zcmMx
OwogICAgIEpTVmFsdWUqIHYyID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBB
UkdfZXhlYzsKICAgICBkb3VibGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQgPSAwLjA7CiAKICAg
ICBib29sIHJpZ2h0SXNOdW1iZXIgPSBmYXN0SXNOdW1iZXIodjIsIHJpZ2h0KTsKICAgICBpZiAo
cmlnaHRJc051bWJlciAmJiBmYXN0SXNOdW1iZXIodjEsIGxlZnQpKQotICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgbGVmdCArIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFS
R19nbG9iYWxEYXRhLCBsZWZ0ICsgcmlnaHQpOwogICAgIAorICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IEFSR19leGVjOworCiAgICAgYm9vbCBsZWZ0SXNTdHJpbmcgPSB2MS0+aXNTdHJpbmcoKTsKICAg
ICBpZiAobGVmdElzU3RyaW5nICYmIHYyLT5pc1N0cmluZygpKSB7CiAgICAgICAgIFJlZlB0cjxV
U3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUoc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPih2
MSktPnZhbHVlKCkucmVwKCksIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odjIpLT52YWx1ZSgpLnJl
cCgpKTsKQEAgLTQyNjEsNiArNDI3MCw4IEBAIHZvaWQgTWFjaGluZTo6Y3RpX3RpbWVvdXRfY2hl
Y2soQ1RJX0FSR1MKICAgICBpZiAoZXhlYy0+bWFjaGluZSgpLT5jaGVja1RpbWVvdXQoZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpKSkKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0
ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMpKTsKIAorICAgIGV4ZWMtPm1hY2hp
bmUoKS0+bV90aWNrc1VudGlsTmV4dFRpbWVvdXRDaGVjayA9IEFSR19pbnQxOworCiAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCkBAIC00NDYwLDE5ICs0NDcxLDE4IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfaWQoQ1RJX0EKIAogSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX211bChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhl
YzsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFS
R19zcmMyOwogCiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0OwogICAgIGlmIChm
YXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxlZnQgKiByaWdodCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRvTnVtYmVyKGV4
ZWMpICogc3JjMi0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT05f
QVRfRU5EKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAgICByZXR1cm4g
anNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgKiByaWdodCk7CisKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoZXhlYykgKiBzcmMyLT50b051bWJlcihleGVjKSk7Cisg
ICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfZnVuYyhDVElfQVJHUykKQEAgLTQ4NjEsMTMg
KzQ4NzEsMTIgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3N1YihDVElfQVJHUykKICAgICBk
b3VibGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQ7CiAgICAgaWYgKGZhc3RJc051bWJlcihzcmMx
LCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQotICAgICAgICByZXR1cm4ganNO
dW1iZXIoQVJHX2V4ZWMsIGxlZnQgLSByaWdodCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJl
cihleGVjLCBzcmMxLT50b051bWJlcihleGVjKSAtIHNyYzItPnRvTnVtYmVyKGV4ZWMpKTsKLSAg
ICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IC0g
cmlnaHQpOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVyKGV4ZWMpIC0g
c3JjMi0+dG9OdW1iZXIoZXhlYykpOworICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFs
KENUSV9BUkdTKQpAQCAtNDk0OSwxNiArNDk1OCwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlf
b3BfbmVnYXRlKENUSV9BUkdTCiB7CiAgICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7CiAKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLQogICAgIGRvdWJsZSB2OwogICAgIGlmIChm
YXN0SXNOdW1iZXIoc3JjLCB2KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIC12KTsK
LSAgICBlbHNlIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgLXNy
Yy0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAgICByZXR1cm4ganNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIC12KTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAtc3JjLT50b051
bWJlcihleGVjKSk7CisgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2Jhc2UoQ1RJ
X0FSR1MpCkBAIC01MDM0LDE5ICs1MDQxLDE4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9y
ZXNvbHZlX2dsb2JhbCgKIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2RpdihDVElfQVJHUykK
IHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKICAgICBKU1ZhbHVlKiBzcmMxID0g
QVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwogCiAgICAgZG91YmxlIGxl
ZnQ7CiAgICAgZG91YmxlIHJpZ2h0OwogICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkg
JiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIGxlZnQgLyByaWdodCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRvTnVtYmVyKGV4ZWMpIC8gc3JjMi0+dG9OdW1iZXIoZXhl
YykpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQorICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEs
IGxlZnQgLyByaWdodCk7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBK
U1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIo
ZXhlYykgLyBzcmMyLT50b051bWJlcihleGVjKSk7CisgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FU
X0VORCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9wcmVfZGVjKENUSV9BUkdTKQpAQCAtNTA1NCw3ICs1MDYwLDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX3ByZV9kZWMoQ1RJX0FSRwogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKGV4ZWMsIHYtPnRvTnVtYmVyKGV4ZWMpIC0gMSk7CisgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHYtPnRvTnVtYmVyKGV4ZWMpIC0gMSk7CiAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01
MTAwLDcgKzUxMDYsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcG9zdF9pbmMoQ1RJX0FS
CiAKICAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGV4ZWMpOwogICAgIFZNX0NI
RUNLX0VYQ0VQVElPTihKU1ZhbHVlKik7Ci0gICAgQVJHX3NldDJuZFJlc3VsdChqc051bWJlcihl
eGVjLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpICsgMSkpOworICAgIEFSR19zZXQybmRS
ZXN1bHQoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVy
KCkgKyAxKSk7CiAgICAgcmV0dXJuIG51bWJlcjsKIH0KIApAQCAtNTEyMiwxOSArNTEyOCwxNyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbHNoaWZ0KENUSV9BUkdTCiAgICAgSlNWYWx1ZSog
dmFsID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc2hpZnQgPSBBUkdfc3JjMjsKIAotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotCiAgICAgaW50MzJfdCBsZWZ0OwogICAgIHVpbnQz
Ml90IHJpZ2h0OwogICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMo
dmFsLCBzaGlmdCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBKU0ltbWVkaWF0ZTo6
Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQz
MihzaGlmdCkgJiAweDFmKSk7Ci0gICAgZWxzZSBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAm
JiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIGxlZnQgPDwgKHJpZ2h0ICYgMHgxZikpOwotICAgIGVsc2UgewotICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihleGVjLCAodmFsLT50b0ludDMyKGV4ZWMpKSA8PCAoc2hpZnQt
PnRvVUludDMyKGV4ZWMpICYgMHgxZikpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAgICByZXR1cm4ganNO
dW1iZXIoQVJHX2dsb2JhbERhdGEsIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWwp
IDw8IChKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHNoaWZ0KSAmIDB4MWYpKTsKKyAg
ICBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0
KSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IDw8IChyaWdo
dCAmIDB4MWYpKTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGV4ZWMp
KSA8PCAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYgMHgxZikpOworICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfYml0YW5kKENUSV9BUkdTKQpAQCAtNTE0MiwxNyArNTE0NiwxNSBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpjdGlfb3BfYml0YW5kKENUSV9BUkdTCiAgICAgSlNWYWx1ZSogc3JjMSA9IEFS
R19zcmMxOwogICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IEFSR19leGVjOwotCiAgICAgaW50MzJfdCBsZWZ0OwogICAgIGludDMyX3QgcmlnaHQ7
CiAgICAgaWYgKGZhc3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJp
Z2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxlZnQgJiByaWdodCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRv
SW50MzIoZXhlYykgJiBzcmMyLT50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OX0FUX0VORCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICYgcmlnaHQpOworCisgICAgRXhl
Y1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIoZXhlYykgJiBzcmMyLT50b0ludDMyKGV4ZWMp
KTsKKyAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3JzaGlmdChDVElfQVJHUykKQEAgLTUxNjAs
MzIgKzUxNjIsMjkgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3JzaGlmdChDVElfQVJHUwog
ICAgIEpTVmFsdWUqIHZhbCA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNoaWZ0ID0gQVJHX3Ny
YzI7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLQogICAgIGludDMyX3QgbGVm
dDsKICAgICB1aW50MzJfdCByaWdodDsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKQogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnJp
Z2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOwotICAgIGVsc2UgaWYgKGZhc3RU
b0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAg
IHJldHVybiBqc051bWJlcihleGVjLCBsZWZ0ID4+IChyaWdodCAmIDB4MWYpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgKHZhbC0+dG9JbnQz
MihleGVjKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKLSAgICAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
KyAgICBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJp
Z2h0KSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ID4+IChy
aWdodCAmIDB4MWYpKTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGV4
ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYgMHgxZikpOworICAgIFZNX0NIRUNLX0VY
Q0VQVElPTl9BVF9FTkQoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfYml0bm90KENUSV9BUkdTKQogewogICAgIEpTVmFsdWUqIHNyYyA9IEFSR19z
cmMxOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0KICAgICBpbnQgdmFsdWU7
CiAgICAgaWYgKGZhc3RUb0ludDMyKHNyYywgdmFsdWUpKQotICAgICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgfnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCB+dmFsdWUpOwogICAgICAgICAgICAgCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIo
ZXhlYywgfnNyYy0+dG9JbnQzMihleGVjKSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4
ZWM7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH5zcmMt
PnRvSW50MzIoZXhlYykpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtNTIzOCw3ICs1MjM3LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX21vZChDVElfQVJHUykKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwog
ICAgIGRvdWJsZSBkID0gZGl2aWRlbmRWYWx1ZS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZm1vZChkLCBkaXZpc29yVmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEs
IGZtb2QoZCwgZGl2aXNvclZhbHVlLT50b051bWJlcihleGVjKSkpOwogICAgIFZNX0NIRUNLX0VY
Q0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTI3Myw3ICs1Mjcy
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Bvc3RfZGVjKENUSV9BUgogICAgIEpTVmFs
dWUqIG51bWJlciA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
KEpTVmFsdWUqKTsKIAotICAgIEFSR19zZXQybmRSZXN1bHQoanNOdW1iZXIoZXhlYywgbnVtYmVy
LT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpKTsKKyAgICBBUkdfc2V0Mm5kUmVzdWx0KGpzTnVt
YmVyKEFSR19nbG9iYWxEYXRhLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSkpOwog
ICAgIHJldHVybiBudW1iZXI7CiB9CiAKQEAgLTUyODcsNyArNTI4Niw3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OmN0aV9vcF91cnNoaWZ0KENUSV9BUkcKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJv
dGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNOZWdhdGl2
ZSh2YWwpKQogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVO
dW1iZXJzKHZhbCwgc2hpZnQpOwogICAgIGVsc2UgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihleGVjLCAodmFsLT50b1VJbnQzMihleGVjKSkgPj4gKHNoaWZ0LT50b1VJbnQz
MihleGVjKSAmIDB4MWYpKTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsICh2YWwtPnRvVUludDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMyKGV4
ZWMpICYgMHgxZikpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNTMwMCw3ICs1Mjk5LDcgQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2JpdHhvcihDVElfQVJHUwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
QVJHX2V4ZWM7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBzcmMxLT50
b0ludDMyKGV4ZWMpIF4gc3JjMi0+dG9JbnQzMihleGVjKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIoZXhlYykgXiBzcmMyLT50
b0ludDMyKGV4ZWMpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTUzMTcsNyArNTMxNiw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9iaXRvcihDVElfQVJHUykKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwog
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3JjMS0+dG9JbnQzMihleGVj
KSB8IHNyYzItPnRvSW50MzIoZXhlYykpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVy
KEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMyKGV4ZWMpIHwgc3JjMi0+dG9JbnQzMihleGVj
KSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNzIxNSkKKysrIEphdmFTY3JpcHRD
b3JlL1ZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUNhbGxlcihFeGVjU3RhdGUqLCBJ
bnRlcm5hbEZ1bmN0aW9uKikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0Q2FsbGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQsIFVT
dHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25zdDsKICAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlciogZmlyc3RDYWxsRnJhbWUoY29uc3QgUmVnaXN0
ZXIqIGNhbGxGcmFtZSk7CiAgICAgICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bihjb25zdCBSZWdpc3RlciogcikgeyByZXR1cm4gcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5d
LnNjb3BlQ2hhaW4oKTsgfQogICAgICAgICBzdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2soY29u
c3QgUmVnaXN0ZXIqIHIpIHsgcmV0dXJuIHJbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLmNvZGVC
bG9jaygpOyB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1Z2dlckNhbGxGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cAkocmV2aXNpb24gMzcyMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJDYWxsRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIEpTVmFsdWUqIERlYnVnZ2Vy
Q2FsbEZyYW1lOjpldmFsdWF0ZShjb24KICAgICBpZiAoIW1fY29kZUJsb2NrKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2Jq
ZWN0KCksIG1fcmVnaXN0ZXJzKTsKKyAgICBFeGVjU3RhdGUgbmV3RXhlYyhtX3JlZ2lzdGVycyk7
CiAKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVyck1zZzsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9FeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAzNzIxNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9F
eGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICsxIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGVjU3RhdGUuaCIK
LQotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNp
bmNsdWRlICJTY29wZUNoYWluTWFyay5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotRXhlY1N0YXRl
OjpFeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVnaXN0ZXIqIGNhbGxG
cmFtZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAsIG1fZXhjZXB0
aW9uKDApCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpCi0g
ICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCi17Ci19Ci0KLUV4ZWNTdGF0ZTo6RXhlY1N0YXRl
KEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKLSAgICA6IG1fZ2xvYmFsT2Jq
ZWN0KGV4ZWMtPm1fZ2xvYmFsT2JqZWN0KQotICAgICwgbV9leGNlcHRpb24oMCkKLSAgICAsIG1f
Z2xvYmFsRGF0YShleGVjLT5tX2dsb2JhbERhdGEpCi0gICAgLCBtX2NhbGxGcmFtZShjYWxsRnJh
bWUpCi17Ci0gICAgQVNTRVJUKCFleGVjLT5tX2V4Y2VwdGlvbik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQworLyogZGVsZXRlIG1lICovCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCShyZXZp
c2lvbiAzNzIxNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsMjAgKzQxLDMwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIE1hY2hpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCosIFJlZ2lzdGVy
KiBjYWxsRnJhbWUpOworICAgICAgICBleHBsaWNpdCBFeGVjU3RhdGUoUmVnaXN0ZXIqIGNhbGxG
cmFtZSkKKyAgICAgICAgICAgIDogbV9leGNlcHRpb24oMCkKKyAgICAgICAgICAgICwgbV9jYWxs
RnJhbWUoY2FsbEZyYW1lKQorICAgICAgICB7CisgICAgICAgIH0KIAogICAgICAgICAvLyBHbG9i
YWwgb2JqZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KLSAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsg
fQotICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3Qo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTWFjaGluZTo6c2NvcGVDaGFp
bihNYWNoaW5lOjpmaXJzdENhbGxGcmFtZShtX2NhbGxGcmFtZSkpLT5nbG9iYWxPYmplY3QoKTsK
KyAgICAgICAgfQorCiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggdGhlIGN1cnJl
bnQgc2NyaXB0IHdhcyBkZWZpbmVkLiAoQ2FuIGRpZmZlcgogICAgICAgICAvLyBmcm9tIGR5bmFt
aWNHbG9iYWxPYmplY3QoKSBkdXJpbmcgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIGZyYW1lcy4pCiAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIE1hY2hpbmU6OnNjb3BlQ2hhaW4obV9jYWxsRnJhbWUp
LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSlNPYmplY3Qq
IGdsb2JhbFRoaXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIE1hY2hpbmU6OnNjb3BlQ2hhaW4obV9j
YWxsRnJhbWUpLT5nbG9iYWxUaGlzT2JqZWN0KCk7IH0KLSAgICAgICAgICAgICAgICAKKworICAg
ICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE1hY2hpbmU6OnNjb3BlQ2hhaW4obV9jYWxsRnJhbWUpLT5nbG9iYWxUaGlz
T2JqZWN0KCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBFeGNlcHRpb24gcHJvcG9nYXRpb24u
CiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpTVmFsdWUqIGV4Y2VwdGlvbikgeyBtX2V4Y2Vw
dGlvbiA9IGV4Y2VwdGlvbjsgfQogICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4
Y2VwdGlvbiA9IDA7IH0KQEAgLTY2LDQ1ICs3Niw0MCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIHZvaWQqIGN0aVJldHVybkFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2N0aVJldHVybkFk
ZHJlc3M7IH0KICNlbmRpZgogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpIHsg
cmV0dXJuICptX2dsb2JhbERhdGE7IH0KKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpNYWNoaW5lOjpzY29wZUNo
YWluKG1fY2FsbEZyYW1lKS0+Z2xvYmFsRGF0YTsKKyAgICAgICAgfQogCi0gICAgICAgIElkZW50
aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxlKCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhLT5pZGVu
dGlmaWVyVGFibGU7IH0KLSAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5
TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9Ci0g
ICAgICAgIGNvbnN0IEFyZ0xpc3QmIGVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0dXJuICptX2dsb2Jh
bERhdGEtPmVtcHR5TGlzdDsgfQotICAgICAgICBMZXhlciogbGV4ZXIoKSB7IHJldHVybiBtX2ds
b2JhbERhdGEtPmxleGVyOyB9Ci0gICAgICAgIFBhcnNlciogcGFyc2VyKCkgeyByZXR1cm4gbV9n
bG9iYWxEYXRhLT5wYXJzZXI7IH0KLSAgICAgICAgTWFjaGluZSogbWFjaGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsRGF0YS0+bWFjaGluZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBhcnJheVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9i
YWxEYXRhLT5hcnJheVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRh
dGVUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPm1fZ2xvYmFsRGF0YS0+ZGF0
ZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZShFeGVj
U3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPm1fZ2xvYmFsRGF0YS0+bWF0aFRhYmxlOyB9Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG51bWJlclRhYmxlKEV4ZWNTdGF0ZSogZXhl
YykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5udW1iZXJUYWJsZTsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0
dXJuIGV4ZWMtPm1fZ2xvYmFsRGF0YS0+cmVnRXhwVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsg
cmV0dXJuIGV4ZWMtPm1fZ2xvYmFsRGF0YS0+cmVnRXhwQ29uc3RydWN0b3JUYWJsZTsgfQotICAg
ICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdUYWJsZShFeGVjU3RhdGUqIGV4ZWMp
IHsgcmV0dXJuIGV4ZWMtPm1fZ2xvYmFsRGF0YS0+c3RyaW5nVGFibGU7IH0KKyAgICAgICAgSWRl
bnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUoKSB7IHJldHVybiBnbG9iYWxEYXRhKCkuaWRl
bnRpZmllclRhYmxlOyB9CisgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0
eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzOyB9Cisg
ICAgICAgIGNvbnN0IEFyZ0xpc3QmIGVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxE
YXRhKCkuZW1wdHlMaXN0OyB9CisgICAgICAgIExleGVyKiBsZXhlcigpIHsgcmV0dXJuIGdsb2Jh
bERhdGEoKS5sZXhlcjsgfQorICAgICAgICBQYXJzZXIqIHBhcnNlcigpIHsgcmV0dXJuIGdsb2Jh
bERhdGEoKS5wYXJzZXI7IH0KKyAgICAgICAgTWFjaGluZSogbWFjaGluZSgpIGNvbnN0IHsgcmV0
dXJuIGdsb2JhbERhdGEoKS5tYWNoaW5lOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUqIGFycmF5VGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5nbG9iYWxEYXRh
KCkuYXJyYXlUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFi
bGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuZGF0ZVRhYmxl
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZShFeGVjU3RhdGUq
IGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5tYXRoVGFibGU7IH0KKyAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJl
dHVybiBleGVjLT5nbG9iYWxEYXRhKCkubnVtYmVyVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVj
LT5nbG9iYWxEYXRhKCkucmVnRXhwVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4
ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDb25zdHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRp
YyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4g
ZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1RhYmxlOyB9CiAKLSAgICAgICAgSGVhcCogaGVhcCgp
IGNvbnN0IHsgcmV0dXJuICZtX2dsb2JhbERhdGEtPmhlYXA7IH0KKyAgICAgICAgSGVhcCogaGVh
cCgpIGNvbnN0IHsgcmV0dXJuICZnbG9iYWxEYXRhKCkuaGVhcDsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciByZXF1aXJlZCBmb3IgZ2NjIDMuCiAgICAg
ICAgIEV4ZWNTdGF0ZSgpIHsgfQogCi0gICAgICAgIEV4ZWNTdGF0ZShFeGVjU3RhdGUqLCBSZWdp
c3RlciogY2FsbEZyYW1lKTsKLQogICAgICAgICBib29sIGlzR2xvYmFsT2JqZWN0KEpTT2JqZWN0
KikgY29uc3Q7CiAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwotCiAg
ICAgICAgIEpTVmFsdWUqIG1fZXhjZXB0aW9uOwogI2lmIEVOQUJMRShDVEkpCiAgICAgICAgIHZv
aWQqIG1fY3RpUmV0dXJuQWRkcmVzczsKICNlbmRpZgotICAgICAgICBKU0dsb2JhbERhdGEqIG1f
Z2xvYmFsRGF0YTsKLQogICAgICAgICBSZWdpc3RlciogbV9jYWxsRnJhbWU7IC8vIFRoZSBtb3N0
IHJlY2VudCBjYWxsIGZyYW1lLgogICAgIH07CiAKLSAgICBlbnVtIENvZGVUeXBlIHsgR2xvYmFs
Q29kZSwgRXZhbENvZGUsIEZ1bmN0aW9uQ29kZSB9OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEV4ZWNTdGF0ZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25D
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzIxNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9G
dW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw4IEBA
IEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihFeGVjU3RhdGUqIGUKICAgICBzaXplX3QgY291
bnQgPSBwYXJhbWV0ZXJzLnNpemUoKTsKICAgICBmdW5jdGlvbkJvZHktPmZpbmlzaFBhcnNpbmco
c291cmNlLCBwYXJhbWV0ZXJzLnJlbGVhc2VCdWZmZXIoKSwgY291bnQpOwogCi0gICAgU2NvcGVD
aGFpbiBzY29wZUNoYWluKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+Z2xvYmFs
VGhpc1ZhbHVlKCkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgp
KTsKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVj
LCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQm9keS5nZXQoKSwgc2NvcGVDaGFpbi5ub2RlKCkpOwog
CiAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzNzIxNSkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiwxMSArMTIyLDE0IEBAIEpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQog
ICAgIGRlbGV0ZSBkKCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoKQordm9pZCBK
U0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQogewogICAgIEFTU0VSVChK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgZCgpLT5nbG9iYWxE
YXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOworICAgIGQoKS0+Z2xvYmFsU2Nv
cGVDaGFpbiA9IFNjb3BlQ2hhaW4odGhpcywgZCgpLT5nbG9iYWxEYXRhLmdldCgpLCB0aGlzVmFs
dWUpOworCisgICAgTWFjaGluZTo6aW5pdGlhbGl6ZUNhbGxGcmFtZShkKCktPmdsb2JhbENhbGxG
cmFtZSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgMCwgMCwgZCgpLT5nbG9i
YWxTY29wZUNoYWluLm5vZGUoKSwgbWFrZUhvc3RDYWxsRnJhbWVQb2ludGVyKDApLCAwLCAwLCAw
KTsKIAogICAgIGlmIChKU0dsb2JhbE9iamVjdComIGhlYWRPYmplY3QgPSBoZWFkKCkpIHsKICAg
ICAgICAgZCgpLT5wcmV2ID0gaGVhZE9iamVjdDsKQEAgLTEzOSw3ICsxNDIsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0Ojppbml0KCkKICAgICBkKCktPnJlY3Vyc2lvbiA9IDA7CiAgICAgZCgpLT5k
ZWJ1Z2dlciA9IDA7CiAKLSAgICBkKCktPmdsb2JhbEV4ZWMuc2V0KG5ldyBFeGVjU3RhdGUodGhp
cywgZCgpLT5nbG9iYWxDYWxsRnJhbWUgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUpKTsKKyAgICBkKCktPmdsb2JhbEV4ZWMuc2V0KG5ldyBFeGVjU3RhdGUoZCgpLT5nbG9iYWxD
YWxsRnJhbWUgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpKTsKIAogICAgIGQo
KS0+cHJvZmlsZUdyb3VwID0gMDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDM3MjE1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE0ICs1MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB0eXBlZGVmIFZlY3RvcjxFeGVjU3RhdGUqLCAxNj4gRXhlY1N0YXRlU3RhY2s7CiAKICAgICBj
bGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIENUSTsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHVzaW5nIEpTVmFyaWFi
bGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhOwogCiAgICAgICAgIHN0cnVjdCBKU0dsb2Jh
bE9iamVjdERhdGEgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdERhdGEgewotICAgICAgICAgICAg
SlNHbG9iYWxPYmplY3REYXRhKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiB0aGlzVmFsdWUpCisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdERhdGEoKQogICAgICAgICAg
ICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERhdGEoJnN5bWJvbFRhYmxlLCAwKQogICAgICAgICAg
ICAgICAgICwgcmVnaXN0ZXJBcnJheVNpemUoMCkKLSAgICAgICAgICAgICAgICAsIGdsb2JhbFNj
b3BlQ2hhaW4oZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpCisgICAgICAgICAgICAgICAgLCBnbG9i
YWxTY29wZUNoYWluKE5vU2NvcGVDaGFpbigpKQogICAgICAgICAgICAgICAgICwgcmVnRXhwQ29u
c3RydWN0b3IoMCkKICAgICAgICAgICAgICAgICAsIGVycm9yQ29uc3RydWN0b3IoMCkKICAgICAg
ICAgICAgICAgICAsIGV2YWxFcnJvckNvbnN0cnVjdG9yKDApCkBAIC03Niw3ICs3Nyw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgICwgZGF0ZVByb3RvdHlwZSgwKQogICAgICAg
ICAgICAgICAgICwgcmVnRXhwUHJvdG90eXBlKDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTWFjaGluZTo6aW5pdGlhbGl6ZUNhbGxGcmFtZShnbG9iYWxDYWxsRnJhbWUgKyBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIDAsIDAsIGdsb2JhbFNjb3BlQ2hhaW4ubm9k
ZSgpLCBtYWtlSG9zdENhbGxGcmFtZVBvaW50ZXIoMCksIDAsIDAsIDApOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICB2aXJ0dWFsIH5KU0dsb2JhbE9iamVjdERhdGEo
KQpAQCAtMTQ0LDE2ICsxNDQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwogCiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9i
amVjdChnbG9iYWxEYXRhLT5udWxsUHJvdG9TdHJ1Y3R1cmVJRCwgbmV3IEpTR2xvYmFsT2JqZWN0
RGF0YSh0aGlzLCB0aGlzKSkKKyAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxE
YXRhLT5udWxsUHJvdG9TdHJ1Y3R1cmVJRCwgbmV3IEpTR2xvYmFsT2JqZWN0RGF0YSkKICAgICAg
ICAgewotICAgICAgICAgICAgaW5pdCgpOworICAgICAgICAgICAgaW5pdCh0aGlzKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBKU0dsb2JhbE9iamVjdChQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0RGF0YSogZGF0YSkKKyAgICAg
ICAgSlNHbG9iYWxPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU0ds
b2JhbE9iamVjdERhdGEqIGRhdGEsIEpTT2JqZWN0KiB0aGlzVmFsdWUpCiAgICAgICAgICAgICA6
IEpTVmFyaWFibGVPYmplY3Qoc3RydWN0dXJlLCBkYXRhKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpbml0KCk7CisgICAgICAgICAgICBpbml0KHRoaXNWYWx1ZSk7CiAgICAgICAgIH0KIAogICAg
IHB1YmxpYzoKQEAgLTI2Nyw3ICsyNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIC8vIEZJWE1FOiBGb2xkIHJlc2V0IGludG8gaW5pdC4KLSAgICAgICAgdm9p
ZCBpbml0KCk7CisgICAgICAgIHZvaWQgaW5pdChKU09iamVjdCogdGhpc1ZhbHVlKTsKICAgICAg
ICAgdm9pZCByZXNldChKU1ZhbHVlKiBwcm90b3R5cGUpOwogCiAgICAgICAgIHZvaWQgc2V0UmVn
aXN0ZXJzKFJlZ2lzdGVyKiByZWdpc3RlcnMsIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5LCBzaXpl
X3QgY291bnQpOwpAQCAtMzMyLDcgKzMzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJQcm90b3R5cGUoKTsKICAg
ICB9CiAKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0dsb2JhbE9iamVjdF9o
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNOdW1iZXJDZWxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvSlNOdW1iZXJDZWxsLmNwcAkocmV2aXNpb24gMzcyMTUpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvSlNOdW1iZXJDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDQgKzExMSwxNCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSoganNOYU4oRXhlY1N0YXRlKiBl
CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOdW1iZXJDZWxsKGV4ZWMsIE5hTik7CiB9CiAKK05F
VkVSX0lOTElORSBKU1ZhbHVlKiBqc051bWJlckNlbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBkb3VibGUgZCkKK3sKKyAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU051bWJlckNlbGwo
Z2xvYmFsRGF0YSwgZCk7Cit9CisKK05FVkVSX0lOTElORSBKU1ZhbHVlKiBqc05hTihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNOdW1i
ZXJDZWxsKGdsb2JhbERhdGEsIE5hTik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0pTTnVtYmVyQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU051bWJlckNlbGwuaAkocmV2aXNpb24gMzcyMTUpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvSlNOdW1iZXJDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU051bWJlckNlbGwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIENUSTsKKyAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpz
TnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqLCBkb3VibGUpOworICAgICAgICBmcmllbmQgSlNWYWx1
ZSoganNOYU4oSlNHbG9iYWxEYXRhKik7CiAgICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc051bWJl
ckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKTsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTmFO
KEV4ZWNTdGF0ZSopOwogICAgIHB1YmxpYzoKQEAgLTcxLDkgKzczLDI0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICNlbmRpZgogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAj
aWZkZWYgSkFWQVNDUklQVENPUkVfQlVJTERJTkdfQUxMX0lOX09ORV9GSUxFCisgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+aGVhcC5pbmxpbmVBbGxvY2F0ZU51bWJlcihzaXplKTsKKyAg
ICAjZWxzZQorICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmhlYXAuYWxsb2NhdGVOdW1i
ZXIoc2l6ZSk7CisgICAgI2VuZGlmCisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG8pIHsgcmV0
dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE51bWJlclR5cGUpKTsgfQog
CiAgICAgcHJpdmF0ZToKKyAgICAgICAgSlNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgZG91YmxlIHZhbHVlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YS0+bnVt
YmVyU3RydWN0dXJlSUQuZ2V0KCkpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCiAgICAgICAgIEpTTnVtYmVyQ2VsbChFeGVjU3RhdGUqIGV4ZWMs
IGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKS5u
dW1iZXJTdHJ1Y3R1cmVJRC5nZXQoKSkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAg
LTk5LDYgKzExNiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHYgPyB2IDog
anNOdW1iZXJDZWxsKGV4ZWMsIGQpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSoganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBzaG9ydCBpKQorICAgIHsKKyAgICAgICAgSlNW
YWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICByZXR1cm4gdiA/IHYgOiBq
c051bWJlckNlbGwoZXhlYywgaSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
KiBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHNob3J0IGkpCisgICAgeworICAg
ICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2
ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IGkpCiAgICAgewogICAgICAg
ICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CkBAIC0xMzUsNiArMTY0LDYwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhl
Yywgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQorICAg
IHsKKyAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGQpOworICAgICAgICBy
ZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgZCk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IHNob3J0IGkpCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20o
aSk7CisgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgc2hvcnQgaSkKKyAgICB7CisgICAgICAgIEpTVmFsdWUq
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1i
ZXJDZWxsKGdsb2JhbERhdGEsIGkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgaSkKKyAgICB7CisgICAg
ICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgcmV0dXJuIHYg
PyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkpOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBpKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwor
ICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGxvbmcgaSkKKyAgICB7CisgICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0
ZTo6ZnJvbShpKTsKKyAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERh
dGEsIGkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsb25nIGkpCisgICAgeworICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2ID8gdiA6
IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgbG9uZyBsb25nIGkp
CisgICAgeworICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAg
ICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBzdGF0aWNfY2FzdDxk
b3VibGU+KGkpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGkpCisgICAgewor
ICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVy
biB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkp
KTsKKyAgICB9CisKICAgICAvLyAtLS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6dW5jaGVja2VkR2V0TnVt
YmVyKCkgY29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9TY29wZUNoYWluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1Njb3BlQ2hhaW4uaAkocmV2aXNpb24gMzcyMTUp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvU2NvcGVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNiArMzEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgU2NvcGVDaGFp
bk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVDaGFpbk5v
ZGUqIG4sIEpTT2JqZWN0KiBvLCBKU09iamVjdCogZ3QpCi0gICAgICAgICAgICA6IG5leHQobikK
LSAgICAgICAgICAgICwgb2JqZWN0KG8pCi0gICAgICAgICAgICAsIGdsb2JhbFRoaXMoZ3QpCisg
ICAgICAgIFNjb3BlQ2hhaW5Ob2RlKFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQorICAg
ICAgICAgICAgOiBuZXh0KG5leHQpCisgICAgICAgICAgICAsIG9iamVjdChvYmplY3QpCisgICAg
ICAgICAgICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgICwgZ2xvYmFsVGhp
cyhnbG9iYWxUaGlzKQogICAgICAgICAgICAgLCByZWZDb3VudCgxKQogICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YSk7CiAgICAgICAgIH0KIAogICAgICAgICBTY29wZUNo
YWluTm9kZSogbmV4dDsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdDsKKyAgICAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhOwogICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpczsKICAgICAg
ICAgaW50IHJlZkNvdW50OwogCkBAIC03OCw3ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGlubGluZSBTY29wZUNoYWluTm9kZSogU2NvcGVDaGFpbk5vZGU6OnB1c2goSlNPYmplY3QqIG8p
CiAgICAgewogICAgICAgICBBU1NFUlQobyk7Ci0gICAgICAgIHJldHVybiBuZXcgU2NvcGVDaGFp
bk5vZGUodGhpcywgbywgZ2xvYmFsVGhpcyk7CisgICAgICAgIHJldHVybiBuZXcgU2NvcGVDaGFp
bk5vZGUodGhpcywgbywgZ2xvYmFsRGF0YSwgZ2xvYmFsVGhpcyk7CiAgICAgfQogCiAgICAgaW5s
aW5lIFNjb3BlQ2hhaW5Ob2RlKiBTY29wZUNoYWluTm9kZTo6cG9wKCkKQEAgLTE1NSw4ICsxNTgs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgU2Nv
cGVDaGFpbihKU09iamVjdCogbywgSlNPYmplY3QqIGdsb2JhbFRoaXMpCi0gICAgICAgICAgICA6
IG1fbm9kZShuZXcgU2NvcGVDaGFpbk5vZGUoMCwgbywgZ2xvYmFsVGhpcykpCisgICAgICAgIFNj
b3BlQ2hhaW4oSlNPYmplY3QqIG8sIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNPYmplY3Qq
IGdsb2JhbFRoaXMpCisgICAgICAgICAgICA6IG1fbm9kZShuZXcgU2NvcGVDaGFpbk5vZGUoMCwg
bywgZ2xvYmFsRGF0YSwgZ2xvYmFsVGhpcykpCiAgICAgICAgIHsKICAgICAgICAgfQogCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gMzcyMTUpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgog
CisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAJKHJldmlzaW9uIDM3MjE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsOSArMTYzLDggQEAgY29uc3QgQ2xhc3NJbmZv
IEpTRE9NV2luZG93QmFzZTo6c19pbmZvIAogQGVuZAogKi8KIAotSlNET01XaW5kb3dCYXNlOjpK
U0RPTVdpbmRvd0Jhc2VEYXRhOjpKU0RPTVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiB3aW5kb3csIEpTRE9NV2luZG93QmFzZSoganNXaW5kb3csIEpTRE9NV2luZG93U2hlbGwq
IHNoZWxsKQotICAgIDogSlNHbG9iYWxPYmplY3REYXRhKGpzV2luZG93LCBzaGVsbCkKLSAgICAs
IGltcGwod2luZG93KQorSlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2VEYXRhOjpKU0RP
TVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93
U2hlbGwqIHNoZWxsKQorICAgIDogaW1wbCh3aW5kb3cpCiAgICAgLCBldnQoMCkKICAgICAsIHJl
dHVyblZhbHVlU2xvdCgwKQogICAgICwgc2hlbGwoc2hlbGwpCkBAIC0xNzMsNyArMTcyLDcgQEAg
SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2VEYXRhOjpKUwogfQogCiBKU0RPTVdpbmRv
d0Jhc2U6OkpTRE9NV2luZG93QmFzZShQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQot
ICAgIDogSlNHbG9iYWxPYmplY3Qoc3RydWN0dXJlLCBuZXcgSlNET01XaW5kb3dCYXNlRGF0YSh3
aW5kb3csIHRoaXMsIHNoZWxsKSkKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwgbmV3
IEpTRE9NV2luZG93QmFzZURhdGEod2luZG93LCBzaGVsbCksIHNoZWxsKQogewogICAgIC8vIFRp
bWUgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgc2NyaXB0IHRpbWVvdXQgaGFuZGxlciBraWNr
cyBpbi4KICAgICBzZXRUaW1lb3V0VGltZSgxMDAwMCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDM3MjE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0RPTVdp
bmRvd0Jhc2VEYXRhIDogcHVibGljIEpTR2xvYmFsT2JqZWN0RGF0YSB7Ci0gICAgICAgICAgICBK
U0RPTVdpbmRvd0Jhc2VEYXRhKFBhc3NSZWZQdHI8RE9NV2luZG93PiwgSlNET01XaW5kb3dCYXNl
KiwgSlNET01XaW5kb3dTaGVsbCopOworICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlRGF0YShQ
YXNzUmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93U2hlbGwqKTsKIAogICAgICAgICAgICAg
UmVmUHRyPERPTVdpbmRvdz4gaW1wbDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24059</attachid>
            <date>2008-10-03 12:03:56 -0700</date>
            <delta_ts>2008-10-04 13:11:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>MaulExecStatePatch.txt</filename>
            <type>text/plain</type>
            <size>84353</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MjQ0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkzIEBACisyMDA4LTEwLTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIG5leHQgc3RlcCBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyOTUKKyAgICAgICAgICBUdXJuIEV4ZWNTdGF0ZSBpbnRvIGEgY2Fs
bCBmcmFtZSBwb2ludGVyLgorCisgICAgICAgIFJlbW92ZSBtX2dsb2JhbE9iamVjdCBhbmQgbV9n
bG9iYWxEYXRhIGZyb20gRXhlY1N0YXRlLgorCisgICAgICAgIFN1blNwaWRlciBzYXlzIHRoaXMg
aXMgYSB3YXNoIChzbGlnaHRseSBmYXN0ZXIgYnV0IG5vdCBzdGF0aXN0aWNhbGx5CisgICAgICAg
IHNpZ25pZmljYW50KTsgd2hpY2ggaXMgZ29vZCBlbm91Z2ggc2luY2UgaXQncyBhIHByZXBhcmF0
aW9uIHN0ZXAgYW5kCisgICAgICAgIG5vdCBzdXBwb3NlZCB0byBiZSBhIHNwZWR1cC4KKworICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxi
YWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5jdGlvbik6CisgICAgICAgICoga2pzL0FycmF5Q29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUNvbnN0cnVjdG9yOjpBcnJheUNvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBranMvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Qm9vbGVhbkNvbnN0cnVjdG9yOjpCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGtqcy9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6
OkRhdGVDb25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pzL0Vycm9yQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpFcnJvckNvbnN0cnVjdG9yOjpFcnJvckNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKiBranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBy
b3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAqIGtqcy9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6SlNGdW5jdGlvbik6CisgICAgICAgICoga2pz
L05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJvckNv
bnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBranMvTnVtYmVy
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6TnVtYmVy
Q29uc3RydWN0b3IpOgorICAgICAgICAqIGtqcy9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6Ok9iamVjdENvbnN0cnVjdG9yOjpPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAg
ICoga2pzL1Byb3RvdHlwZUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlRnVu
Y3Rpb246OlByb3RvdHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKiBranMvUmVnRXhwQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0
b3IpOgorICAgICAgICAqIGtqcy9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OlN0cmluZ0NvbnN0cnVjdG9yOjpTdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIFBhc3MgSlNH
bG9iYWxEYXRhKiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSogdG8gdGhlIEludGVybmFsRnVuY3Rpb24K
KyAgICAgICAgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBBUEkvT3BhcXVlSlNTdHJpbmcuY3Bw
OiBBZGRlZCBub3ctbmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5l
eHA6IFVwZGF0ZWQuCisKKyAgICAgICAgKiBWTS9DVEkuY3BwOgorICAgICAgICAoSlNDOjpDVEk6
OmVtaXRTbG93U2NyaXB0Q2hlY2spOiBDaGFuZ2VkIHRvIHVzZSBBUkdTX2dsb2JhbERhdGEKKyAg
ICAgICAgaW5zdGVhZCBvZiBBUkdTX2V4ZWMuCisKKyAgICAgICAgKiBWTS9DVEkuaDogQWRkZWQg
YSBuZXcgYXJndW1lbnQgdG8gdGhlIENUSSwgdGhlIGdsb2JhbCBkYXRhIHBvaW50ZXIuCisgICAg
ICAgIFdoaWxlIGl0J3MgcG9zc2libGUgdG8gZ2V0IHRvIHRoZSBnbG9iYWwgZGF0YSBwb2ludGVy
IHVzaW5nIHRoZQorICAgICAgICBFeGVjU3RhdGUgcG9pbnRlciwgaXQncyBzbG93IGVub3VnaCB0
aGF0IGl0J3MgYmV0dGVyIHRvIGp1c3Qga2VlcAorICAgICAgICBpdCBhcm91bmQgaW4gdGhlIENU
SSBhcmd1bWVudHMuCisKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suaDogTW92ZWQgdGhlIENvZGVU
eXBlIGVudW0gaGVyZSBmcm9tIEV4ZWNTdGF0ZS5oLgorCisgICAgICAgICogVk0vTWFjaGluZS5j
cHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmV4ZWN1dGUpOiBQYXNzIGZld2VyIGFyZ3VtZW50
cyB3aGVuIGNvbnN0cnVjdGluZworICAgICAgICBFeGVjU3RhdGUsIGFuZCBwYXNzIHRoZSBnbG9i
YWwgZGF0YSBwb2ludGVyIHdoZW4gaW52b2tpbmcgQ1RJLgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpmaXJzdENhbGxGcmFtZSk6IEFkZGVkLiBVc2VkIHRvIGdldCB0aGUgZHluYW1pYyBnbG9iYWwK
KyAgICAgICAgb2JqZWN0LCB3aGljaCBpcyBpbiB0aGUgc2NvcGUgY2hhaW4gb2YgdGhlIGZpcnN0
IGNhbGwgZnJhbWUuCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9hZGQpOiBVc2UgZ2xv
YmFsRGF0YSBpbnN0ZWFkIG9mIGV4ZWMgd2hlbgorICAgICAgICBwb3NzaWJsZSwgdG8ga2VlcCBm
YXN0IGNhc2VzIGZhc3QsIHNpbmNlIGl0J3Mgbm93IG1vcmUgZXhwZW5zaXZlIHRvCisgICAgICAg
IGdldCB0byBpdCB0aHJvdWdoIHRoZSBleGVjIHBvaW50ZXIuCisgICAgICAgIChKU0M6Ok1hY2hp
bmU6OmN0aV90aW1lb3V0X2NoZWNrKTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0
aV9vcF9wdXRfYnlfaWRfc2Vjb25kKTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0
aV9vcF9nZXRfYnlfaWRfc2Vjb25kKTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0
aV9vcF9tdWwpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX3ZtX2NvbXBpbGUp
OiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2dldF9ieV92YWwpOiBEaXR0
by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3N1Yik6IERpdHRvLgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbCk6IERpdHRvLgorICAgICAgICAoSlNDOjpN
YWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk6IERpdHRvLgorICAgICAgICAoSlNDOjpN
YWNoaW5lOjpjdGlfb3BfbmVnYXRlKTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0
aV9vcF9kaXYpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3ByZV9kZWMp
OiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3Bvc3RfaW5jKTogRGl0dG8u
CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9sc2hpZnQpOiBEaXR0by4KKyAgICAgICAg
KEpTQzo6TWFjaGluZTo6Y3RpX29wX2JpdGFuZCk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfb3BfcnNoaWZ0KTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9iaXRub3QpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX21vZCk6IERp
dHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcG9zdF9kZWMpOiBEaXR0by4KKyAg
ICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3Vyc2hpZnQpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX29wX2JpdHhvcik6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfYml0b3IpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2Nh
bGxfZXZhbCk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfdGhyb3cpOiBE
aXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2lzX3N0cmluZyk6IERpdHRvLgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZGVidWcpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX3ZtX3Rocm93KTogRGl0dG8uCisKKyAgICAgICAgKiBWTS9NYWNoaW5l
Lmg6IEFkZGVkIGZpcnN0Q2FsbEZyYW1lLgorCisgICAgICAgICoga2pzL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKTogUGFz
cyBmZXdlciBhcmd1bWVudHMgd2hlbgorICAgICAgICBjb25zdHJ1Y3RpbmcgRXhlY1N0YXRlLgor
CisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5jcHA6IERlbGV0ZWQgY29udGVudHMuIExhdGVyIHdl
J2xsIHJlbW92ZSB0aGUKKyAgICAgICAgZmlsZSBhbHRvZ2V0aGVyLgorCisgICAgICAgICoga2pz
L0V4ZWNTdGF0ZS5oOiBSZW1vdmVkIG1fZ2xvYmFsT2JqZWN0IGFuZCBtX2dsb2JhbERhdGEuCisg
ICAgICAgIE1vdmVkIENvZGVUeXBlIGludG8gYW5vdGhlciBoZWFkZXIuCisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6RXhlY1N0YXRlKTogVGFrZSBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LCBhCisg
ICAgICAgIGNhbGwgZnJhbWUgcG9pbnRlci4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkeW5h
bWljR2xvYmFsT2JqZWN0KTogR2V0IHRoZSBvYmplY3QgZnJvbQorICAgICAgICB0aGUgZmlyc3Qg
Y2FsbCBmcmFtZSBzaW5jZSBpdCdzIG5vIGxvbmdlciBzdG9yZWQuCisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6Z2xvYmFsRGF0YSk6IEdldCB0aGUgZ2xvYmFsIGRhdGEgZnJvbSB0aGUKKyAgICAg
ICAgc2NvcGUgY2hhaW4sIHNpbmNlIHdlIG5vIGxvbmdlciBzdG9yZSBhIHBvaW50ZXIgdG8gaXQg
aGVyZS4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjppZGVudGlmaWVyVGFibGUpOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpwcm9wZXJ0eU5hbWVzKTogRGl0dG8uCisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6ZW1wdHlMaXN0KTogRGl0dG8uCisgICAgICAgIChKU0M6OkV4ZWNT
dGF0ZTo6bGV4ZXIpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpwYXJzZXIpOiBE
aXR0by4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjptYWNoaW5lKTogRGl0dG8uCisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6YXJyYXlUYWJsZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpFeGVj
U3RhdGU6OmRhdGVUYWJsZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6Om1hdGhU
YWJsZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6Om51bWJlclRhYmxlKTogRGl0
dG8uCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6cmVnRXhwVGFibGUpOiBEaXR0by4KKyAgICAg
ICAgKEpTQzo6RXhlY1N0YXRlOjpyZWdFeHBDb25zdHJ1Y3RvclRhYmxlKTogRGl0dG8uCisgICAg
ICAgIChKU0M6OkV4ZWNTdGF0ZTo6c3RyaW5nVGFibGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
RXhlY1N0YXRlOjpoZWFwKTogRGl0dG8uCisKKyAgICAgICAgKiBranMvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29uc3RydWN0b3I6OkZ1bmN0aW9uQ29u
c3RydWN0b3IpOiBQYXNzCisgICAgICAgIEpTR2xvYmFsRGF0YSogaW5zdGVhZCBvZiBFeGVjU3Rh
dGUqIHRvIHRoZSBJbnRlcm5hbEZ1bmN0aW9uCisgICAgICAgIGNvbnN0cnVjdG9yLgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RGdW5jdGlvbik6IFBhc3MgdGhlIGdsb2JhbCBkYXRhIHBvaW50ZXIg
d2hlbgorICAgICAgICBjb25zdHJ1Y3RpbmcgYSBuZXcgc2NvcGUgY2hhaW4uCisKKyAgICAgICAg
KiBranMvSW50ZXJuYWxGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rp
b246OkludGVybmFsRnVuY3Rpb24pOiBUYWtlIGEgSlNHbG9iYWxEYXRhKgorICAgICAgICBpbnN0
ZWFkIG9mIGFuIEV4ZWNTdGF0ZSouIExhdGVyIHdlIGNhbiBjaGFuZ2UgbW9yZSBwbGFjZXMgdG8K
KyAgICAgICAgd29yayB0aGlzIHdheSAtLSBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIHRha2UgdGhl
IHR5cGUgeW91IG5lZWQKKyAgICAgICAgc2luY2UgdGhlIGNhbGxlciBtaWdodCBhbHJlYWR5IGhh
dmUgaXQuCisgICAgICAgICoga2pzL0ludGVybmFsRnVuY3Rpb24uaDogRGl0dG8uCisKKyAgICAg
ICAgKiBranMvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6b3BlcmF0b3IgbmV3KTog
QWRkZWQgYW4gb3ZlcmxvYWQgdGhhdCB0YWtlcyBhCisgICAgICAgIEpTR2xvYmFsRGF0YSogc28g
eW91IGNhbiBjb25zdHJ1Y3Qgd2l0aG91dCBhbiBFeGVjU3RhdGUqLgorCisgICAgICAgICoga2pz
L0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQp
OiBNb3ZlZCBjcmVhdGlvbiBvZiB0aGUgZ2xvYmFsIHNjb3BlCisgICAgICAgIGNoYWluIGluIGhl
cmUsIHNpbmNlIGl0IG5vdyByZXF1aXJlcyBhIHBvaW50ZXIgdG8gdGhlIGdsb2JhbCBkYXRhLgor
ICAgICAgICBNb3ZlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNhbGwgZnJhbWUgaW4gaGVy
ZSBzaW5jZSBpdCByZXF1aXJlcworICAgICAgICB0aGUgZ2xvYmFsIHNjb3BlIGNoYWluIG5vZGUu
IFJlbW92ZWQgdGhlIGV4dHJhIGFyZ3VtZW50IHRvIEV4ZWNTdGF0ZQorICAgICAgICB3aGVuIGNy
ZWF0aW5nIHRoZSBnbG9iYWwgRXhlY1N0YXRlKi4KKyAgICAgICAgKiBranMvSlNHbG9iYWxPYmpl
Y3QuaDogUmVtb3ZlZCBpbml0aWFsaXphdGlvbiBvZiBnbG9iYWxTY29wZUNoYWluCisgICAgICAg
IGFuZCB0aGUgY2FsbCBmcmFtZSBmcm9tIHRoZSBKU0dsb2JhbE9iamVjdERhdGEgY29uc3RydWN0
b3IuIEFkZGVkCisgICAgICAgIGEgdGhpc1ZhbHVlIGFyZ3VtZW50IHRvIHRoZSBpbml0IGZ1bmN0
aW9uLgorCisgICAgICAgICoga2pzL0pTTnVtYmVyQ2VsbC5jcHA6IEFkZGVkIHZlcnNpb25zIG9m
IGpzTnVtYmVyQ2VsbCB0aGF0IHRha2UKKyAgICAgICAgSlNHbG9iYWxEYXRhKiByYXRoZXIgdGhh
biBFeGVjU3RhdGUqLgorICAgICAgICAqIGtqcy9KU051bWJlckNlbGwuaDoKKyAgICAgICAgKEpT
Qzo6SlNOdW1iZXJDZWxsOjpvcGVyYXRvciBuZXcpOiBBZGRlZCBhIHZlcnNpb24gdGhhdCB0YWtl
cworICAgICAgICBKU0dsb2JhbERhdGEqLgorICAgICAgICAoSlNDOjpKU051bWJlckNlbGw6OkpT
TnVtYmVyQ2VsbCk6IERpdHRvLgorICAgICAgICAoSlNDOjpqc051bWJlcik6IERpdHRvLgorICAg
ICAgICAqIGtqcy9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKTogRGl0dG8u
CisgICAgICAgIChKU0M6OmpzU3Vic3RyaW5nKTogRGl0dG8uCisgICAgICAgIChKU0M6OmpzT3du
ZWRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBranMvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OkpTU3RyaW5nKTogQ2hhbmdlZCB0byB0YWtlIEpTR2xvYmFsRGF0YSouCisg
ICAgICAgIChKU0M6OmpzRW1wdHlTdHJpbmcpOiBBZGRlZCBhIHZlcnNpb24gdGhhdCB0YWtlcyBK
U0dsb2JhbERhdGEqLgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN0cmluZyk6IERp
dHRvLgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6IERpdHRvLgor
ICAgICAgICAoSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OmdldEluZGV4KTogRGl0dG8uCisgICAgICAgIChKU0M6OmpzU3RyaW5nKTogRGl0
dG8uCisgICAgICAgIChKU0M6OmpzU3Vic3RyaW5nKTogRGl0dG8uCisgICAgICAgIChKU0M6Ompz
T3duZWRTdHJpbmcpOiBEaXR0by4KKworICAgICAgICAqIGtqcy9TY29wZUNoYWluLmg6IEFkZGVk
IGEgZ2xvYmFsRGF0YSBwb2ludGVyIHRvIGVhY2ggbm9kZS4KKyAgICAgICAgKEpTQzo6U2NvcGVD
aGFpbk5vZGU6OlNjb3BlQ2hhaW5Ob2RlKTogSW5pdGlhbGl6ZSB0aGUgZ2xvYmFsRGF0YQorICAg
ICAgICBwb2ludGVyLgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6cHVzaCk6IFNldCB0
aGUgZ2xvYmFsIGRhdGEgcG9pbnRlciBpbiB0aGUKKyAgICAgICAgbmV3IG5vZGUuCisgICAgICAg
IChKU0M6OlNjb3BlQ2hhaW46OlNjb3BlQ2hhaW4pOiBUYWtlIGEgZ2xvYmFsRGF0YSBhcmd1bWVu
dC4KKworICAgICAgICAqIGtqcy9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFs
bFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKTogVGFrZSBKU0dsb2JhbERhdGEqIGluc3RlYWQg
b2YKKyAgICAgICAgRXhlY1N0YXRlKi4KKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVh
dGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBranMvU21hbGxTdHJp
bmdzLmg6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6ZW1wdHlTdHJpbmcpOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOiBEaXR0
by4KKwogMjAwOC0xMC0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUnViYmVyIHN0YW1wZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgX19aTjNK
U0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJTYW1wbGluZ1Rvb2w0ZHVtcEVQTlNfOUV4
ZWNTdGF0ZUUKIF9fWk4zSlNDMTJTYW1wbGluZ1Rvb2w0c3RvcEV2CiBfX1pOM0pTQzEyU2FtcGxp
bmdUb29sNXN0YXJ0RWoKLV9fWk4zSlNDMTJTbWFsbFN0cmluZ3MxN2NyZWF0ZUVtcHR5U3RyaW5n
RVBOU185RXhlY1N0YXRlRQorX19aTjNKU0MxMlNtYWxsU3RyaW5nczE3Y3JlYXRlRW1wdHlTdHJp
bmdFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MxMlN0cmluZ09iamVjdDE0ZGVsZXRlUHJv
cGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzEyU3RyaW5n
T2JqZWN0MTR0b1RoaXNKU1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTJTdHJpbmdP
YmplY3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1l
QXJyYXlFCkBAIC0xMzYsNyArMTM2LDcgQEAgX19aTjNKU0MxMlN0cmluZ09iamVjdEMyRVBOU185
RXhlY1N0YXRlRQogX19aTjNKU0MxMmpzTnVtYmVyQ2VsbEVQTlNfOUV4ZWNTdGF0ZUVkCiBfX1pO
M0pTQzEzQ29kZUdlbmVyYXRvcjIxc2V0RHVtcHNHZW5lcmF0ZWRDb2RlRWIKIF9fWk4zSlNDMTNT
dGF0ZW1lbnROb2RlNnNldExvY0VpaQotX19aTjNKU0MxM2pzT3duZWRTdHJpbmdFUE5TXzlFeGVj
U3RhdGVFUktOU183VVN0cmluZ0UKK19fWk4zSlNDMTNqc093bmVkU3RyaW5nRVBOU18xMkpTR2xv
YmFsRGF0YUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTBnbG9iYWxF
eGVjRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzE0SlNHbG9iYWxP
YmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNf
OEpTT2JqZWN0RQpAQCAtMTQ1LDE0ICsxNDUsMTQgQEAgX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
MTZzdG9wVGltZW91dENoZQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmli
dXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFagogX19a
TjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdzdGFydFRpbWVvdXRDaGVja0V2CiBfX1pOM0pTQzE0SlNH
bG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNW
YWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5p
dEV2CitfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQogX19aTjNK
U0MxNEpTR2xvYmFsT2JqZWN0NG1hcmtFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgog
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0bndFbVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk4zSlND
MTRjb25zdHJ1Y3RBcnJheUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RQogX19aTjNKU0Mx
NUpTV3JhcHBlck9iamVjdDRtYXJrRXYKIF9fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uNGluZm9F
Ci1fX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbkMyRVBOU185RXhlY1N0YXRlRU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExU3RydWN0dXJlSURFRUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDMTZJ
bnRlcm5hbEZ1bmN0aW9uQzJFUE5TXzEySlNHbG9iYWxEYXRhRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzExU3RydWN0dXJlSURFRUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDMTZKU1ZhcmlhYmxl
T2JqZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUK
IF9fWk4zSlNDMTZKU1ZhcmlhYmxlT2JqZWN0MTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhlY1N0
YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RQogX19aTjNKU0MxNlBhcnNlclJlZkNvdW50ZWQz
cmVmRXYKQEAgLTIwNiw2ICsyMDYsNyBAQCBfX1pOM0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRVBO
U183SlNWYWx1CiBfX1pOM0pTQzdDU3RyaW5nRDFFdgogX19aTjNKU0M3Q1N0cmluZ2FTRVJLUzBf
CiBfX1pOM0pTQzdKU0FycmF5NGluZm9FCitfX1pOM0pTQzdNYWNoaW5lMTRmaXJzdENhbGxGcmFt
ZUVQS05TXzhSZWdpc3RlckUKIF9fWk4zSlNDN1Byb2ZpbGUxMHJlc3RvcmVBbGxFdgogX19aTjNK
U0M3UHJvZmlsZTVmb2N1c0VQS05TXzExUHJvZmlsZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2V4
Y2x1ZGVFUEtOU18xMVByb2ZpbGVOb2RlRQpAQCAtMjQ1LDcgKzI0Niw3IEBAIF9fWk4zSlNDOEpT
T2JqZWN0NG1hcmtFdgogX19aTjNKU0M4UHJvZmlsZXIxM3N0b3BQcm9maWxpbmdFUE5TXzlFeGVj
U3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlNDOFByb2ZpbGVyMTRzdGFydFByb2ZpbGluZ0VQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M4UHJvZmlsZXI4cHJvZmlsZXJF
dgotX19aTjNKU0M4anNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKK19fWk4z
SlNDOGpzU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M5
Q29kZUJsb2NrRDFFdgogX19aTjNKU0M5Q29kZUJsb2NrRDJFdgogX19aTjNKU0M5Y29uc3RydWN0
RVBOU185RXhlY1N0YXRlRVBOU183SlNWYWx1ZUVOU18xM0NvbnN0cnVjdFR5cGVFUktOU18xM0Nv
bnN0cnVjdERhdGFFUktOU183QXJnTGlzdEUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNDYWxsYmFja0Z1bmMKIGNvbnN0IENsYXNzSW5m
byBKU0NhbGxiYWNrRnVuY3Rpb246OmluZm8gPSB7ICJDYWxsYmFja0Z1bmN0aW9uIiwgJkludGVy
bmFsRnVuY3Rpb246OmluZm8sIDAsIDAgfTsKIAogSlNDYWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxi
YWNrRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJh
Y2sgY2FsbGJhY2ssIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tGdW5jdGlvblN0
cnVjdHVyZSgpLCBuYW1lKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgbmFtZSkKICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiB7CiB9CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNj
cmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIk9wYXF1ZUpTU3RyaW5nLmgiCiAKICNpbmNsdWRlIDxranMvRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8a2pz
L2lkZW50aWZpZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL1ZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAko
cmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MjcsOCArNjI3LDcgQEAgdm9pZCBDVEk6OmVtaXRTbG93U2NyaXB0Q2hlY2sodW5z
aWduZWQgbwogICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIHNraXBUaW1lb3V0ID0gbV9qaXQuZW1p
dFVubGlua2VkSm5lKCk7CiAgICAgZW1pdENhbGwob3Bjb2RlSW5kZXgsIE1hY2hpbmU6OmN0aV90
aW1lb3V0X2NoZWNrKTsKIAotICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19leGVjLCBYODY6
OmVjeCk7Ci0gICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKEV4ZWNTdGF0ZSwgbV9nbG9i
YWxEYXRhKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FS
R1NfZ2xvYmFsRGF0YSwgWDg2OjplY3gpOwogICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNF
VChKU0dsb2JhbERhdGEsIG1hY2hpbmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwogICAgIG1faml0
Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChNYWNoaW5lLCBtX3RpY2tzVW50aWxOZXh0VGltZW91dENo
ZWNrKSwgWDg2OjplY3gsIFg4Njo6ZXNpKTsKICAgICBtX2ppdC5saW5rKHNraXBUaW1lb3V0LCBt
X2ppdC5sYWJlbCgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3Jp
cHRDb3JlL1ZNL0NUSS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTMgQEAKICNkZWZp
bmUgQ1RJX0FSR1NfciAweDBGCiAjZGVmaW5lIENUSV9BUkdTX2V4Y2VwdGlvbiAweDEwCiAjZGVm
aW5lIENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlIDB4MTEKKyNkZWZpbmUgQ1RJX0FSR1NfZ2xv
YmFsRGF0YSAweDEyCiAjZGVmaW5lIEFSR19leGVjICgoRXhlY1N0YXRlKikoQVJHUylbQ1RJX0FS
R1NfZXhlY10pCiAjZGVmaW5lIEFSR19yZWdpc3RlckZpbGUgKChSZWdpc3RlckZpbGUqKShBUkdT
KVtDVElfQVJHU19yZWdpc3RlckZpbGVdKQogI2RlZmluZSBBUkdfciAoKFJlZ2lzdGVyKikoQVJH
UylbQ1RJX0FSR1Nfcl0pCiAjZGVmaW5lIEFSR19leGNlcHRpb24gKChKU1ZhbHVlKiopKEFSR1Mp
W0NUSV9BUkdTX2V4Y2VwdGlvbl0pCiAjZGVmaW5lIEFSR19wcm9maWxlclJlZmVyZW5jZSAoKFBy
b2ZpbGVyKiopKEFSR1MpW0NUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlXSkKKyNkZWZpbmUgQVJH
X2dsb2JhbERhdGEgKChKU0dsb2JhbERhdGEqKShBUkdTKVtDVElfQVJHU19nbG9iYWxEYXRhXSkK
IAogI2RlZmluZSBBUkdfc2V0UihuZXdSKSAoKih2b2xhdGlsZSBSZWdpc3RlcioqKSYoQVJHUylb
Q1RJX0FSR1Nfcl0gPSBuZXdSKQogI2RlZmluZSBBUkdfc2V0Mm5kUmVzdWx0KG5ldzJuZFJlc3Vs
dCkgKCoodm9sYXRpbGUgSlNWYWx1ZSoqKSYoQVJHUylbQ1RJX0FSR1NfMm5kUmVzdWx0XSA9IG5l
dzJuZFJlc3VsdCkKQEAgLTIzMiw3ICsyMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgZXh0ZXJuICJDIiB7Ci0gICAgICAgIEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUodm9pZCog
Y29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0
ZXIqIHIsIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiopOworICAgICAgICBKU1ZhbHVl
KiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZSosIFJl
Z2lzdGVyKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xv
YmFsRGF0YSopOwogICAgICAgICB2b2lkIGN0aVZNVGhyb3dUcmFtcG9saW5lKCk7CiAgICAgfTsK
IApAQCAtMzIxLDkgKzMyMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGN0aS5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRkcmVzcyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFsdWUqIGV4ZWN1dGUodm9pZCog
Y29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0
ZXIqIHIsIEpTVmFsdWUqKiBleGNlcHRpb24pCisgICAgICAgIGlubGluZSBzdGF0aWMgSlNWYWx1
ZSogZXhlY3V0ZSh2b2lkKiBjb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVn
aXN0ZXJGaWxlLCBSZWdpc3RlciogciwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVl
KiogZXhjZXB0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGN0
aVRyYW1wb2xpbmUoY29kZSwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24sIFByb2Zp
bGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSk7CisgICAgICAgICAgICBKU1ZhbHVlKiB2
YWx1ZSA9IGN0aVRyYW1wb2xpbmUoY29kZSwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRp
b24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSk7CiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgICAgICAgICBjdXJyZW50T3Bjb2RlSUQgPSBz
dGF0aWNfY2FzdDxPcGNvZGVJRD4oLTEpOwogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKIAorICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFsQ29kZSwg
RnVuY3Rpb25Db2RlIH07CisKICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1Ro
aXNPYmplY3RNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
OyB9CiAKICAgICBzdHJ1Y3QgSGFuZGxlckluZm8gewpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0v
TWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJ
KHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkwNCw3ICs5MDQsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFBy
b2dyYW1Ob2RlKiBwCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKICAg
ICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPmNvcHkoKTsKIAotICAgIEV4ZWNTdGF0ZSBu
ZXdFeGVjKGV4ZWMsIHIpOworICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKHIpOwogCiAgICAgUHJvZmls
ZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAg
ICBpZiAoKnByb2ZpbGVyKQpAQCAtOTE0LDcgKzkxNCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4
ZWN1dGUoUHJvZ3JhbU5vZGUqIHAKICNpZiBFTkFCTEUoQ1RJKQogICAgIGlmICghY29kZUJsb2Nr
LT5jdGlDb2RlKQogICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywgZXhlYywgY29kZUJsb2NrKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAm
bmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHJl
c3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdp
c3RlckZpbGUsIHIsICZuZXdFeGVjLmdsb2JhbERhdGEoKSwgZXhjZXB0aW9uKTsKICNlbHNlCiAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbmV3RXhlYywgJm1f
cmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOwogI2VuZGlmCkBAIC05NjYsNyArOTY2LDcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwogICAgIC8vIGEgMCBjb2Rl
QmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCiAgICAgaW5pdGlhbGl6ZUNhbGxGcmFt
ZShyLCBjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIG1ha2VIb3N0Q2FsbEZyYW1lUG9pbnRlcihl
eGVjLT5tX2NhbGxGcmFtZSksIDAsIGFyZ2MsIGZ1bmN0aW9uKTsKIAotICAgIEV4ZWNTdGF0ZSBu
ZXdFeGVjKGV4ZWMsIHIpOworICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKHIpOwogCiAgICAgUHJvZmls
ZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAg
ICBpZiAoKnByb2ZpbGVyKQpAQCAtOTc2LDcgKzk3Niw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4
ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICNpZiBFTkFCTEUoQ1RJKQogICAgIGlmICghY29kZUJsb2Nr
LT5jdGlDb2RlKQogICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywgZXhlYywgY29kZUJsb2NrKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAm
bmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHJl
c3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdp
c3RlckZpbGUsIHIsICZuZXdFeGVjLmdsb2JhbERhdGEoKSwgZXhjZXB0aW9uKTsKICNlbHNlCiAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbmV3RXhlYywgJm1f
cmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOwogI2VuZGlmCkBAIC0xMDUyLDcgKzEwNTIsNyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAgICAgaWYgKGNvZGVC
bG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hh
aW4tPmNvcHkoKTsKIAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMsIHIpOworICAgIEV4ZWNT
dGF0ZSBuZXdFeGVjKHIpOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjpl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQpAQCAtMTA2Miw3
ICsxMDYyLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbAogI2lm
IEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUpCiAgICAgICAgIENUSTo6
Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IENU
STo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUs
IHIsIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gQ1RJOjpleGVjdXRlKGNvZGVC
bG9jay0+Y3RpQ29kZSwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgJm5ld0V4ZWMuZ2xv
YmFsRGF0YSgpLCBleGNlcHRpb24pOwogI2Vsc2UKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2
YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIGV4Y2VwdGlv
bik7CiAjZW5kaWYKQEAgLTI4MTYsNyArMjgxNiw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGpzQXJyYXktPkpTQXJyYXk6OmdldChleGVjLCBpKTsKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHN0YXRpY19jYXN0PEpTU3RyaW5n
Kj4oYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihiYXNlVmFsdWUpLT5nZXRJbmRleChleGVjLCBpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGJhc2VWYWx1ZSkt
PmdldEluZGV4KCZleGVjLT5nbG9iYWxEYXRhKCksIGkpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICB9
IGVsc2UgewpAQCAtMzkxMiw2ICszOTEyLDE0IEBAIHZvaWQgTWFjaGluZTo6cmV0cmlldmVMYXN0
Q2FsbGVyKEV4ZWNTdGEKICAgICBmdW5jdGlvbiA9IGNhbGxlcjsKIH0KIAorY29uc3QgUmVnaXN0
ZXIqIE1hY2hpbmU6OmZpcnN0Q2FsbEZyYW1lKGNvbnN0IFJlZ2lzdGVyKiBjYWxsRnJhbWUpCit7
CisgICAgY29uc3QgUmVnaXN0ZXIqIGZpcnN0ID0gMDsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVy
KiBmcmFtZSA9IGNhbGxGcmFtZTsgZnJhbWU7IGZyYW1lID0gc3RyaXBIb3N0Q2FsbEZyYW1lQml0
KGZyYW1lW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXS5yKCkpKQorICAgICAgICBmaXJz
dCA9IGZyYW1lOworICAgIHJldHVybiBmaXJzdDsKK30KKwogUmVnaXN0ZXIqIE1hY2hpbmU6OmNh
bGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25z
dAogewogICAgIGZvciAoUmVnaXN0ZXIqIHIgPSBleGVjLT5tX2NhbGxGcmFtZTsgcjsgciA9IHN0
cmlwSG9zdENhbGxGcmFtZUJpdChyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXS5yKCkp
KQpAQCAtNDIwNSwxNCArNDIxMywxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYWRkKENU
SV9BUkdTKQogICAgIEpTVmFsdWUqIHYxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogdjIgPSBB
Ukdfc3JjMjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwogICAgIGRvdWJsZSBs
ZWZ0OwogICAgIGRvdWJsZSByaWdodCA9IDAuMDsKIAogICAgIGJvb2wgcmlnaHRJc051bWJlciA9
IGZhc3RJc051bWJlcih2MiwgcmlnaHQpOwogICAgIGlmIChyaWdodElzTnVtYmVyICYmIGZhc3RJ
c051bWJlcih2MSwgbGVmdCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBsZWZ0ICsg
cmlnaHQpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgKyBy
aWdodCk7CiAgICAgCisgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisKICAgICBib29s
IGxlZnRJc1N0cmluZyA9IHYxLT5pc1N0cmluZygpOwogICAgIGlmIChsZWZ0SXNTdHJpbmcgJiYg
djItPmlzU3RyaW5nKCkpIHsKICAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUgPSBj
b25jYXRlbmF0ZShzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHYxKS0+dmFsdWUoKS5yZXAoKSwgc3Rh
dGljX2Nhc3Q8SlNTdHJpbmcqPih2MiktPnZhbHVlKCkucmVwKCkpOwpAQCAtNDIyMiw3ICs0MjMx
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2FkZChDVElfQVJHUykKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgdmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKEFSR19nbG9iYWxE
YXRhLCB2YWx1ZS5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIGlmIChyaWdodElzTnVtYmVyICYg
bGVmdElzU3RyaW5nKSB7CkBAIC00MjM1LDcgKzQyNDQsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpj
dGlfb3BfYWRkKENUSV9BUkdTKQogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgdmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKEFSR19nbG9iYWxEYXRhLCB2YWx1ZS5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIC8vIEFs
bCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9uCkBAIC00MjU4LDEzICs0MjY3LDEyIEBA
IHZvaWQgTWFjaGluZTo6Y3RpX3RpbWVvdXRfY2hlY2soQ1RJX0FSR1MKIHsKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKIAotICAgIGlmIChleGVjLT5tYWNoaW5lKCktPmNoZWNrVGlt
ZW91dChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpKQorICAgIGlmIChBUkdfZ2xvYmFsRGF0
YS0+bWFjaGluZS0+Y2hlY2tUaW1lb3V0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpCiAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihleGVjKSk7CiAKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKLQog
aW50IE1hY2hpbmU6OmN0aV9vcF9sb29wX2lmX2xlc3MoQ1RJX0FSR1MpCiB7CiAgICAgSlNWYWx1
ZSogc3JjMSA9IEFSR19zcmMxOwpAQCAtNDMxNSw3ICs0MzIzLDcgQEAgdm9pZCBNYWNoaW5lOjpj
dGlfb3BfcHV0X2J5X2lkX3NlY29uZChDVAogICAgIGJhc2VWYWx1ZS0+cHV0KGV4ZWMsIGlkZW50
LCBBUkdfc3JjMywgc2xvdCk7CiAKICAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIGV4ZWMt
Pm1hY2hpbmUoKS0+dHJ5Q1RJQ2FjaGVQdXRCeUlEKGV4ZWMsIGNvZGVCbG9jayhyKSwgQ1RJX1JF
VFVSTl9BRERSRVNTLCBiYXNlVmFsdWUsIHNsb3QpOworICAgIEFSR19nbG9iYWxEYXRhLT5tYWNo
aW5lLT50cnlDVElDYWNoZVB1dEJ5SUQoZXhlYywgY29kZUJsb2NrKHIpLCBDVElfUkVUVVJOX0FE
RFJFU1MsIGJhc2VWYWx1ZSwgc2xvdCk7CiAKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5E
KCk7CiB9CkBAIC00MzcwLDcgKzQzNzgsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0
X2J5X2lkX3NlY29uCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywg
aWRlbnQsIHNsb3QpOwogCiAgICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBleGVjLT5tYWNo
aW5lKCktPnRyeUNUSUNhY2hlR2V0QnlJRChleGVjLCBjb2RlQmxvY2sociksIENUSV9SRVRVUk5f
QUREUkVTUywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7CisgICAgQVJHX2dsb2JhbERhdGEtPm1h
Y2hpbmUtPnRyeUNUSUNhY2hlR2V0QnlJRChleGVjLCBjb2RlQmxvY2sociksIENUSV9SRVRVUk5f
QUREUkVTUywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7CiAKICAgICBWTV9DSEVDS19FWENFUFRJ
T05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ0NjAsMTkgKzQ0NjgsMTggQEAg
SlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2RlbF9ieV9pZChDVElfQQogCiBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfbXVsKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19l
eGVjOwogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMyID0g
QVJHX3NyYzI7CiAKICAgICBkb3VibGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQ7CiAgICAgaWYg
KGZhc3RJc051bWJlcihzcmMxLCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbGVmdCAqIHJpZ2h0KTsKLSAgICBlbHNlIHsK
LSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3JjMS0+dG9OdW1iZXIo
ZXhlYykgKiBzcmMyLT50b051bWJlcihleGVjKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgICAgIHJldHVy
biBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAqIHJpZ2h0KTsKKworICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IEFSR19leGVjOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihleGVjKSAqIHNyYzItPnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25ld19mdW5jKENUSV9BUkdTKQpAQCAtNDUzNCw3
ICs0NTQxLDcgQEAgdm9pZCogTWFjaGluZTo6Y3RpX3ZtX2NvbXBpbGUoQ1RJX0FSR1MpCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CiAKICAgICBpZiAo
IWNvZGVCbG9jay0+Y3RpQ29kZSkKLSAgICAgICAgQ1RJOjpjb21waWxlKGV4ZWMtPm1hY2hpbmUo
KSwgZXhlYywgY29kZUJsb2NrKTsKKyAgICAgICAgQ1RJOjpjb21waWxlKEFSR19nbG9iYWxEYXRh
LT5tYWNoaW5lLCBleGVjLCBjb2RlQmxvY2spOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y3Rp
Q29kZTsKIH0KQEAgLTQ3NzksNyArNDc4Niw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9j
b25zdHJ1Y3RfTm90SlMKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfdmFsKENUSV9B
UkdTKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIE1hY2hpbmUqIG1h
Y2hpbmUgPSBleGVjLT5tYWNoaW5lKCk7CisgICAgTWFjaGluZSogbWFjaGluZSA9IEFSR19nbG9i
YWxEYXRhLT5tYWNoaW5lOwogCiAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAg
ICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gQVJHX3NyYzI7CkBAIC00Nzk2LDcgKzQ4MDMsNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X3ZhbChDVElfCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNBcnJheS0+SlNBcnJheTo6Z2V0KGV4ZWMsIGkp
OwogICAgICAgICB9IGVsc2UgaWYgKG1hY2hpbmUtPmlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAg
ICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihiYXNlVmFsdWUpLT5nZXRJbmRl
eChleGVjLCBpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4o
YmFzZVZhbHVlKS0+Z2V0SW5kZXgoQVJHX2dsb2JhbERhdGEsIGkpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChleGVjLCBpKTsKICAgICB9IGVsc2Ug
ewpAQCAtNDg2MSwxOSArNDg2OCwxOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bfc3ViKENU
SV9BUkdTKQogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodDsKICAgICBpZiAoZmFz
dElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAg
ICAgIHJldHVybiBqc051bWJlcihBUkdfZXhlYywgbGVmdCAtIHJpZ2h0KTsKLSAgICBlbHNlIHsK
LSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRvTnVtYmVyKGV4ZWMpIC0gc3JjMi0+dG9OdW1i
ZXIoZXhlYykpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsIGxlZnQgLSByaWdodCk7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsK
KyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9O
dW1iZXIoZXhlYykgLSBzcmMyLT50b051bWJlcihleGVjKSk7CisgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OX0FUX0VORCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3Rp
X29wX3B1dF9ieV92YWwoQ1RJX0FSR1MpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4
ZWM7Ci0gICAgTWFjaGluZSogbWFjaGluZSA9IGV4ZWMtPm1hY2hpbmUoKTsKKyAgICBNYWNoaW5l
KiBtYWNoaW5lID0gQVJHX2dsb2JhbERhdGEtPm1hY2hpbmU7CiAKICAgICBKU1ZhbHVlKiBiYXNl
VmFsdWUgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKQEAg
LTQ5MTAsNyArNDkxNiw3IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXko
Q1QKICAgICBpbnQgaSA9IEFSR19pbnQyOwogICAgIEpTVmFsdWUqIHZhbHVlID0gQVJHX3NyYzM7
CiAKLSAgICBBU1NFUlQoZXhlYy0+bWFjaGluZSgpLT5pc0pTQXJyYXkoYmFzZVZhbHVlKSk7Cisg
ICAgQVNTRVJUKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLT5pc0pTQXJyYXkoYmFzZVZhbHVlKSk7
CiAKICAgICBpZiAoTElLRUxZKGkgPj0gMCkpCiAgICAgICAgIHN0YXRpY19jYXN0PEpTQXJyYXkq
PihiYXNlVmFsdWUpLT5KU0FycmF5OjpwdXQoZXhlYywgaSwgdmFsdWUpOwpAQCAtNDk0OSwxNiAr
NDk1NSwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmVnYXRlKENUSV9BUkdTCiB7CiAg
ICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdf
ZXhlYzsKLQogICAgIGRvdWJsZSB2OwogICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjLCB2KSkKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIC12KTsKLSAgICBlbHNlIHsKLSAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgLXNyYy0+dG9OdW1iZXIoZXhlYykpOwotICAg
ICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQorICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIC12KTsKKwor
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCAtc3JjLT50b051bWJlcihleGVjKSk7CisgICAgVk1fQ0hF
Q0tfRVhDRVBUSU9OX0FUX0VORCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2Jhc2UoQ1RJX0FSR1MpCkBAIC01MDM0LDE5ICs1MDM4
LDE4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCgKIAogSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX2RpdihDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBBUkdfZXhlYzsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSog
c3JjMiA9IEFSR19zcmMyOwogCiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0Owog
ICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJp
Z2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxlZnQgLyByaWdodCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRv
TnVtYmVyKGV4ZWMpIC8gc3JjMi0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBWTV9DSEVDS19F
WENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAg
ICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgLyByaWdodCk7CisKKyAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJl
cihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoZXhlYykgLyBzcmMyLT50b051bWJlcihl
eGVjKSk7CisgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9wcmVfZGVjKENUSV9BUkdTKQpAQCAt
NTA1NCw3ICs1MDU3LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3ByZV9kZWMoQ1RJX0FS
RwogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFS
R19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHYtPnRvTnVtYmVy
KGV4ZWMpIC0gMSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERh
dGEsIHYtPnRvTnVtYmVyKGV4ZWMpIC0gMSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MTAwLDcgKzUxMDMsNyBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpjdGlfb3BfcG9zdF9pbmMoQ1RJX0FSCiAKICAgICBKU1ZhbHVlKiBudW1iZXIg
PSB2LT50b0pTTnVtYmVyKGV4ZWMpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTihKU1ZhbHVlKik7
Ci0gICAgQVJHX3NldDJuZFJlc3VsdChqc051bWJlcihleGVjLCBudW1iZXItPnVuY2hlY2tlZEdl
dE51bWJlcigpICsgMSkpOworICAgIEFSR19zZXQybmRSZXN1bHQoanNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKSk7CiAgICAgcmV0dXJuIG51
bWJlcjsKIH0KIApAQCAtNTEyMiwxOSArNTEyNSwxNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlf
b3BfbHNoaWZ0KENUSV9BUkdTCiAgICAgSlNWYWx1ZSogdmFsID0gQVJHX3NyYzE7CiAgICAgSlNW
YWx1ZSogc2hpZnQgPSBBUkdfc3JjMjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVj
OwotCiAgICAgaW50MzJfdCBsZWZ0OwogICAgIHVpbnQzMl90IHJpZ2h0OwogICAgIGlmIChKU0lt
bWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpCi0gICAgICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8
PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSk7Ci0gICAg
ZWxzZSBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJp
Z2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxlZnQgPDwgKHJpZ2h0ICYgMHgx
ZikpOwotICAgIGVsc2UgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVj
LCAodmFsLT50b0ludDMyKGV4ZWMpKSA8PCAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYgMHgxZikp
OwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQorICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIEpT
SW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWwpIDw8IChKU0ltbWVkaWF0ZTo6Z2V0VHJ1
bmNhdGVkVUludDMyKHNoaWZ0KSAmIDB4MWYpKTsKKyAgICBpZiAoZmFzdFRvSW50MzIodmFsLCBs
ZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKTsKKworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFS
R19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGV4ZWMpKSA8PCAoc2hpZnQtPnRvVUludDMyKGV4
ZWMpICYgMHgxZikpOworICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0YW5kKENUSV9BUkdT
KQpAQCAtNTE0MiwxNyArNTE0MywxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0YW5k
KENUSV9BUkdTCiAgICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNy
YzIgPSBBUkdfc3JjMjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotCiAgICAg
aW50MzJfdCBsZWZ0OwogICAgIGludDMyX3QgcmlnaHQ7CiAgICAgaWYgKGZhc3RUb0ludDMyKHNy
YzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIGxlZnQgJiByaWdodCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRvSW50MzIoZXhlYykgJiBzcmMyLT50b0lu
dDMyKGV4ZWMpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCBsZWZ0ICYgcmlnaHQpOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7
CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRv
SW50MzIoZXhlYykgJiBzcmMyLT50b0ludDMyKGV4ZWMpKTsKKyAgICBWTV9DSEVDS19FWENFUFRJ
T05fQVRfRU5EKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX3JzaGlmdChDVElfQVJHUykKQEAgLTUxNjAsMzIgKzUxNTksMjkgQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3JzaGlmdChDVElfQVJHUwogICAgIEpTVmFsdWUqIHZhbCA9IEFSR19z
cmMxOwogICAgIEpTVmFsdWUqIHNoaWZ0ID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBBUkdfZXhlYzsKLQogICAgIGludDMyX3QgbGVmdDsKICAgICB1aW50MzJfdCByaWdodDsK
ICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQp
KQogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJz
KHZhbCwgc2hpZnQpOwotICAgIGVsc2UgaWYgKGZhc3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFz
dFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBs
ZWZ0ID4+IChyaWdodCAmIDB4MWYpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNOdW1iZXIoZXhlYywgKHZhbC0+dG9JbnQzMihleGVjKSkgPj4gKHNoaWZ0LT50b1VJ
bnQzMihleGVjKSAmIDB4MWYpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoZmFzdFRvSW50MzIodmFs
LCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ID4+IChyaWdodCAmIDB4MWYpKTsKKworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVy
KEFSR19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMy
KGV4ZWMpICYgMHgxZikpOworICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0bm90KENUSV9B
UkdTKQogewogICAgIEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOwogCi0gICAgRXhlY1N0YXRlKiBl
eGVjID0gQVJHX2V4ZWM7Ci0KICAgICBpbnQgdmFsdWU7CiAgICAgaWYgKGZhc3RUb0ludDMyKHNy
YywgdmFsdWUpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgfnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+dmFsdWUpOwogICAgICAgICAgICAg
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgfnNyYy0+dG9JbnQzMihleGVj
KSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH5zcmMtPnRvSW50MzIoZXhlYykpOwogICAgIFZN
X0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTIz
OCw3ICs1MjM0LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX21vZChDVElfQVJHUykKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwogICAgIGRvdWJsZSBkID0gZGl2aWRlbmRW
YWx1ZS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhl
YywgZm1vZChkLCBkaXZpc29yVmFsdWUtPnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZtb2QoZCwgZGl2aXNvclZhbHVlLT50
b051bWJlcihleGVjKSkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtNTI3Myw3ICs1MjY5LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX3Bvc3RfZGVjKENUSV9BUgogICAgIEpTVmFsdWUqIG51bWJlciA9IHYtPnRvSlNOdW1i
ZXIoZXhlYyk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKEpTVmFsdWUqKTsKIAotICAgIEFSR19z
ZXQybmRSZXN1bHQoanNOdW1iZXIoZXhlYywgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAt
IDEpKTsKKyAgICBBUkdfc2V0Mm5kUmVzdWx0KGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBudW1i
ZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSkpOwogICAgIHJldHVybiBudW1iZXI7CiB9CiAK
QEAgLTUyODcsNyArNTI4Myw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF91cnNoaWZ0KENU
SV9BUkcKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwg
c2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNOZWdhdGl2ZSh2YWwpKQogICAgICAgICByZXR1cm4g
SlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOwogICAg
IGVsc2UgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCAodmFsLT50
b1VJbnQzMihleGVjKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKKyAgICAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2YWwtPnRvVUlu
dDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYgMHgxZikpOwogICAgICAgICBW
TV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQpAQCAtNTMwMCw3ICs1Mjk2LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2JpdHhvcihD
VElfQVJHUwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CiAKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihleGVjLCBzcmMxLT50b0ludDMyKGV4ZWMpIF4gc3JjMi0+dG9J
bnQzMihleGVjKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERh
dGEsIHNyYzEtPnRvSW50MzIoZXhlYykgXiBzcmMyLT50b0ludDMyKGV4ZWMpKTsKICAgICBWTV9D
SEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUzMTcs
NyArNTMxMyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9iaXRvcihDVElfQVJHUykKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNOdW1iZXIoZXhlYywgc3JjMS0+dG9JbnQzMihleGVjKSB8IHNyYzItPnRvSW50MzIoZXhlYykp
OworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50
b0ludDMyKGV4ZWMpIHwgc3JjMi0+dG9JbnQzMihleGVjKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MzMwLDcgKzUzMjYsNyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKENUSV9BCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CiAgICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4gPSBNYWNoaW5lOjpzY29wZUNoYWluKHIpOwogCi0gICAgTWFjaGluZSogbWFj
aGluZSA9IGV4ZWMtPm1hY2hpbmUoKTsKKyAgICBNYWNoaW5lKiBtYWNoaW5lID0gQVJHX2dsb2Jh
bERhdGEtPm1hY2hpbmU7CiAgICAgCiAgICAgSlNWYWx1ZSogZnVuY1ZhbCA9IEFSR19zcmMxOwog
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IEFSR19pbnQyOwpAQCAtNTM1OCw3ICs1MzU0LDcgQEAg
dm9pZCogTWFjaGluZTo6Y3RpX29wX3Rocm93KENUSV9BUkdTKQogICAgIHVuc2lnbmVkIHZQQ0lu
ZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FE
RFJFU1MpOwogCiAgICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBBUkdfc3JjMTsKLSAgICBJ
bnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IEFSR19leGVjLT5tYWNoaW5lKCktPnRocm93RXhjZXB0
aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgdlBDSW5kZXgsIHIsIHRydWUpOworICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBDID0gQVJH
X2dsb2JhbERhdGEtPm1hY2hpbmUtPnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVl
LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIHIsIHRydWUpOwog
CiAgICAgaWYgKGhhbmRsZXJWUEMpIHsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2Vw
dGlvblZhbHVlKTsKQEAgLTU0MzAsNyArNTQyNiw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9pc19udW1iZXIoQ1RJX0EKIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX3N0cmluZyhD
VElfQVJHUykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKEFSR19leGVjLT5tYWNoaW5lKCktPmlz
SlNTdHJpbmcoQVJHX3NyYzEpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKEFSR19nbG9iYWxEYXRh
LT5tYWNoaW5lLT5pc0pTU3RyaW5nKEFSR19zcmMxKSk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9pc19vYmplY3QoQ1RJX0FSR1MpCkBAIC01NjQ4LDcgKzU2NDQsNyBAQCB2b2lkIE1h
Y2hpbmU6OmN0aV9vcF9kZWJ1ZyhDVElfQVJHUykKICAgICBpbnQgZmlyc3RMaW5lID0gQVJHX2lu
dDI7CiAgICAgaW50IGxhc3RMaW5lID0gQVJHX2ludDM7CiAKLSAgICBleGVjLT5tYWNoaW5lKCkt
PmRlYnVnKGV4ZWMsIHIsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZp
cnN0TGluZSwgbGFzdExpbmUpOworICAgIEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLT5kZWJ1Zyhl
eGVjLCByLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUs
IGxhc3RMaW5lKTsKIH0KIAogdm9pZCogTWFjaGluZTo6Y3RpX3ZtX3Rocm93KENUSV9BUkdTKQpA
QCAtNTY2NCw3ICs1NjYwLDcgQEAgdm9pZCogTWFjaGluZTo6Y3RpX3ZtX3Rocm93KENUSV9BUkdT
KQogCiAgICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKIAot
ICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBDID0gQVJHX2V4ZWMtPm1hY2hpbmUoKS0+dGhyb3dF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJl
Z2luKCkgKyB2UENJbmRleCwgciwgZmFsc2UpOworICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBD
ID0gQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
blZhbHVlLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIHIsIGZh
bHNlKTsKIAogICAgIGlmIChoYW5kbGVyVlBDKSB7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihleGNlcHRpb25WYWx1ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNzIzOCkK
KysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYg
KzEwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUNhbGxl
cihFeGVjU3RhdGUqLCBJbnRlcm5hbEZ1bmN0aW9uKikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmV0
cmlldmVMYXN0Q2FsbGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJf
dCYgc291cmNlSUQsIFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25z
dDsKICAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlciogZmlyc3RDYWxsRnJh
bWUoY29uc3QgUmVnaXN0ZXIqIGNhbGxGcmFtZSk7CiAgICAgICAgIHN0YXRpYyBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbihjb25zdCBSZWdpc3RlciogcikgeyByZXR1cm4gcltSZWdpc3RlckZp
bGU6OlNjb3BlQ2hhaW5dLnNjb3BlQ2hhaW4oKTsgfQogICAgICAgICBzdGF0aWMgQ29kZUJsb2Nr
KiBjb2RlQmxvY2soY29uc3QgUmVnaXN0ZXIqIHIpIHsgcmV0dXJuIHJbUmVnaXN0ZXJGaWxlOjpD
b2RlQmxvY2tdLmNvZGVCbG9jaygpOyB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9BcnJh
eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChBcnJheUNvbnN0cnVjdG9yKTsK
IAogQXJyYXlDb25zdHJ1Y3Rvcjo6QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgQXJyYXlQcm90b3R5cGUqIGFycmF5UHJv
dG90eXBlKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZp
ZXIoZXhlYywgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQorICAgIDog
SW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZp
ZXIoZXhlYywgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQogewogICAg
IC8vIEVDTUEgMTUuNC4zLjEgQXJyYXkucHJvdG90eXBlCiAgICAgcHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG90eXBlLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVh
bkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQm9vbGVhbkNvbnN0cnVjdG9yKTsK
IAogQm9vbGVhbkNvbnN0cnVjdG9yOjpCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEJvb2xlYW5Qcm90b3R5cGUqIGJv
b2xlYW5Qcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIHN0cnVjdHVyZSwg
SWRlbnRpZmllcihleGVjLCBib29sZWFuUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1l
KSkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
LCBJZGVudGlmaWVyKGV4ZWMsIGJvb2xlYW5Qcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05h
bWUpKQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBi
b29sZWFuUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzIzOCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBkYXRlTm93KEV4ZWNTdGF0ZSosIEpT
T2IKIHN0YXRpYyBKU1ZhbHVlKiBkYXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAogRGF0ZUNvbnN0cnVjdG9yOjpEYXRlQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZUlEKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgRGF0ZVByb3RvdHlwZSogZGF0ZVBy
b3RvdHlwZSkKLSAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgc3RydWN0dXJlLCBJZGVudGlm
aWVyKGV4ZWMsIGRhdGVQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQorICAgIDog
SW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZp
ZXIoZXhlYywgZGF0ZVByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7CiAgICAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvdHlw
ZSwgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvRGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIEpTVmFsdWUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb24KICAgICBpZiAo
IW1fY29kZUJsb2NrKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVj
KG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCksIG1fcmVnaXN0ZXJzKTsKKyAgICBFeGVjU3Rh
dGUgbmV3RXhlYyhtX3JlZ2lzdGVycyk7CiAKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5n
IGVyck1zZzsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FcnJvckNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Vycm9yQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvckNvbnN0cnVjdG9yKTsKIAogRXJyb3JDb25zdHJ1Y3Rv
cjo6RXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJl
SUQ+IHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlKQotICAgIDogSW50
ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgZXJyb3JQcm90
b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgZXJyb3JQcm90
b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQogewogICAgIC8vIEVDTUEgMTUuMTEuMy4x
IEVycm9yLnByb3RvdHlwZQogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCBlcnJvclByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzEg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkV4ZWNTdGF0ZS5oIgotCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRl
ICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIlNjb3BlQ2hhaW5NYXJrLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1FeGVjU3RhdGU6OkV4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWdpc3RlciogY2FsbEZyYW1lKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
KQotICAgICwgbV9leGNlcHRpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSkKLSAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLXsKLX0KLQotRXhl
Y1N0YXRlOjpFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogY2FsbEZyYW1lKQot
ICAgIDogbV9nbG9iYWxPYmplY3QoZXhlYy0+bV9nbG9iYWxPYmplY3QpCi0gICAgLCBtX2V4Y2Vw
dGlvbigwKQotICAgICwgbV9nbG9iYWxEYXRhKGV4ZWMtPm1fZ2xvYmFsRGF0YSkKLSAgICAsIG1f
Y2FsbEZyYW1lKGNhbGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoIWV4ZWMtPm1fZXhjZXB0aW9uKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisvKiBkZWxldGUgbWUgKi8KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
RXhlY1N0YXRlLmgJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsMzAgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICBmcmllbmQgY2xhc3MgTWFjaGluZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIERl
YnVnZ2VyQ2FsbEZyYW1lOwogICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY1N0YXRlKEpTR2xvYmFs
T2JqZWN0KiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSk7CisgICAgICAgIGV4cGxpY2l0IEV4ZWNTdGF0
ZShSZWdpc3RlciogY2FsbEZyYW1lKQorICAgICAgICAgICAgOiBtX2V4Y2VwdGlvbigwKQorICAg
ICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgfQog
CiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsT2JqZWN0OyB9Ci0gICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCogZHlu
YW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBN
YWNoaW5lOjpzY29wZUNoYWluKE1hY2hpbmU6OmZpcnN0Q2FsbEZyYW1lKG1fY2FsbEZyYW1lKSkt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICB9CisKICAgICAgICAgLy8gR2xvYmFsIG9iamVjdCBp
biB3aGljaCB0aGUgY3VycmVudCBzY3JpcHQgd2FzIGRlZmluZWQuIChDYW4gZGlmZmVyCiAgICAg
ICAgIC8vIGZyb20gZHluYW1pY0dsb2JhbE9iamVjdCgpIGR1cmluZyBmdW5jdGlvbiBjYWxscyBh
Y3Jvc3MgZnJhbWVzLikKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gTWFjaGluZTo6c2NvcGVD
aGFpbihtX2NhbGxGcmFtZSktPmdsb2JhbE9iamVjdCgpOwogICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gTWFjaGlu
ZTo6c2NvcGVDaGFpbihtX2NhbGxGcmFtZSktPmdsb2JhbFRoaXNPYmplY3QoKTsgfQotICAgICAg
ICAgICAgICAgIAorCisgICAgICAgIEpTT2JqZWN0KiBnbG9iYWxUaGlzVmFsdWUoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTWFjaGluZTo6c2NvcGVDaGFpbihtX2NhbGxG
cmFtZSktPmdsb2JhbFRoaXNPYmplY3QoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEV4Y2Vw
dGlvbiBwcm9wb2dhdGlvbi4KICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNWYWx1ZSogZXhj
ZXB0aW9uKSB7IG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9CiAgICAgICAgIHZvaWQgY2xlYXJF
eGNlcHRpb24oKSB7IG1fZXhjZXB0aW9uID0gMDsgfQpAQCAtNjYsNDUgKzc2LDQwIEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgdm9pZCogY3RpUmV0dXJuQWRkcmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1fY3RpUmV0dXJuQWRkcmVzczsgfQogI2VuZGlmCiAKLSAgICAgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Kk1hY2hpbmU6OnNjb3BlQ2hhaW4obV9jYWxsRnJhbWUpLT5nbG9iYWxEYXRhOworICAgICAgICB9
CiAKLSAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUoKSB7IHJldHVybiBt
X2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZTsgfQotICAgICAgICBjb25zdCBDb21tb25JZGVu
dGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXM7IH0KLSAgICAgICAgY29uc3QgQXJnTGlzdCYgZW1wdHlMaXN0KCkgY29uc3Qg
eyByZXR1cm4gKm1fZ2xvYmFsRGF0YS0+ZW1wdHlMaXN0OyB9Ci0gICAgICAgIExleGVyKiBsZXhl
cigpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+bGV4ZXI7IH0KLSAgICAgICAgUGFyc2VyKiBwYXJz
ZXIoKSB7IHJldHVybiBtX2dsb2JhbERhdGEtPnBhcnNlcjsgfQotICAgICAgICBNYWNoaW5lKiBt
YWNoaW5lKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhLT5tYWNoaW5lOyB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5VGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJl
dHVybiBleGVjLT5tX2dsb2JhbERhdGEtPmFycmF5VGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+
bV9nbG9iYWxEYXRhLT5kYXRlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSogbWF0aFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRh
LT5tYXRoVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyVGFi
bGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5tX2dsb2JhbERhdGEtPm51bWJlclRh
YmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlKEV4ZWNT
dGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5yZWdFeHBUYWJsZTsgfQot
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlKEV4
ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5yZWdFeHBDb25zdHJ1
Y3RvclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ1RhYmxl
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5zdHJpbmdUYWJs
ZTsgfQorICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZSgpIHsgcmV0dXJu
IGdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGU7IH0KKyAgICAgICAgY29uc3QgQ29tbW9uSWRl
bnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnBy
b3BlcnR5TmFtZXM7IH0KKyAgICAgICAgY29uc3QgQXJnTGlzdCYgZW1wdHlMaXN0KCkgY29uc3Qg
eyByZXR1cm4gKmdsb2JhbERhdGEoKS5lbXB0eUxpc3Q7IH0KKyAgICAgICAgTGV4ZXIqIGxleGVy
KCkgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmxleGVyOyB9CisgICAgICAgIFBhcnNlciogcGFyc2Vy
KCkgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLnBhcnNlcjsgfQorICAgICAgICBNYWNoaW5lKiBtYWNo
aW5lKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLm1hY2hpbmU7IH0KKyAgICAgICAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJu
IGV4ZWMtPmdsb2JhbERhdGEoKS5hcnJheVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUqIGRhdGVUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2Jh
bERhdGEoKS5kYXRlVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbWF0
aFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm1hdGhU
YWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJUYWJsZShFeGVj
U3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1iZXJUYWJsZTsgfQor
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJsZShFeGVjU3RhdGUqIGV4
ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBUYWJsZTsgfQorICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENvbnN0cnVjdG9yVGFibGU7
IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogc3RyaW5nVGFibGUoRXhlY1N0YXRl
KiBleGVjKSB7IHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5nVGFibGU7IH0KIAotICAg
ICAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gJm1fZ2xvYmFsRGF0YS0+aGVhcDsgfQor
ICAgICAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gJmdsb2JhbERhdGEoKS5oZWFwOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yIHJlcXVpcmVk
IGZvciBnY2MgMy4KICAgICAgICAgRXhlY1N0YXRlKCkgeyB9CiAKLSAgICAgICAgRXhlY1N0YXRl
KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiBjYWxsRnJhbWUpOwotCiAgICAgICAgIGJvb2wgaXNHbG9i
YWxPYmplY3QoSlNPYmplY3QqKSBjb25zdDsKIAotICAgICAgICBKU0dsb2JhbE9iamVjdCogbV9n
bG9iYWxPYmplY3Q7Ci0KICAgICAgICAgSlNWYWx1ZSogbV9leGNlcHRpb247CiAjaWYgRU5BQkxF
KENUSSkKICAgICAgICAgdm9pZCogbV9jdGlSZXR1cm5BZGRyZXNzOwogI2VuZGlmCi0gICAgICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotCiAgICAgICAgIFJlZ2lzdGVyKiBtX2NhbGxG
cmFtZTsgLy8gVGhlIG1vc3QgcmVjZW50IGNhbGwgZnJhbWUuCiAgICAgfTsKIAotICAgIGVudW0g
Q29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFsQ29kZSwgRnVuY3Rpb25Db2RlIH07Ci0KIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRXhlY1N0YXRlX2gKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VM
TChGdW5jdGlvbkNvbnN0cnVjdG9yKTsKIAogRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6RnVuY3Rpb25D
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVj
dHVyZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQotICAgIDogSW50ZXJu
YWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb25Qcm90
b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb25Q
cm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQogewogICAgIHB1dERpcmVjdChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBmdW5jdGlvblByb3RvdHlwZSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogCkBAIC0xMjcsNyArMTI3LDggQEAgSlNPYmplY3Qq
IGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZQogICAgIHNpemVfdCBjb3VudCA9IHBhcmFt
ZXRlcnMuc2l6ZSgpOwogICAgIGZ1bmN0aW9uQm9keS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIHBh
cmFtZXRlcnMucmVsZWFzZUJ1ZmZlcigpLCBjb3VudCk7CiAKLSAgICBTY29wZUNoYWluIHNjb3Bl
Q2hhaW4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKKyAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwogICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9u
TmFtZSwgZnVuY3Rpb25Cb2R5LmdldCgpLCBzY29wZUNoYWluLm5vZGUoKSk7CiAKICAgICBKU09i
amVjdCogcHJvdG90eXBlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShF
CiBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAogRnVuY3Rpb25Qcm90b3R5cGU6OkZ1
bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IEludGVybmFsRnVuY3Rpb24o
ZXhlYykKKyAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSkKIHsKICAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywg
MCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
NiArMzcsMTYgQEAgY29uc3QgQ2xhc3NJbmZvKiBJbnRlcm5hbEZ1bmN0aW9uOjpjbGFzcwogICAg
IHJldHVybiAmaW5mbzsKIH0KIAotSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBKU09iamVjdChleGVjLT5nbG9iYWxEYXRhKCkubnVsbFBy
b3RvU3RydWN0dXJlSUQpCitJbnRlcm5hbEZ1bmN0aW9uOjpJbnRlcm5hbEZ1bmN0aW9uKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEtPm51bGxQcm90
b1N0cnVjdHVyZUlEKQogewotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFt
ZSwganNTdHJpbmcoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bGxJZGVudGlmaWVyLnVz
dHJpbmcoKSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3QoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIudXN0cmluZygpKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1JbnRlcm5hbEZ1bmN0aW9uOjpJ
bnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4g
c3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQorSW50ZXJuYWxGdW5jdGlvbjo6SW50
ZXJuYWxGdW5jdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RydWN0
dXJlSUQ+IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKICAgICA6IEpTT2JqZWN0
KHN0cnVjdHVyZSkKIHsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUs
IGpzU3RyaW5nKGV4ZWMsIG5hbWUudXN0cmluZygpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc1N0cmluZyhnbG9iYWxEYXRhLCBuYW1lLnVzdHJpbmcoKSksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKIH0KIAogY29uc3QgVVN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6
bmFtZShFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSW50ZXJuYWxG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0
aW9uLmgJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0ludGVybmFsRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbihQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpIDogSlNPYmplY3Qoc3RydWN0dXJlKSB7IH0KLSAgICAgICAg
SW50ZXJuYWxGdW5jdGlvbihFeGVjU3RhdGUqKTsKLSAgICAgICAgSW50ZXJuYWxGdW5jdGlvbihF
eGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgY29uc3QgSWRlbnRpZmllciYpOwor
ICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKEpTR2xvYmFsRGF0YSopOworICAgICAgICBJbnRlcm5h
bEZ1bmN0aW9uKEpTR2xvYmFsRGF0YSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBjb25zdCBJ
ZGVudGlmaWVyJik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdl
dENhbGxEYXRhKENhbGxEYXRhJikgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0NlbGwuaAkocmV2aXNpb24g
MzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDYgKzc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gR2FyYmFnZSBjb2xs
ZWN0aW9uLgogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBFeGVjU3RhdGUqKTsK
KyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7CiAgICAg
ICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0
aW9uKSB7IHJldHVybiBwbGFjZW1lbnROZXdEZXN0aW5hdGlvbjsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgbWFyaygpOwogICAgICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwpAQCAtMTU1LDYgKzE1
NiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTQ2VsbCo+KHRoaXMpOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkKiBKU0NlbGw6Om9wZXJh
dG9yIG5ldyhzaXplX3Qgc2l6ZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIHsKKyNp
ZmRlZiBKQVZBU0NSSVBUQ09SRV9CVUlMRElOR19BTExfSU5fT05FX0ZJTEUKKyAgICAgICAgcmV0
dXJuIGdsb2JhbERhdGEtPmhlYXAuaW5saW5lQWxsb2NhdGUoc2l6ZSk7CisjZWxzZQorICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKTsKKyNlbmRpZgorICAgIH0K
IAogICAgIC8vIC0tLSBKU1ZhbHVlIGlubGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNzIzOCkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTRnVuY3Rpb24pOwogY29uc3Qg
Q2xhc3NJbmZvIEpTRnVuY3Rpb246OmluZm8gPSB7ICJGdW5jdGlvbiIsIDAsIDAsIDAgfTsKIAog
SlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSkKLSAgICA6IEJhc2UoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblN0cnVjdHVyZSgpLCBuYW1lKQorICAgIDogQmFzZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIG5hbWUpCiAg
ICAgLCBtX2JvZHkoYm9keSkKICAgICAsIG1fc2NvcGVDaGFpbihzY29wZUNoYWluTm9kZSkKIHsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzcyMzgp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsMTEgKzEyMiwxNCBAQCBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkK
ICAgICBkZWxldGUgZCgpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KCkKK3ZvaWQg
SlNHbG9iYWxPYmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXNWYWx1ZSkKIHsKICAgICBBU1NFUlQo
SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAogICAgIGQoKS0+Z2xvYmFs
RGF0YSA9IEhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKTsKKyAgICBkKCktPmdsb2JhbFNj
b3BlQ2hhaW4gPSBTY29wZUNoYWluKHRoaXMsIGQoKS0+Z2xvYmFsRGF0YS5nZXQoKSwgdGhpc1Zh
bHVlKTsKKworICAgIE1hY2hpbmU6OmluaXRpYWxpemVDYWxsRnJhbWUoZCgpLT5nbG9iYWxDYWxs
RnJhbWUgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIDAsIDAsIGQoKS0+Z2xv
YmFsU2NvcGVDaGFpbi5ub2RlKCksIG1ha2VIb3N0Q2FsbEZyYW1lUG9pbnRlcigwKSwgMCwgMCwg
MCk7CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3QqJiBoZWFkT2JqZWN0ID0gaGVhZCgpKSB7CiAg
ICAgICAgIGQoKS0+cHJldiA9IGhlYWRPYmplY3Q7CkBAIC0xMzksNyArMTQyLDcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6aW5pdCgpCiAgICAgZCgpLT5yZWN1cnNpb24gPSAwOwogICAgIGQoKS0+
ZGVidWdnZXIgPSAwOwogCi0gICAgZCgpLT5nbG9iYWxFeGVjLnNldChuZXcgRXhlY1N0YXRlKHRo
aXMsIGQoKS0+Z2xvYmFsQ2FsbEZyYW1lICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplKSk7CisgICAgZCgpLT5nbG9iYWxFeGVjLnNldChuZXcgRXhlY1N0YXRlKGQoKS0+Z2xvYmFs
Q2FsbEZyYW1lICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSk7CiAKICAgICBk
KCktPnByb2ZpbGVHcm91cCA9IDA7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVj
dC5oCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHVzaW5nIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhOwogCiAg
ICAgICAgIHN0cnVjdCBKU0dsb2JhbE9iamVjdERhdGEgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVj
dERhdGEgewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3REYXRhKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0aGlzVmFsdWUpCisgICAgICAgICAgICBKU0dsb2JhbE9i
amVjdERhdGEoKQogICAgICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERhdGEoJnN5bWJv
bFRhYmxlLCAwKQogICAgICAgICAgICAgICAgICwgcmVnaXN0ZXJBcnJheVNpemUoMCkKLSAgICAg
ICAgICAgICAgICAsIGdsb2JhbFNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpCisg
ICAgICAgICAgICAgICAgLCBnbG9iYWxTY29wZUNoYWluKE5vU2NvcGVDaGFpbigpKQogICAgICAg
ICAgICAgICAgICwgcmVnRXhwQ29uc3RydWN0b3IoMCkKICAgICAgICAgICAgICAgICAsIGVycm9y
Q29uc3RydWN0b3IoMCkKICAgICAgICAgICAgICAgICAsIGV2YWxFcnJvckNvbnN0cnVjdG9yKDAp
CkBAIC03Niw3ICs3Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgICwgZGF0
ZVByb3RvdHlwZSgwKQogICAgICAgICAgICAgICAgICwgcmVnRXhwUHJvdG90eXBlKDApCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGluZTo6aW5pdGlhbGl6ZUNhbGxGcmFtZShn
bG9iYWxDYWxsRnJhbWUgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIDAsIDAs
IGdsb2JhbFNjb3BlQ2hhaW4ubm9kZSgpLCBtYWtlSG9zdENhbGxGcmFtZVBvaW50ZXIoMCksIDAs
IDAsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB2aXJ0dWFs
IH5KU0dsb2JhbE9iamVjdERhdGEoKQpAQCAtMTQzLDE3ICsxNDIsMTcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBKU0ds
b2JhbERhdGEqKTsKIAotICAgICAgICBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCi0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YS0+bnVsbFBy
b3RvU3RydWN0dXJlSUQsIG5ldyBKU0dsb2JhbE9iamVjdERhdGEodGhpcywgdGhpcykpCisgICAg
ICAgIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAg
ICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLT5udWxsUHJvdG9TdHJ1Y3R1
cmVJRCwgbmV3IEpTR2xvYmFsT2JqZWN0RGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgaW5p
dCgpOworICAgICAgICAgICAgaW5pdCh0aGlzKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBKU0dsb2JhbE9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1
cmUsIEpTR2xvYmFsT2JqZWN0RGF0YSogZGF0YSkKKyAgICAgICAgSlNHbG9iYWxPYmplY3QoUGFz
c1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdERhdGEqIGRhdGEs
IEpTT2JqZWN0KiB0aGlzVmFsdWUpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3Qoc3Ry
dWN0dXJlLCBkYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbml0KCk7CisgICAgICAgICAg
ICBpbml0KHRoaXNWYWx1ZSk7CiAgICAgICAgIH0KIAogICAgIHB1YmxpYzoKQEAgLTI2Nyw3ICsy
NjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1F
OiBGb2xkIHJlc2V0IGludG8gaW5pdC4KLSAgICAgICAgdm9pZCBpbml0KCk7CisgICAgICAgIHZv
aWQgaW5pdChKU09iamVjdCogdGhpc1ZhbHVlKTsKICAgICAgICAgdm9pZCByZXNldChKU1ZhbHVl
KiBwcm90b3R5cGUpOwogCiAgICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJzKFJlZ2lzdGVyKiByZWdp
c3RlcnMsIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5LCBzaXplX3QgY291bnQpOwpAQCAtMzMyLDcg
KzMzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5udW1iZXJQcm90b3R5cGUoKTsKICAgICB9CiAKLQogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBKU0dsb2JhbE9iamVjdF9oCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNOdW1iZXJDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
SlNOdW1iZXJDZWxsLmNwcAkocmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
SlNOdW1iZXJDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDQgKzExMSwxNCBAQCBORVZF
Ul9JTkxJTkUgSlNWYWx1ZSoganNOYU4oRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNOdW1iZXJDZWxsKGV4ZWMsIE5hTik7CiB9CiAKK05FVkVSX0lOTElORSBKU1ZhbHVlKiBq
c051bWJlckNlbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgZCkKK3sKKyAgICBy
ZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU051bWJlckNlbGwoZ2xvYmFsRGF0YSwgZCk7Cit9CisK
K05FVkVSX0lOTElORSBKU1ZhbHVlKiBqc05hTihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7
CisgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIE5h
Tik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pT
TnVtYmVyQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU051bWJlckNl
bGwuaAkocmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNOdW1iZXJDZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBKU051bWJlckNlbGwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNs
YXNzIENUSTsKKyAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERh
dGEqLCBkb3VibGUpOworICAgICAgICBmcmllbmQgSlNWYWx1ZSoganNOYU4oSlNHbG9iYWxEYXRh
Kik7CiAgICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc051bWJlckNlbGwoRXhlY1N0YXRlKiwgZG91
YmxlKTsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTmFOKEV4ZWNTdGF0ZSopOwogICAgIHB1
YmxpYzoKQEAgLTcxLDkgKzczLDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNlbmRpZgogICAg
ICAgICB9CiAKKyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAjaWZkZWYgSkFWQVNDUklQVENPUkVf
QlVJTERJTkdfQUxMX0lOX09ORV9GSUxFCisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aGVhcC5pbmxpbmVBbGxvY2F0ZU51bWJlcihzaXplKTsKKyAgICAjZWxzZQorICAgICAgICAgICAg
cmV0dXJuIGdsb2JhbERhdGEtPmhlYXAuYWxsb2NhdGVOdW1iZXIoc2l6ZSk7CisgICAgI2VuZGlm
CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3Jl
YXRlU3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVh
dGUocHJvdG8sIFR5cGVJbmZvKE51bWJlclR5cGUpKTsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAg
ICAgSlNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIHZhbHVlKQor
ICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlSUQuZ2V0KCkp
CisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAg
ICAgICAgIEpTTnVtYmVyQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKICAgICAg
ICAgICAgIDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKS5udW1iZXJTdHJ1Y3R1cmVJRC5nZXQo
KSkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAgLTk5LDYgKzExNiwxOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIGQp
OwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhlY1N0YXRl
KiBleGVjLCBzaG9ydCBpKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRl
Ojpmcm9tKGkpOworICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgaSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHNob3J0IGkpCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJ
bW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChl
eGVjLCBpKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IGkpCiAgICAgewogICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1l
ZGlhdGU6OmZyb20oaSk7CkBAIC0xMzUsNiArMTY0LDYwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgc3RhdGljX2Nhc3Q8ZG91Ymxl
PihpKSk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSog
diA9IEpTSW1tZWRpYXRlOjpmcm9tKGQpOworICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJl
ckNlbGwoZ2xvYmFsRGF0YSwgZCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
KiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHNob3J0IGkpCisgICAgeworICAg
ICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2
ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgc2hvcnQgaSkKKyAgICB7CisgICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJv
bShpKTsKKyAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBpbnQgaSkKKyAgICB7CisgICAgICAgIEpTVmFsdWUqIHYgPSBKU0lt
bWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGds
b2JhbERhdGEsIGkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1i
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAg
SlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICByZXR1cm4gdiA/IHYg
OiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGxvbmcgaSkKKyAg
ICB7CisgICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAg
cmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBsb25nIGkpCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlh
dGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxE
YXRhLCBpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgbG9uZyBsb25nIGkpCisgICAgeworICAgICAgICBKU1Zh
bHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2ID8gdiA6IGpz
TnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGkpCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2ID0g
SlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2Vs
bChnbG9iYWxEYXRhLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICB9CisKICAgICAvLyAt
LS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIGlu
bGluZSBkb3VibGUgSlNWYWx1ZTo6dW5jaGVja2VkR2V0TnVtYmVyKCkgY29uc3QKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNDUgKzEwOSw0NSBAQCBib29s
IEpTU3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0CiAgICAgcmV0dXJuIEpTU3RyaW5n
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90KTsKIH0KIAotSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVVN0cmluZyYgcykKK0pTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IFVTdHJpbmcmIHMpCiB7CiAgICAgaW50IHNpemUgPSBzLnNpemUoKTsKICAg
ICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuc21hbGxTdHJp
bmdzLmVtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxT
dHJpbmdzLmVtcHR5U3RyaW5nKGdsb2JhbERhdGEpOwogICAgIGlmIChzaXplID09IDEpIHsKICAg
ICAgICAgVUNoYXIgYyA9IHMuZGF0YSgpWzBdOwogICAgICAgICBpZiAoYyA8PSAweEZGKQotICAg
ICAgICAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGV4ZWMsIGMpOworICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAgICAgfQot
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTU3RyaW5nKGV4ZWMsIHMpOworICAgIHJldHVybiBuZXcg
KGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHMpOwogfQogICAgIAotSlNTdHJpbmcq
IGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcywgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitKU1N0cmluZyoganNTdWJzdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzLnNpemUoKSkpOwogICAgIEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHMuc2l6ZSgpKSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocy5zaXplKCkpKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGV4
ZWMtPmdsb2JhbERhdGEoKS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoZXhlYyk7CisgICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoZ2xvYmFsRGF0YSk7
CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmRhdGEoKVtvZmZz
ZXRdOwogICAgICAgICBpZiAoYyA8PSAweEZGKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmds
b2JhbERhdGEoKS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGMpOwor
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAgICAgfQotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpT
U3RyaW5nKGV4ZWMsIFVTdHJpbmc6OlJlcDo6Y3JlYXRlKHMucmVwKCksIG9mZnNldCwgbGVuZ3Ro
KSk7CisgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0
cmluZzo6UmVwOjpjcmVhdGUocy5yZXAoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKIH0KIAotSlNTdHJp
bmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKQorSlNT
dHJpbmcqIGpzT3duZWRTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3Ry
aW5nJiBzKQogewogICAgIGludCBzaXplID0gcy5zaXplKCk7CiAgICAgaWYgKCFzaXplKQotICAg
ICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZyhl
eGVjKTsKKyAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmlu
ZyhnbG9iYWxEYXRhKTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBz
LmRhdGEoKVswXTsKICAgICAgICAgaWYgKGMgPD0gMHhGRikKLSAgICAgICAgICAgIHJldHVybiBl
eGVjLT5nbG9iYWxEYXRhKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhleGVj
LCBjKTsKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgIH0KLSAgICByZXR1cm4gbmV3IChl
eGVjKSBKU1N0cmluZyhleGVjLCBzLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CisgICAgcmV0
dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcywgSlNTdHJpbmc6Okhh
c090aGVyT3duZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU1N0
cmluZy5oCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMSArMzMsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBKU1N0cmluZzsKIAorICAgIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEpTR2xvYmFs
RGF0YSopOwogICAgIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSopOworICAgIEpT
U3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJik7IC8vIHJldHVy
bnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwogICAgIEpTU3RyaW5nKiBqc1N0
cmluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5n
IGlmIHBhc3NlZCBudWxsIHN0cmluZwogCisgICAgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKEpTR2xvYmFsRGF0YSosIFVDaGFyKTsKICAgICBKU1N0cmluZyoganNTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgVUNoYXIpOworICAgIEpTU3RyaW5nKiBqc1NpbmdsZUNo
YXJhY3RlclN1YnN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJiwgdW5zaWduZWQg
b2Zmc2V0KTsKICAgICBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoRXhlY1N0
YXRlKiwgY29uc3QgVVN0cmluZyYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgSlNTdHJpbmcqIGpz
U3Vic3RyaW5nKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSos
IGNvbnN0IFVTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAg
ICAvLyBOb24tdHJpdmlhbCBzdHJpbmdzIGFyZSB0d28gb3IgbW9yZSBjaGFyYWN0ZXJzIGxvbmcu
CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBmYXN0ZXIgdGhhbiBqdXN0IGNhbGxpbmcganNT
dHJpbmcuCisgICAgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERhdGEqLCBj
b25zdCBVU3RyaW5nJik7CiAgICAgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3Rh
dGUqLCBjb25zdCBVU3RyaW5nJik7CisgICAgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhK
U0dsb2JhbERhdGEqLCBjb25zdCBjaGFyKik7CiAgICAgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0
cmluZyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7CiAKICAgICAvLyBTaG91bGQgYmUgdXNlZCBm
b3Igc3RyaW5ncyB0aGF0IGFyZSBvd25lZCBieSBhbiBvYmplY3QgdGhhdCB3aWxsCiAgICAgLy8g
bGlrZWx5IG91dGxpdmUgdGhlIEpTVmFsdWUgdGhpcyBtYWtlcywgc3VjaCBhcyB0aGUgcGFyc2Ug
dHJlZSBvciBhCiAgICAgLy8gRE9NIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgVVN0cmluZworICAg
IEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmKTsg
CiAgICAgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYp
OyAKIAogICAgIGNsYXNzIEpTU3RyaW5nIDogcHVibGljIEpTQ2VsbCB7CkBAIC01NSwyMSArNjMs
MjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYWNoaW5lOwogCiAg
ICAgcHVibGljOgotICAgICAgICBKU1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJp
bmcmIHZhbHVlKQotICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmlu
Z1N0cnVjdHVyZUlELmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFs
RGF0YS0+c3RyaW5nU3RydWN0dXJlSUQuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJh
TWVtb3J5Q29zdCh2YWx1ZS5jb3N0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgZW51bSBIYXNP
dGhlck93bmVyVHlwZSB7IEhhc090aGVyT3duZXIgfTsKLSAgICAgICAgSlNTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUpCi0gICAg
ICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5nU3RydWN0dXJlSUQuZ2V0
KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0
cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xv
YmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlSUQuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICBKU1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUp
Ci0gICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5nU3RydWN0dXJl
SUQuZ2V0KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkKKyAgICAgICAg
ICAgIDogSlNDZWxsKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZUlELmdldCgpKQogICAgICAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTgwLDcgKzg4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAg
ICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fdmFsdWUuc2l6ZSgpKTsgfQotICAgICAgICBKU1N0cmluZyogZ2V0SW5k
ZXgoRXhlY1N0YXRlKiwgdW5zaWduZWQpOworICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoSlNH
bG9iYWxEYXRhKiwgdW5zaWduZWQpOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4gU3RydWN0
dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSkpOyB9CiAKQEAgLTEwOSw0
NyArMTE3LDU2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBVU3RyaW5nIG1fdmFsdWU7CiAg
ICAgfTsKIAotICAgIGlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCisgICAgaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuc21hbGxT
dHJpbmdzLmVtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21h
bGxTdHJpbmdzLmVtcHR5U3RyaW5nKGdsb2JhbERhdGEpOwogICAgIH0KIAotICAgIGlubGluZSBK
U1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBVQ2hhciBj
KQorICAgIGlubGluZSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBVQ2hhciBjKQogICAgIHsKICAgICAgICAgaWYgKGMgPD0gMHhGRikK
LSAgICAgICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuc21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZyhleGVjLCBjKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNT
dHJpbmcoZXhlYywgVVN0cmluZygmYywgMSkpOworICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7Cisg
ICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFVTdHJp
bmcoJmMsIDEpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFj
dGVyU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcywgdW5zaWduZWQg
b2Zmc2V0KQorICAgIGlubGluZSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmco
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZz
ZXQpCiAgICAgewogICAgICAgICBBU1NFUlQob2Zmc2V0IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHMuc2l6ZSgpKSk7CiAgICAgICAgIFVDaGFyIGMgPSBzLmRhdGEoKVtvZmZzZXRdOwogICAgICAg
ICBpZiAoYyA8PSAweEZGKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGMpOwotICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBKU1N0cmluZyhleGVjLCBVU3RyaW5nOjpSZXA6OmNyZWF0ZShzLnJlcCgp
LCBvZmZzZXQsIDEpKTsKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICByZXR1cm4g
bmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5nOjpSZXA6OmNyZWF0
ZShzLnJlcCgpLCBvZmZzZXQsIDEpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpz
Tm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIHMpCisgICAgaW5s
aW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBjb25zdCBjaGFyKiBzKQogICAgIHsKICAgICAgICAgQVNTRVJUKHMpOwogICAgICAgICBBU1NF
UlQoc1swXSk7CiAgICAgICAgIEFTU0VSVChzWzFdKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNTdHJpbmcoZXhlYywgcyk7CisgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpT
U3RyaW5nKGdsb2JhbERhdGEsIHMpOwogICAgIH0KIAotICAgIGlubGluZSBKU1N0cmluZyoganNO
b250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykKKyAgICBp
bmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBBU1NFUlQocy5zaXplKCkgPiAx
KTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNTdHJpbmcoZXhlYywgcyk7CisgICAgICAg
IHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHMpOwogICAgIH0K
IAotICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKKyAgICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBBU1NF
UlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdWJz
dHJpbmcoZXhlYywgbV92YWx1ZSwgaSk7CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3Rl
clN1YnN0cmluZyhnbG9iYWxEYXRhLCBtX3ZhbHVlLCBpKTsKICAgICB9CiAKKyAgICBpbmxpbmUg
SlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5
U3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCkpOyB9CisgICAgaW5saW5lIEpTU3RyaW5nKiBqc1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpIHsgcmV0dXJuIGpzU3RyaW5n
KCZleGVjLT5nbG9iYWxEYXRhKCksIHMpOyB9CisgICAgaW5saW5lIEpTU3RyaW5nKiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVDaGFyIGMpIHsgcmV0dXJuIGpzU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIGMpOyB9CisgICAgaW5saW5l
IEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFVTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCkgeyByZXR1cm4ganNTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcywgb2Zmc2V0KTsgfQorICAgIGlubGlu
ZSBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBz
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJpbmco
JmV4ZWMtPmdsb2JhbERhdGEoKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9CisgICAgaW5saW5lIEpT
U3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5n
JiBzKSB7IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcyk7
IH0KKyAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBzKTsgfQorICAgIGlubGluZSBKU1N0cmluZyoganNPd25lZFN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpIHsgcmV0dXJuIGpzT3duZWRTdHJpbmcoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcyk7IH0gCisKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJp
bmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogICAgIHsKICAgICAgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKE5hdGl2ZUVycm9yQ29uCiBjb25zdCBDbGFzc0luZm8gTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cjo6aW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkludGVybmFsRnVuY3Rpb246OmluZm8sIDAsIDAgfTsK
IAogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgTmF0aXZlRXJyb3JQ
cm90b3R5cGUqIG5hdGl2ZUVycm9yUHJvdG90eXBlKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihl
eGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgbmF0aXZlRXJyb3JQcm90b3R5cGUtPmdl
dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSktPmdldFN0cmluZygpKSkKKyAgICA6
IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBJZGVudGlm
aWVyKGV4ZWMsIG5hdGl2ZUVycm9yUHJvdG90eXBlLT5nZXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLm5hbWUpLT5nZXRTdHJpbmcoKSkpCiAgICAgLCBtX2Vycm9yU3RydWN0dXJlKEVycm9y
SW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZUlEKG5hdGl2ZUVycm9yUHJvdG90eXBlKSkKIHsKICAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywg
MSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgLy8gRUNNQSAxNS4xMS43LjUK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MzcyMzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBOdW1iZXJDb25zdHJ1
Y3Rvcjo6aW5mbyAKICovCiAKIE51bWJlckNvbnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgTnVtYmVy
UHJvdG90eXBlKiBudW1iZXJQcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMs
IHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBudW1iZXJQcm90b3R5cGUtPmluZm8uY2xhc3NO
YW1lKSkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlLCBJZGVudGlmaWVyKGV4ZWMsIG51bWJlclByb3RvdHlwZS0+aW5mby5jbGFzc05hbWUpKQog
ewogICAgIC8vIE51bWJlci5Qcm90b3R5cGUKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgbnVtYmVyUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9PYmplY3RDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDM3MjM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL09iamVjdENvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0Q29uc3RydWN0b3IpOwogCiBPYmplY3RD
b25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90eXBl
KQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihleGVjLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhl
YywgIk9iamVjdCIpKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgIk9iamVjdCIpKQogewogICAgIC8vIEVDTUEg
MTUuMi4zLjEKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
b2JqZWN0UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvUHJvdG90eXBlRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9Qcm90b3R5cGVGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM3MjM4
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1Byb3RvdHlwZUZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRT
X0lOX0NFTEwoUHJvdG90eXBlRnVuY3Rpb24pOwogCiBQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90
eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKLSAgICA6IEludGVybmFsRnVuY3Rpb24o
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVj
dHVyZSgpLCBuYW1lKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
KCksIG5hbWUpCiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogewogICAgIEFTU0VSVF9BUkco
ZnVuY3Rpb24sIGZ1bmN0aW9uKTsKQEAgLTQxLDcgKzQxLDcgQEAgUHJvdG90eXBlRnVuY3Rpb246
OlByb3RvdHlwZUZ1bmN0aW9uKEV4ZQogfQogCiBQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBl
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBwcm90b3R5
cGVGdW5jdGlvblN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
TmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24pCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIHBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBuYW1lKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgbmFtZSkKICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUX0FSRyhmdW5jdGlvbiwgZnVu
Y3Rpb24pOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBzdHJ1Y3QgUmVnRXhwQ29uc3Ry
dWN0b3JQcml2YXRlIHsKIH07CiAKIFJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgUmVn
RXhwUHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMsIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCAiUmVnRXhwIikpCisgICAgOiBJbnRlcm5h
bEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVj
LCAiUmVnRXhwIikpCiAgICAgLCBkKG5ldyBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUpCiB7CiAg
ICAgLy8gRUNNQSAxNS4xMC41LjEgUmVnRXhwLnByb3RvdHlwZQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL1Njb3BlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvU2Nv
cGVDaGFpbi5oCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TY29wZUNo
YWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBT
Y29wZUNoYWluTm9kZShTY29wZUNoYWluTm9kZSogbiwgSlNPYmplY3QqIG8sIEpTT2JqZWN0KiBn
dCkKLSAgICAgICAgICAgIDogbmV4dChuKQotICAgICAgICAgICAgLCBvYmplY3QobykKLSAgICAg
ICAgICAgICwgZ2xvYmFsVGhpcyhndCkKKyAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVDaGFp
bk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
SlNPYmplY3QqIGdsb2JhbFRoaXMpCisgICAgICAgICAgICA6IG5leHQobmV4dCkKKyAgICAgICAg
ICAgICwgb2JqZWN0KG9iamVjdCkKKyAgICAgICAgICAgICwgZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgICAgICAgICAgLCBnbG9iYWxUaGlzKGdsb2JhbFRoaXMpCiAgICAgICAgICAgICAsIHJl
ZkNvdW50KDEpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChnbG9iYWxEYXRhKTsKICAg
ICAgICAgfQogCiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBuZXh0OwogICAgICAgICBKU09iamVj
dCogb2JqZWN0OworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CiAgICAgICAgIEpT
T2JqZWN0KiBnbG9iYWxUaGlzOwogICAgICAgICBpbnQgcmVmQ291bnQ7CiAKQEAgLTc4LDcgKzgx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIFNjb3BlQ2hhaW5Ob2RlKiBTY29wZUNo
YWluTm9kZTo6cHVzaChKU09iamVjdCogbykKICAgICB7CiAgICAgICAgIEFTU0VSVChvKTsKLSAg
ICAgICAgcmV0dXJuIG5ldyBTY29wZUNoYWluTm9kZSh0aGlzLCBvLCBnbG9iYWxUaGlzKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBTY29wZUNoYWluTm9kZSh0aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9i
YWxUaGlzKTsKICAgICB9CiAKICAgICBpbmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5O
b2RlOjpwb3AoKQpAQCAtMTU1LDggKzE1OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAotICAgICAgICBTY29wZUNoYWluKEpTT2JqZWN0KiBvLCBKU09iamVjdCog
Z2xvYmFsVGhpcykKLSAgICAgICAgICAgIDogbV9ub2RlKG5ldyBTY29wZUNoYWluTm9kZSgwLCBv
LCBnbG9iYWxUaGlzKSkKKyAgICAgICAgU2NvcGVDaGFpbihKU09iamVjdCogbywgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpcykKKyAgICAgICAgICAgIDogbV9u
b2RlKG5ldyBTY29wZUNoYWluTm9kZSgwLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxUaGlzKSkKICAg
ICAgICAgewogICAgICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9TbWFsbFN0cmlu
Z3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9TbWFsbFN0cmluZ3MuY3Bw
CShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TbWFsbFN0cmluZ3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODcsMTggKzg4LDE4
IEBAIHZvaWQgU21hbGxTdHJpbmdzOjptYXJrKCkKICAgICB9CiB9CiAgICAgCi12b2lkIFNtYWxs
U3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQordm9pZCBTbWFsbFN0
cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAg
ICBBU1NFUlQoIW1fZW1wdHlTdHJpbmcpOwotICAgIG1fZW1wdHlTdHJpbmcgPSBuZXcgKGV4ZWMp
IEpTU3RyaW5nKGV4ZWMsICIiLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CisgICAgbV9lbXB0
eVN0cmluZyA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgIiIsIEpTU3Ry
aW5nOjpIYXNPdGhlck93bmVyKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVy
KQordm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQogewogICAgIGlmICgh
bV9zdG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2Uuc2V0KG5ldyBTbWFsbFN0cmluZ3NTdG9yYWdl
KTsKICAgICBBU1NFUlQoIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdKTsKLSAg
ICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSA9IG5ldyAoZXhlYykgSlNTdHJp
bmcoZXhlYywgbV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVyKSwgSlNTdHJpbmc6Okhhc090aGVyT3du
ZXIpOworICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gbmV3IChnbG9i
YWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpLCBK
U1N0cmluZzo6SGFzT3RoZXJPd25lcik7CiB9CiAKIFVTdHJpbmc6OlJlcCogU21hbGxTdHJpbmdz
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBK
U0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNTdHJpbmc7CiAKICAgICBjbGFzcyBTbWFsbFN0cmlu
Z3NTdG9yYWdlOwpAQCAtNDEsMTYgKzQxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
bWFsbFN0cmluZ3MoKTsKICAgICAgICAgflNtYWxsU3RyaW5ncygpOwogCi0gICAgICAgIEpTU3Ry
aW5nKiBlbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIEpTU3RyaW5nKiBlbXB0
eVN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICghbV9lbXB0eVN0cmluZykKLSAgICAgICAgICAgICAgICBjcmVhdGVFbXB0eVN0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVFbXB0eVN0cmluZyhnbG9iYWxEYXRhKTsKICAg
ICAgICAgICAgIHJldHVybiBtX2VtcHR5U3RyaW5nOwogICAgICAgICB9Ci0gICAgICAgIEpTU3Ry
aW5nKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjaGFy
IGNoYXJhY3RlcikKKyAgICAgICAgSlNTdHJpbmcqIHNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdKQot
ICAgICAgICAgICAgICAgIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjaGFyYWN0
ZXIpOworICAgICAgICAgICAgICAgIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxE
YXRhLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIG1fc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nc1tjaGFyYWN0ZXJdOwogICAgICAgICB9CiAKQEAgLTU5LDggKzU5LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgbWFyaygpOwogICAgICAgICAKICAgICBwcml2YXRlOgotICAg
ICAgICB2b2lkIGNyZWF0ZUVtcHR5U3RyaW5nKEV4ZWNTdGF0ZSopOwotICAgICAgICB2b2lkIGNy
ZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBjaGFyKTsKKyAg
ICAgICAgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgdm9p
ZCBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiwgdW5zaWduZWQgY2hh
cik7CiAKICAgICAgICAgSlNTdHJpbmcqIG1fZW1wdHlTdHJpbmc7CiAgICAgICAgIEpTU3RyaW5n
KiBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMHgxMDBdOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzIzOCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgc3RhdGljIEpTVmFsdWUqIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjUwogQVNTRVJUX0NM
QVNTX0ZJVFNfSU5fQ0VMTChTdHJpbmdDb25zdHJ1Y3Rvcik7CiAKIFN0cmluZ0NvbnN0cnVjdG9y
OjpTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJl
SUQ+IHN0cnVjdHVyZSwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBT
dHJpbmdQcm90b3R5cGUqIHN0cmluZ1Byb3RvdHlwZSkKLSAgICA6IEludGVybmFsRnVuY3Rpb24o
ZXhlYywgc3RydWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1Byb3RvdHlwZS0+Y2xhc3NJ
bmZvKCktPmNsYXNzTmFtZSkpCisgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBzdHJpbmdQcm90b3R5cGUtPmNsYXNz
SW5mbygpLT5jbGFzc05hbWUpKQogewogICAgIC8vIEVDTUEgMTUuNS4zLjEgU3RyaW5nLnByb3Rv
dHlwZQogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBzdHJp
bmdQcm90b3R5cGUsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKSW5kZXg6IFdl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAzNzI0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjkgQEAKKzIwMDgtMTAtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbmV4dCBzdGVwIG9m
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NQorICAgICAgICAg
IFR1cm4gRXhlY1N0YXRlIGludG8gYSBjYWxsIGZyYW1lIHBvaW50ZXIuCisKKyAgICAgICAgUmVt
b3ZlIG1fZ2xvYmFsT2JqZWN0IGFuZCBtX2dsb2JhbERhdGEgZnJvbSBFeGVjU3RhdGUuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2VEYXRhOjpKU0RPTVdpbmRvd0Jhc2VE
YXRhKToKKyAgICAgICAgUmVtb3ZlZCBhbiBhcmd1bWVudCBub3cgdGhhdCBKU0dsb2JhbE9iamVj
dCBkb2Vzbid0IG5lZWQgaXQgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6IFJlbW92ZWQgdGhlIGFyZ3VtZW50IGZyb20KKyAgICAg
ICAgdGhlIEpTRE9NV2luZG93QmFzZURhdGEgY29uc3RydWN0b3IsIGFuZCBhZGRlZCB0aGUgdGhp
cyBhcmd1bWVudCB0byB0aGUKKyAgICAgICAgSlNHbG9iYWxPYmplY3QgY29uc3RydWN0b3IuIFRo
aXMgaXMgYmVjYXVzZSBhIGNvdXBsZSBrZXkgYml0cyBvZgorICAgICAgICBpbml0aWFsaXphdGlv
biBtb3ZlZCBmcm9tIHRoZSBkYXRhIGNvbnN0cnVjdG9yIHRvIHRoZSBKU0dsb2JhbE9iamVjdAor
ICAgICAgICBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaDogRGl0dG8uCisKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZCk6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGlt
ZU1ldGhvZDo6UnVudGltZU1ldGhvZCk6CisgICAgICAgIFBhc3MgSlNHbG9iYWxEYXRhKiBpbnN0
ZWFkIG9mIEV4ZWNTdGF0ZSogdG8gdGhlIEludGVybmFsRnVuY3Rpb24KKyAgICAgICAgY29uc3Ry
dWN0b3IuCisKIDIwMDgtMTAtMDMgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAg
ICAgICAgIEluc3RlYWQgb2YgYSBjcm9zcy1wbGF0Zm9ybSBpbml0L2Rlc3Ryb3kgdGhhdCBmb3Jj
ZXMgZXZlcnkgU2Nyb2xsVmlldyBwbGF0Zm9ybSB0byBoYXZlIGEgY29uc3RydWN0b3IvCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAzNzIzOCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDkgKzE2Myw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0Jhc2U6OnNf
aW5mbyAKIEBlbmQKICovCiAKLUpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlRGF0YTo6
SlNET01XaW5kb3dCYXNlRGF0YShQYXNzUmVmUHRyPERPTVdpbmRvdz4gd2luZG93LCBKU0RPTVdp
bmRvd0Jhc2UqIGpzV2luZG93LCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKLSAgICA6IEpTR2xv
YmFsT2JqZWN0RGF0YShqc1dpbmRvdywgc2hlbGwpCi0gICAgLCBpbXBsKHdpbmRvdykKK0pTRE9N
V2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlRGF0YTo6SlNET01XaW5kb3dCYXNlRGF0YShQYXNz
UmVmUHRyPERPTVdpbmRvdz4gd2luZG93LCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKKyAgICA6
IGltcGwod2luZG93KQogICAgICwgZXZ0KDApCiAgICAgLCByZXR1cm5WYWx1ZVNsb3QoMCkKICAg
ICAsIHNoZWxsKHNoZWxsKQpAQCAtMTczLDcgKzE3Miw3IEBAIEpTRE9NV2luZG93QmFzZTo6SlNE
T01XaW5kb3dCYXNlRGF0YTo6SlMKIH0KIAogSlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jh
c2UoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPERPTVdpbmRv
dz4gd2luZG93LCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKLSAgICA6IEpTR2xvYmFsT2JqZWN0
KHN0cnVjdHVyZSwgbmV3IEpTRE9NV2luZG93QmFzZURhdGEod2luZG93LCB0aGlzLCBzaGVsbCkp
CisgICAgOiBKU0dsb2JhbE9iamVjdChzdHJ1Y3R1cmUsIG5ldyBKU0RPTVdpbmRvd0Jhc2VEYXRh
KHdpbmRvdywgc2hlbGwpLCBzaGVsbCkKIHsKICAgICAvLyBUaW1lIGluIG1pbGxpc2Vjb25kcyBi
ZWZvcmUgdGhlIHNjcmlwdCB0aW1lb3V0IGhhbmRsZXIga2lja3MgaW4uCiAgICAgc2V0VGltZW91
dFRpbWUoMTAwMDApOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShy
ZXZpc2lvbiAzNzIzOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgSlNET01XaW5kb3dCYXNlRGF0YSA6IHB1Ymxp
YyBKU0dsb2JhbE9iamVjdERhdGEgewotICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlRGF0YShQ
YXNzUmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93QmFzZSosIEpTRE9NV2luZG93U2hlbGwq
KTsKKyAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZURhdGEoUGFzc1JlZlB0cjxET01XaW5kb3c+
LCBKU0RPTVdpbmRvd1NoZWxsKik7CiAKICAgICAgICAgICAgIFJlZlB0cjxET01XaW5kb3c+IGlt
cGw7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9uIDM3MjM4KQor
KysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoUnVudGltZU1ldGhvZCkKIGNv
bnN0IENsYXNzSW5mbyBSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJSdW50aW1lTWV0aG9kIiwg
MCwgMCwgMCB9OwogCiBSdW50aW1lTWV0aG9kOjpSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBtKSAKLSAg
ICA6IEludGVybmFsRnVuY3Rpb24oZXhlYywgZ2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+
KGV4ZWMpLCBpZGVudCkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBpZGVudCkKICAgICAsIF9t
ZXRob2RMaXN0KG5ldyBNZXRob2RMaXN0KG0pKQogewogfQpJbmRleDogV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVu
dGltZS5jcHAJKHJldmlzaW9uIDM3MjM4KQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OCw3ICs4NTgsNyBAQCBKU1ZhbHVlKiBjb252ZXJ0
UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0CiBjb25zdCBDbGFzc0luZm8gUXRSdW50aW1lTWV0aG9k
OjpzX2luZm8gPSB7ICJRdFJ1bnRpbWVNZXRob2QiLCAwLCAwLCAwIH07CiAKIFF0UnVudGltZU1l
dGhvZDo6UXRSdW50aW1lTWV0aG9kKFF0UnVudGltZU1ldGhvZERhdGEqIGRkLCBFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGlu
c3QpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMsIGdldERPTVN0cnVjdHVyZTxRdFJ1bnRp
bWVNZXRob2Q+KGV4ZWMpLCBpZGVudCkKKyAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmds
b2JhbERhdGEoKSwgZ2V0RE9NU3RydWN0dXJlPFF0UnVudGltZU1ldGhvZD4oZXhlYyksIGlkZW50
KQogICAgICwgZF9wdHIoZGQpCiB7CiAgICAgUVdfRChRdFJ1bnRpbWVNZXRob2QpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24090</attachid>
            <date>2008-10-04 13:11:53 -0700</date>
            <delta_ts>2008-10-04 14:06:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>NoExecStatePatch.txt</filename>
            <type>text/plain</type>
            <size>85544</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MjkwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU5IEBACisyMDA4LTEwLTA0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTI5NQorICAgICAgICAgIEJ1ZyAyMTI5NTogUmVwbGFjZSBFeGVjU3RhdGUgd2l0aCBhIGNh
bGwgZnJhbWUgUmVnaXN0ZXIgcG9pbnRlcgorCisgICAgICAgIDEwJSBmYXN0ZXIgb24gUmljaGFy
ZHM7IG90aGVyIHY4IGJlbmNobWFya3MgZmFzdGVyIHRvby4KKyAgICAgICAgQSB3YXNoIG9uIFN1
blNwaWRlci4KKworICAgICAgICBUaGlzIGRvZXMgdGhlIG1pbmltdW0gbmVjZXNzYXJ5IHRvIGdl
dCB0aGUgc3BlZWR1cC4gTmV4dCBzdGVwIGluCisgICAgICAgIGNsZWFuaW5nIHRoaXMgdXAgaXMg
dG8gcmVwbGFjZSBFeGVjU3RhdGUgd2l0aCBhIENhbGxGcmFtZSBjbGFzcywKKyAgICAgICAgYW5k
IGJlIG1vcmUganVkaWNpb3VzIGFib3V0IHdoZW4gdG8gcGFzcyBhIGNhbGwgZnJhbWUgYW5kIHdo
ZW4KKyAgICAgICAgdG8gcGFzcyBhIGdsb2JhbCBkYXRhIHBvaW50ZXIsIGdsb2JhbCBvYmplY3Qg
cG9pbnRlciwgb3IgcGVyaGFwcworICAgICAgICBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4KKwor
ICAgICAgICAqIFZNL0NUSS5jcHA6IFJlbW92ZSB0aGUgZGVidWctb25seSBjaGVjayBvZiB0aGUg
ZXhjZXB0aW9uIGluCisgICAgICAgIGN0aVZNVGhyb3dUcmFtcG9saW5lIC0tIGFscmVhZHkgY2hl
Y2tlZCBpbiB0aGUgY29kZSB0aGUgdHJhbXBvbGluZQorICAgICAgICBqdW1wcyB0bywgc28gbm90
IGFsbCB0aGF0IHVzZWZ1bC4gUmVtb3ZlZCB0aGUgZXhlYyBhcmd1bWVudCBmcm9tCisgICAgICAg
IGN0aVRyYW1wb2xpbmUuIFJlbW92ZWQgZW1pdERlYnVnRXhjZXB0aW9uQ2hlY2sgLS0gbm8gbG9u
Z2VyIG5lZWRlZC4KKyAgICAgICAgKEpTQzo6Q1RJOjplbWl0Q2FsbCk6IFJlbW92ZWQgY29kZSB0
byBzZXQgRXhlY1N0YXRlOjptX2NhbGxGcmFtZS4KKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKTogUmVtb3ZlZCBjb2RlIGluIGNhdGNoIHRvIGV4dHJhY3QKKyAgICAg
ICAgdGhlIGV4Y2VwdGlvbiBmcm9tIEV4ZWNTdGF0ZTo6bV9leGNlcHRpb247IGluc3RlYWQsIHRo
ZSBjb2RlIHRoYXQKKyAgICAgICAganVtcHMgaW50byBjYXRjaCB3aWxsIG1ha2Ugc3VyZSB0aGUg
ZXhjZXB0aW9uIGlzIGFscmVhZHkgaW4gZWF4LgorICAgICAgICAqIFZNL0NUSS5oOiBSZW1vdmVk
IGV4ZWMgZnJvbSB0aGUgY3RpVHJhbXBvbGluZS4gQWxzbyByZW1vdmVkIHRoZQorICAgICAgICBu
b24taGVscGZ1bCAidm9sYXRpbGUiLiBUZW1wb3JhcmlseSBsZWZ0IEFSR19leGVjIGluIGFzIGEg
c3lub255bQorICAgICAgICBmb3IgQVJHX3I7IEknbGwgY2hhbmdlIHRoYXQgb24gYSBmdXR1cmUg
Y2xlYW51cCBwYXNzIHdoZW4gaW50cm9kdWNpbmcKKyAgICAgICAgbW9yZSB1c2Ugb2YgdGhlIENh
bGxGcmFtZSB0eXBlLgorICAgICAgICAoSlNDOjpDVEk6OmV4ZWN1dGUpOiBSZW1vdmVkIHRoZSBF
eGVjU3RhdGUqIGFyZ3VtZW50LgorCisgICAgICAgICogVk0vRXhjZXB0aW9uSGVscGVycy5jcHA6
CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OkludGVycnVwdGVkRXhl
Y3V0aW9uRXJyb3IpOiBUYWtlCisgICAgICAgIEpTR2xvYmFsRGF0YSogaW5zdGVhZCBvZiBFeGVj
U3RhdGUqLgorICAgICAgICAoSlNDOjpjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bik6IERpdHRvLgorICAgICAgICAqIFZNL0V4Y2VwdGlvbkhlbHBlcnMuaDogRGl0dG8uIEFsc28g
cmVtb3ZlZCBhbiB1bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogVk0vTWFjaGluZS5jcHA6
CisgICAgICAgIChKU0M6OnNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKTogUmVtb3ZlZCB0aGUg
ZXhlYyBhbmQKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgYXJndW1lbnRzLiBDaGFuZ2VkIHRvIHJl
dHVybiAwIHdoZW4gdGhlcmUncyBhIHN0YWNrCisgICAgICAgIG92ZXJmbG93IHJhdGhlciB0aGFu
IHVzaW5nIGEgc2VwYXJhdGUgZXhjZXB0aW9uIGFyZ3VtZW50IHRvIGN1dAorICAgICAgICBkb3du
IG9uIG1lbW9yeSBhY2Nlc3NlcyBpbiB0aGUgY2FsbGluZyBjb252ZW50aW9uLgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjp1bndpbmRDYWxsRnJhbWUpOiBSZW1vdmVkIHRoZSBleGVjIGFyZ3VtZW50
IHdoZW4KKyAgICAgICAgY29uc3RydWN0aW5nIGEgRGVidWdnZXJDYWxsRnJhbWUuIEFsc28gcmVt
b3ZlZCBjb2RlIHRvIHNldAorICAgICAgICBFeGVjU3RhdGU6Om1fY2FsbEZyYW1lLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lOjp0aHJvd0V4Y2VwdGlvbik6IFJlbW92ZWQgdGhlIGV4ZWMgYXJndW1l
bnQgd2hlbgorICAgICAgICBjb25zdHJ1Y3Rpb24gYSBEZWJ1Z2dlckNhbGxGcmFtZS4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6ZXhlY3V0ZSk6IFVwZGF0ZWQgdG8gdXNlIHRoZSByZWdpc3RlciBp
bnN0ZWFkIG9mCisgICAgICAgIEV4ZWNTdGF0ZSBhbmQgYWxzbyByZW1vdmVkIHZhcmlvdXMgdXNl
cyBvZiBFeGVjU3RhdGUuCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmRlYnVnKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUpOiBQdXQgZ2xvYmFsRGF0YSBpbnRvIGEgbG9j
YWwKKyAgICAgICAgdmFyaWFibGUgc28gaXQgY2FuIGJlIHVzZWQgdGhyb3VnaG91dCB0aGUgaW50
ZXJwcmV0ZXIuIENoYW5nZWQKKyAgICAgICAgdGhlIFZNX0NIRUNLX0VYQ0VQVElPTiB0byBnZXQg
dGhlIGV4Y2VwdGlvbiBpbiBnbG9iYWxEYXRhIGluc3RlYWQKKyAgICAgICAgb2YgdGhyb3VnaCBF
eGVjU3RhdGUuCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnJldHJpZXZlTGFzdENhbGxlcik6IFR1
cm4gZXhlYyBpbnRvIGEgcmVnaXN0ZXJzCisgICAgICAgIHBvaW50ZXIgYnkgY2FsbGluZyByZWdp
c3RlcnMoKSBpbnN0ZWFkIG9mIGJ5IGdldHRpbmcgbV9jYWxsRnJhbWUuCisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmNhbGxGcmFtZSk6IERpdHRvLgorICAgICAgICBUd2Vha2VkIGV4Y2VwdGlvbiBt
YWNyb3MuIE1hZGUgbmV3IHZlcnNpb25zIGZvciB3aGVuIHlvdSBrbm93CisgICAgICAgIHlvdSBo
YXZlIGFuIGV4Y2VwdGlvbi4gR2V0IGF0IGdsb2JhbCBleGNlcHRpb24gd2l0aCBBUkdfZ2xvYmFs
RGF0YS4KKyAgICAgICAgR290IHJpZCBvZiB0aGUgbmVlZCB0byBwYXNzIGluIHRoZSByZXR1cm4g
dmFsdWUgdHlwZS4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2FkZCk6IFVwZGF0ZSB0
byB1c2UgbmV3IHZlcnNpb24gb2YgZXhjZXB0aW9uCisgICAgICAgIG1hY3Jvcy4KKyAgICAgICAg
KEpTQzo6TWFjaGluZTo6Y3RpX29wX3ByZV9pbmMpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX3RpbWVvdXRfY2hlY2spOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6
Y3RpX29wX2luc3RhbmNlb2YpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29w
X25ld19mdW5jKTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jYWxsX0pT
RnVuY3Rpb24pOiBPcHRpbWl6ZWQgYnkgdXNpbmcgdGhlCisgICAgICAgIEFSRyB2YWx1ZXMgZGly
ZWN0bHkgaW5zdGVhZCBvZiB0aHJvdWdoIGxvY2FsIHZhcmlhYmxlcyAtLSB0aGlzIGdldHMKKyAg
ICAgICAgcmlkIG9mIGNvZGUgdGhhdCBqdXN0IHNodWZmbGVzIHRoaW5ncyBhcm91bmQgaW4gdGhl
IHN0YWNrIGZyYW1lLgorICAgICAgICBBbHNvIGdldCByaWQgb2YgRXhlY1N0YXRlIGFuZCB1cGRh
dGUgZm9yIHRoZSBuZXcgd2F5IGV4Y2VwdGlvbnMgYXJlCisgICAgICAgIGhhbmRsZWQgaW4gc2xp
ZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwuCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV92bV9j
b21waWxlKTogVXBkYXRlIHRvIG1ha2UgZXhlYyBvdXQgb2YgciBzaW5jZQorICAgICAgICB0aGV5
IGFyZSBib3RoIHRoZSBzYW1lIHRoaW5nIG5vdy4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3Rp
X29wX2NhbGxfTm90SlNGdW5jdGlvbik6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpj
dGlfb3BfaW5pdF9hcmd1bWVudHMpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3Rp
X29wX3Jlc29sdmUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2NvbnN0
cnVjdF9KU0NvbnN0cnVjdCk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3Bf
Y29uc3RydWN0X05vdEpTQ29uc3RydWN0KTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9yZXNvbHZlX2Z1bmMpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3Rp
X29wX3B1dF9ieV92YWwpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1
dF9ieV92YWxfYXJyYXkpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3Jl
c29sdmVfc2tpcCk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcmVzb2x2
ZV9nbG9iYWwpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3Bvc3RfaW5j
KTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX3dpdGhfYmFz
ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcG9zdF9kZWMpOiBEaXR0
by4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2NhbGxfZXZhbCk6IERpdHRvLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfdGhyb3cpOiBEaXR0by4gQWxzbyByZWFycmFuZ2Vk
IHRvIHJldHVybgorICAgICAgICB0aGUgZXhjZXB0aW9uIHZhbHVlIGFzIHRoZSByZXR1cm4gdmFs
dWUgc28gaXQgY2FuIGJlIHVzZWQgYnkKKyAgICAgICAgb3BfY2F0Y2guCisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmN0aV9vcF9wdXNoX3Njb3BlKTogRGl0dG8uCisgICAgICAgIChKU0M6Ok1hY2hp
bmU6OmN0aV9vcF9pbik6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZGVs
X2J5X3ZhbCk6IERpdHRvLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfdm1fdGhyb3cpOiBE
aXR0by4gQWxzbyByZWFycmFuZ2VkIHRvIHJldHVybgorICAgICAgICB0aGUgZXhjZXB0aW9uIHZh
bHVlIGFzIHRoZSByZXR1cm4gdmFsdWUgc28gaXQgY2FuIGJlIHVzZWQgYnkKKyAgICAgICAgb3Bf
Y2F0Y2guCisKKyAgICAgICAgKiBranMvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKTogUGFzcyBnbG9iYWxEYXRhLgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUpOiBFbGltaW5hdGVkIGNv
ZGUgdG8gbWFrZSBhCisgICAgICAgIG5ldyBFeGVjU3RhdGUuCisgICAgICAgICoga2pzL0RlYnVn
Z2VyQ2FsbEZyYW1lLmg6IFJlbW92ZWQgRXhlY1N0YXRlIGFyZ3VtZW50IGZyb20KKyAgICAgICAg
Y29uc3RydWN0b3IuCisKKyAgICAgICAgKiBranMvRXhlY1N0YXRlLmg6IEVsaW1pbmF0ZWQgYWxs
IGRhdGEgbWVtYmVycyBhbmQgbWFkZSBFeGVjU3RhdGUKKyAgICAgICAgaW5oZXJpdCBwcml2YXRl
bHkgZnJvbSBSZWdpc3RlciBpbnN0ZWFkLiBBbHNvIGFkZGVkIGEgdHlwZWRlZiB0bworICAgICAg
ICB0aGUgZnV0dXJlIG5hbWUgZm9yIHRoaXMgY2xhc3MsIHdoaWNoIGlzIENhbGxGcmFtZS4gSXQn
cyBqdXN0IGEKKyAgICAgICAgUmVnaXN0ZXIqIHRoYXQga25vd3MgaXQncyBhIHBvaW50ZXIgYXQg
YSBjYWxsIGZyYW1lLiBUaGUgbmV3IGNsYXNzCisgICAgICAgIGNhbid0IGJlIGNvbnN0cnVjdGVk
IG9yIGNvcGllZC4gQ2hhbmdlZCBhbGwgZnVuY3Rpb25zIHRvIHVzZQorICAgICAgICB0aGUgdGhp
cyBwb2ludGVyIGluc3RlYWQgb2YgbV9jYWxsRnJhbWUuIENoYW5nZWQgZXhjZXB0aW9uLXJlbGF0
ZWQKKyAgICAgICAgZnVuY3Rpb25zIHRvIGFjY2VzcyBhbiBleGNlcHRpb24gaW4gSlNHbG9iYWxE
YXRhLiBSZW1vdmVkIGZ1bmN0aW9ucworICAgICAgICB1c2VkIGJ5IENUSSB0byBwYXNzIHRoZSBy
ZXR1cm4gYWRkcmVzcyB0byB0aGUgdGhyb3cgbWFjaGluZXJ5IC0tCisgICAgICAgIHRoaXMgaXMg
bm93IGRvbmUgZGlyZWN0bHkgd2l0aCBhIGdsb2JhbCBpbiB0aGUgZ2xvYmFsIGRhdGEuCisKKyAg
ICAgICAgKiBranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlv
blByb3RvRnVuY1RvU3RyaW5nKTogUGFzcyBnbG9iYWxEYXRhIGluc3RlYWQgb2YgZXhlYy4KKwor
ICAgICAgICAqIGtqcy9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJu
YWxGdW5jdGlvbjo6bmFtZSk6IFRha2UgZ2xvYmFsRGF0YSBpbnN0ZWFkIG9mIGV4ZWMuCisgICAg
ICAgICoga2pzL0ludGVybmFsRnVuY3Rpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBranMvSlNH
bG9iYWxEYXRhLmNwcDogSW5pdGlhbGl6ZSB0aGUgbmV3IGV4Y2VwdGlvbiBnbG9iYWwgdG8gMC4K
KyAgICAgICAgKiBranMvSlNHbG9iYWxEYXRhLmg6IERlY2xhcmUgdHdvIG5ldyBnbG9iYWxzLiBP
bmUgZm9yIHRoZSBjdXJyZW50CisgICAgICAgIGV4Y2VwdGlvbiBhbmQgYW5vdGhlciBmb3IgdGhl
IHJldHVybiBhZGRyZXNzIHVzZWQgYnkgQ1RJIHRvCisgICAgICAgIGltcGxlbWVudCB0aGUgdGhy
b3cgb3BlcmF0aW9uLgorCisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOiBSZW1vdmVkIGNvZGUgdG8gc2V0IHVwIGds
b2JhbEV4ZWMsCisgICAgICAgIHdoaWNoIGlzIG5vdyB0aGUgc2FtZSB0aGluZyBhcyBnbG9iYWxD
YWxsRnJhbWUuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6IEdldCBnbG9i
YWxFeGVjIGZyb20gb3VyIGdsb2JhbEV4ZWMKKyAgICAgICAgZnVuY3Rpb24gc28gd2UgZG9uJ3Qg
aGF2ZSB0byByZXBlYXQgdGhlIGxvZ2ljIHR3aWNlLgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6bWFyayk6IFJlbW92ZWQgY29kZSB0byBtYXJrIHRoZSBleGNlcHRpb247CisgICAgICAg
IHRoZSBleGNlcHRpb24gaXMgbm93IHN0b3JlZCBpbiBKU0dsb2JhbERhdGEgYW5kIG1hcmtlZCB0
aGVyZS4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMpOiBSZXR1cm4g
YSBwb2ludGVyIHRvIHRoZSBlbmQKKyAgICAgICAgb2YgdGhlIGdsb2JhbCBjYWxsIGZyYW1lLgor
ICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5oOiBSZW1vdmVkIHRoZSBnbG9iYWxFeGVjIGRh
dGEgbWVtYmVyLgorCisgICAgICAgICoga2pzL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uKTogUGFzcyBnbG9iYWxEYXRhIGluc3RlYWQgb2Yg
ZXhlYy4KKworICAgICAgICAqIGtqcy9jb2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
Ojpjb2xsZWN0KTogTWFyayB0aGUgZ2xvYmFsIGV4Y2VwdGlvbi4KKworICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9y
OjphZGRQYXJlbnRGb3JDb25zb2xlU3RhcnQpOiBQYXNzIGdsb2JhbERhdGEKKyAgICAgICAgaW5z
dGVhZCBvZiBleGVjIHRvIGNyZWF0ZUNhbGxJZGVudGlmaWVyLgorCisgICAgICAgICogcHJvZmls
ZXIvUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6d2lsbEV4ZWN1dGUpOiBQ
YXNzIGdsb2JhbERhdGEgaW5zdGVhZCBvZiBleGVjIHRvCisgICAgICAgIGNyZWF0ZUNhbGxJZGVu
dGlmaWVyLgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6ZGlkRXhlY3V0ZSk6IERpdHRvLgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIpOiBUYWtlIGdsb2JhbERh
dGEgaW5zdGVhZCBvZgorICAgICAgICBleGVjLgorICAgICAgICAoSlNDOjpjcmVhdGVDYWxsSWRl
bnRpZmllckZyb21GdW5jdGlvbkltcCk6IERpdHRvLgorICAgICAgICAqIHByb2ZpbGVyL1Byb2Zp
bGVyLmg6IENoYW5nZSBpbnRlcmZhY2UgdG8gdGFrZSBhIEpTR2xvYmFsRGF0YQorICAgICAgICBp
bnN0ZWFkIG9mIGFuIEV4ZWNTdGF0ZS4KKwogMjAwOC0xMC0wMyAgTWFjaWVqIFN0YWNob3dpYWsg
IDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvVk0vQ1RJLmNwcAkocmV2aXNpb24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9D
VEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIGJvb2wgaXNTU0UyUHJlc2Vu
dCgpCiAjZW5kaWYKIAogI2lmIENPTVBJTEVSKEdDQykgJiYgUExBVEZPUk0oWDg2KQorCiBhc20o
CiAiLmdsb2JsIF9jdGlUcmFtcG9saW5lIiAiXG4iCiAiX2N0aVRyYW1wb2xpbmU6IiAiXG4iCkBA
IC04MSw3ICs4Miw3IEBAIGFzbSgKICAgICAicHVzaGwgJWVkaSIgIlxuIgogICAgICJzdWJsICQw
eDI0LCAlZXNwIiAiXG4iCiAgICAgIm1vdmwgJDUxMiwgJWVzaSIgIlxuIgotICAgICJjYWxsICow
eDMwKCVlc3ApIiAiXG4iIC8vT3gzMCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJX0FSR1NfY29kZQor
ICAgICJjYWxsICoweDMwKCVlc3ApIiAiXG4iIC8vIE94MzAgPSAweDBDICogNCwgMHgwQyA9IENU
SV9BUkdTX2NvZGUKICAgICAiYWRkbCAkMHgyNCwgJWVzcCIgIlxuIgogICAgICJwb3BsICVlZGki
ICJcbiIKICAgICAicG9wbCAlZXNpIiAiXG4iCkBAIC05MSwxMyArOTIsNiBAQCBhc20oCiBhc20o
CiAiLmdsb2JsIF9jdGlWTVRocm93VHJhbXBvbGluZSIgIlxuIgogIl9jdGlWTVRocm93VHJhbXBv
bGluZToiICJcbiIKLSNpZm5kZWYgTkRFQlVHCi0gICAgIm1vdmwgMHgzNCglZXNwKSwgJWVjeCIg
IlxuIiAvL094MzQgPSAweDBEICogNCwgMHgwRCA9IENUSV9BUkdTX2V4ZWMKLSAgICAiY21wbCAk
MCwgOCglZWN4KSIgIlxuIgotICAgICJqbmUgMWYiICJcbiIKLSAgICAiaW50MyIgIlxuIgotICAg
ICIxOiIgIlxuIgotI2VuZGlmCiAgICAgImNhbGwgX19aTjNKU0M3TWFjaGluZTEyY3RpX3ZtX3Ro
cm93RVB2IiAiXG4iCiAgICAgImFkZGwgJDB4MjQsICVlc3AiICJcbiIKICAgICAicG9wbCAlZWRp
IiAiXG4iCkBAIC0xMDYsMTAgKzEwMCwxMCBAQCBhc20oCiApOwogICAgIAogI2VsaWYgQ09NUElM
RVIoTVNWQykKLWV4dGVybiAiQyIKLXsKKworZXh0ZXJuICJDIiB7CiAgICAgCi0gICAgX19kZWNs
c3BlYyhuYWtlZCkgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBFeGVjU3RhdGUq
IGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgSlNWYWx1ZSoq
IGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKKyAgICBfX2RlY2xzcGVjKG5h
a2VkKSBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIFJl
Z2lzdGVyKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikK
ICAgICB7CiAgICAgICAgIF9fYXNtIHsKICAgICAgICAgICAgIHB1c2ggZXNpOwpAQCAtMTI4LDcg
KzEyMiw3IEBAIGV4dGVybiAiQyIKICAgICBfX2RlY2xzcGVjKG5ha2VkKSB2b2lkIGN0aVZNVGhy
b3dUcmFtcG9saW5lKCkKICAgICB7CiAgICAgICAgIF9fYXNtIHsKLSAgICAgICAgICAgbW92IFtl
c3BdLCBlc3A7CisgICAgICAgICAgICBtb3YgW2VzcF0sIGVzcDsKICAgICAgICAgICAgIGNhbGwg
SlNDOjpNYWNoaW5lOjpjdGlfdm1fdGhyb3c7CiAgICAgICAgICAgICBhZGQgZXNwLCAweDI0Owog
ICAgICAgICAgICAgcG9wIGVkaTsKQEAgLTI0NiwyMiArMjQwLDcgQEAgdm9pZCBjdGlSZXBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyh2b2lkKgogICAgIChzdGF0aWNfY2FzdDx2b2lkKio+KHdoZXJl
KSlbLTFdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHdoYXQpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdoZXJlKSk7CiB9CiAKLSNp
ZmRlZiBOREVCVUcKLQotQUxXQVlTX0lOTElORSB2b2lkIENUSTo6ZW1pdERlYnVnRXhjZXB0aW9u
Q2hlY2soKQotewotfQotCi0jZWxzZQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQ1RJOjplbWl0RGVi
dWdFeGNlcHRpb25DaGVjaygpCi17Ci0gICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX2V4ZWMs
IFg4Njo6ZWN4KTsKLSAgICBtX2ppdC5jbXBsX2kzMm0oMCwgT0JKRUNUX09GRlNFVChFeGVjU3Rh
dGUsIG1fZXhjZXB0aW9uKSwgWDg2OjplY3gpOwotICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIG5v
RXhjZXB0aW9uID0gbV9qaXQuZW1pdFVubGlua2VkSmUoKTsKLSAgICBtX2ppdC5lbWl0SW50Mygp
OwotICAgIG1faml0Lmxpbmsobm9FeGNlcHRpb24sIG1faml0LmxhYmVsKCkpOwotfQorI2lmbmRl
ZiBOREVCVUcKIAogdm9pZCBDVEk6OnByaW50T3Bjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNy
YzEsIHVuc2lnbmVkIHNyYzIpCiB7CkBAIC0zMDQsNyArMjgzLDYgQEAgQUxXQVlTX0lOTElORSBY
ODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogICAgIG1faml0LmVtaXRSZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2UoKTsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0gbV9qaXQuZW1pdENh
bGwocik7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBvcGNvZGVJbmRleCkp
OwotICAgIGVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICByZXR1cm4gY2FsbDsKIH0K
QEAgLTMxNyw3ICsyOTUsNiBAQCBBTFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENU
STo6CiAgICAgbV9qaXQuZW1pdFJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIFg4NkFz
c2VtYmxlcjo6Sm1wU3JjIGNhbGwgPSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBvcGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1
Z0V4Y2VwdGlvbkNoZWNrKCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQu
bW92bF9pMzJtKDAsICZpbkNhbGxlZENvZGUpOwogI2VuZGlmCkBAIC0zMzMsNyArMzEwLDYgQEAg
QUxXQVlTX0lOTElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogICAgIG1faml0LmVtaXRS
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxs
ID0gbV9qaXQuZW1pdENhbGwoKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGws
IGhlbHBlciwgb3Bjb2RlSW5kZXgpKTsKLSAgICBlbWl0RGVidWdFeGNlcHRpb25DaGVjaygpOwog
I2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgwLCAmaW5DYWxs
ZWRDb2RlKTsKICNlbmRpZgpAQCAtMzQ5LDcgKzMyNSw2IEBAIEFMV0FZU19JTkxJTkUgWDg2QXNz
ZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICAgICBtX2ppdC5lbWl0UmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7CiAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7
CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4
KSk7Ci0gICAgZW1pdERlYnVnRXhjZXB0aW9uQ2hlY2soKTsKICNpZiBFTkFCTEUoU0FNUExJTkdf
VE9PTCkKICAgICBtX2ppdC5tb3ZsX2kzMm0oMCwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKQEAg
LTM2NSw3ICszNDAsNiBAQCBBTFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6
CiAgICAgbV9qaXQuZW1pdFJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIFg4NkFzc2Vt
Ymxlcjo6Sm1wU3JjIGNhbGwgPSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBvcGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1Z0V4
Y2VwdGlvbkNoZWNrKCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92
bF9pMzJtKDAsICZpbkNhbGxlZENvZGUpOwogI2VuZGlmCkBAIC0zODEsNyArMzU1LDYgQEAgQUxX
QVlTX0lOTElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogICAgIG1faml0LmVtaXRSZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0g
bV9qaXQuZW1pdENhbGwoKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhl
bHBlciwgb3Bjb2RlSW5kZXgpKTsKLSAgICBlbWl0RGVidWdFeGNlcHRpb25DaGVjaygpOwogI2lm
IEVOQUJMRShTQU1QTElOR19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgwLCAmaW5DYWxsZWRD
b2RlKTsKICNlbmRpZgpAQCAtMTIyMywxMCArMTE5Niw4IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGVtaXRHZXRBcmcoUmVnaXN0ZXJGaWxlOjpSZXR1
cm5QQywgWDg2OjplZHgpOwogCiAgICAgICAgICAgICAvLyBSZXN0b3JlIG91ciBjYWxsZXIncyAi
ciIuCi0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfZXhlYywgWDg2OjplY3gp
OwogICAgICAgICAgICAgZW1pdEdldEFyZyhSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVycywg
WDg2OjplZGkpOwogICAgICAgICAgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJH
U19yKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmxfcm0oWDg2OjplZGksIE9CSkVDVF9PRkZTRVQo
RXhlY1N0YXRlLCBtX2NhbGxGcmFtZSksIFg4Njo6ZWN4KTsKIAogICAgICAgICAgICAgLy8gUmV0
dXJuLgogICAgICAgICAgICAgbV9qaXQucHVzaGxfcihYODY6OmVkeCk7CkBAIC0xNzg2LDkgKzE3
NTcsNiBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9B
UkdTX3IsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKLSAgICAgICAgICAgIGVtaXRHZXRDVElQYXJh
bShDVElfQVJHU19leGVjLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZsX21yKE9C
SkVDVF9PRkZTRVQoRXhlY1N0YXRlLCBtX2V4Y2VwdGlvbiksIFg4Njo6ZWN4LCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBtX2ppdC5tb3ZsX2kzMm0oMCwgT0JKRUNUX09GRlNFVChFeGVjU3RhdGUs
IG1fZXhjZXB0aW9uKSwgWDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvVk0vQ1RJLmgJKHJldmlzaW9uIDM3MjkwKQorKysgSmF2YVNjcmlwdENv
cmUvVk0vQ1RJLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDIxICs1MiwyMSBAQAogI2RlZmluZSBD
VElfQVJHU18ybmRSZXN1bHQgMHgwOAogCiAjZGVmaW5lIENUSV9BUkdTX2NvZGUgMHgwQwotI2Rl
ZmluZSBDVElfQVJHU19leGVjIDB4MEQKLSNkZWZpbmUgQ1RJX0FSR1NfcmVnaXN0ZXJGaWxlIDB4
MEUKLSNkZWZpbmUgQ1RJX0FSR1NfciAweDBGCi0jZGVmaW5lIENUSV9BUkdTX2V4Y2VwdGlvbiAw
eDEwCi0jZGVmaW5lIENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlIDB4MTEKLSNkZWZpbmUgQ1RJ
X0FSR1NfZ2xvYmFsRGF0YSAweDEyCi0jZGVmaW5lIEFSR19leGVjICgoRXhlY1N0YXRlKikoQVJH
UylbQ1RJX0FSR1NfZXhlY10pCisjZGVmaW5lIENUSV9BUkdTX3JlZ2lzdGVyRmlsZSAweDBECisj
ZGVmaW5lIENUSV9BUkdTX3IgMHgwRQorI2RlZmluZSBDVElfQVJHU19leGNlcHRpb24gMHgwRgor
I2RlZmluZSBDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSAweDEwCisjZGVmaW5lIENUSV9BUkdT
X2dsb2JhbERhdGEgMHgxMQogI2RlZmluZSBBUkdfcmVnaXN0ZXJGaWxlICgoUmVnaXN0ZXJGaWxl
KikoQVJHUylbQ1RJX0FSR1NfcmVnaXN0ZXJGaWxlXSkKICNkZWZpbmUgQVJHX3IgKChSZWdpc3Rl
ciopKEFSR1MpW0NUSV9BUkdTX3JdKQogI2RlZmluZSBBUkdfZXhjZXB0aW9uICgoSlNWYWx1ZSoq
KShBUkdTKVtDVElfQVJHU19leGNlcHRpb25dKQogI2RlZmluZSBBUkdfcHJvZmlsZXJSZWZlcmVu
Y2UgKChQcm9maWxlcioqKShBUkdTKVtDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZV0pCiAjZGVm
aW5lIEFSR19nbG9iYWxEYXRhICgoSlNHbG9iYWxEYXRhKikoQVJHUylbQ1RJX0FSR1NfZ2xvYmFs
RGF0YV0pCiAKLSNkZWZpbmUgQVJHX3NldFIobmV3UikgKCoodm9sYXRpbGUgUmVnaXN0ZXIqKikm
KEFSR1MpW0NUSV9BUkdTX3JdID0gbmV3UikKLSNkZWZpbmUgQVJHX3NldDJuZFJlc3VsdChuZXcy
bmRSZXN1bHQpICgqKHZvbGF0aWxlIEpTVmFsdWUqKikmKEFSR1MpW0NUSV9BUkdTXzJuZFJlc3Vs
dF0gPSBuZXcybmRSZXN1bHQpCisjZGVmaW5lIEFSR19leGVjIENhbGxGcmFtZTo6Y3JlYXRlKEFS
R19yKQorCisjZGVmaW5lIEFSR19zZXRSKG5ld1IpICgqKFJlZ2lzdGVyKiopJihBUkdTKVtDVElf
QVJHU19yXSA9IG5ld1IpCisjZGVmaW5lIEFSR19zZXQybmRSZXN1bHQobmV3Mm5kUmVzdWx0KSAo
KihKU1ZhbHVlKiopJihBUkdTKVtDVElfQVJHU18ybmRSZXN1bHRdID0gbmV3Mm5kUmVzdWx0KQog
CiAjZGVmaW5lIEFSR19zcmMxICgoSlNWYWx1ZSopKChBUkdTKVsxXSkpCiAjZGVmaW5lIEFSR19z
cmMyICgoSlNWYWx1ZSopKChBUkdTKVsyXSkpCkBAIC0yMzQsNyArMjM0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgfTsKIAogICAgIGV4dGVybiAiQyIgewotICAgICAgICBKU1ZhbHVlKiBjdGlU
cmFtcG9saW5lKHZvaWQqIGNvZGUsIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVy
KiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0
YSopOworICAgICAgICBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVy
RmlsZSosIFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVy
KiosIEpTR2xvYmFsRGF0YSopOwogICAgICAgICB2b2lkIGN0aVZNVGhyb3dUcmFtcG9saW5lKCk7
CiAgICAgfTsKIApAQCAtMzIzLDkgKzMyMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIGN0aS5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRk
cmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFsdWUqIGV4ZWN1
dGUodm9pZCogY29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmls
ZSwgUmVnaXN0ZXIqIHIsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSoqIGV4Y2Vw
dGlvbikKKyAgICAgICAgaW5saW5lIHN0YXRpYyBKU1ZhbHVlKiBleGVjdXRlKHZvaWQqIGNvZGUs
IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiB2YWx1ZSA9IGN0aVRyYW1wb2xpbmUoY29kZSwgZXhlYywgcmVnaXN0ZXJGaWxlLCBy
LCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwgZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGN0aVRyYW1wb2xpbmUoY29kZSwg
cmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZl
cmVuY2UoKSwgZ2xvYmFsRGF0YSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgICAg
ICAgICBjdXJyZW50T3Bjb2RlSUQgPSBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oLTEpOwogI2VuZGlm
CkBAIC0zOTMsOCArMzkzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0
VGFnQXNCb29sSW1tZWRpYXRlKFg4NkFzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpOwogCi0gICAg
ICAgIHZvaWQgZW1pdERlYnVnRXhjZXB0aW9uQ2hlY2soKTsKLQogICAgICAgICBYODZBc3NlbWJs
ZXI6OkptcFNyYyBlbWl0Q2FsbCh1bnNpZ25lZCBvcGNvZGVJbmRleCwgWDg2OjpSZWdpc3RlcklE
KTsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgZW1pdENhbGwodW5zaWduZWQgb3Bjb2Rl
SW5kZXgsIENUSUhlbHBlcl9qKTsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgZW1pdENh
bGwodW5zaWduZWQgb3Bjb2RlSW5kZXgsIENUSUhlbHBlcl9wKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L1ZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAzNzI5MCkKKysrIEphdmFTY3JpcHRD
b3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAs
MTcgQEAgc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nJiBzdHJpbmcsIAogCiBjbGFzcyBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBK
U09iamVjdChleGVjLT5nbG9iYWxEYXRhKCkubnVsbFByb3RvU3RydWN0dXJlSUQpCisgICAgSW50
ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgICAg
IDogSlNPYmplY3QoZ2xvYmFsRGF0YS0+bnVsbFByb3RvU3RydWN0dXJlSUQpCiAgICAgewogICAg
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1dhdGNoZG9nRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogfTsKIAotSlNWYWx1ZSogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRp
b25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZXhlYyk7CisgICAgcmV0dXJuIG5ldyAo
Z2xvYmFsRGF0YSkgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKIH0KIAog
SlNWYWx1ZSogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwgY29uc3Qg
Y2hhciogbXNnKQpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNp
b24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDE2ICsyOSwxOSBAQAogI2lmbmRlZiBFeGNlcHRpb25IZWxwZXJzX2gK
ICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgotCiBu
YW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgQ29kZUJsb2NrOwor
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIElu
c3RydWN0aW9uOworICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU05vdEFuT2Jq
ZWN0RXJyb3JTdHViOworICAgIGNsYXNzIEpTT2JqZWN0OworICAgIGNsYXNzIEpTVmFsdWU7Cisg
ICAgY2xhc3MgTm9kZTsKIAotICAgIEpTVmFsdWUqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYyk7CisgICAgSlNWYWx1ZSogY3JlYXRlSW50ZXJydXB0
ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CiAgICAgSlNWYWx1ZSogY3JlYXRl
U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOwogICAgIEpTVmFsdWUqIGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElu
c3RydWN0aW9uKiwgQ29kZUJsb2NrKik7CiAgICAgSlNOb3RBbk9iamVjdEVycm9yU3R1YiogY3Jl
YXRlTm90QW5PYmplY3RFcnJvclN0dWIoRXhlY1N0YXRlKiwgYm9vbCBpc051bGwpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM3MjkwKQorKysgSmF2YVNjcmlwdENvcmUvVk0v
TWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMiwyNCArNTMyLDIwIEBAIE5FVkVSX0lO
TElORSBib29sIE1hY2hpbmU6OnJlc29sdmVCYXNlQW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LUFMV0FZU19JTkxJTkUgUmVnaXN0ZXIqIHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2ssIFJlZ2lzdGVyRmlsZSogcmVnaXN0
ZXJGaWxlLCBSZWdpc3Rlciogciwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJnYywgSlNW
YWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorQUxXQVlTX0lOTElORSBSZWdpc3Rlciogc2xpZGVSZWdp
c3RlcldpbmRvd0ZvckNhbGwoQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2ssIFJlZ2lzdGVyRmlsZSog
cmVnaXN0ZXJGaWxlLCBSZWdpc3Rlciogciwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
YykKIHsKICAgICBSZWdpc3RlciogbmV3RW5kID0gciArIHJlZ2lzdGVyT2Zmc2V0ICsgbmV3Q29k
ZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7CiAKLSAgICBpZiAoYXJnYyA9PSBuZXdDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMpIHsgLy8gY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCi0gICAg
ICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KG5ld0VuZCkpIHsKLSAgICAgICAgICAgIGV4Y2Vw
dGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotICAgICAgICAgICAg
cmV0dXJuIHI7Ci0gICAgICAgIH0KKyAgICBpZiAoTElLRUxZKGFyZ2MgPT0gbmV3Q29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKSkgeyAvLyBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFyZWdpc3RlckZpbGUtPmdyb3cobmV3RW5kKSkpCisgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgciArPSByZWdpc3Rlck9mZnNldDsKICAgICB9IGVsc2UgaWYg
KGFyZ2MgPCBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMpIHsgLy8gdG9vIGZldyBhcmd1bWVu
dHMgLS0gZmlsbCBpbiB0aGUgYmxhbmtzCiAgICAgICAgIHNpemVfdCBvbWl0dGVkQXJnQ291bnQg
PSBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgLSBhcmdjOwogICAgICAgICByZWdpc3Rlck9m
ZnNldCArPSBvbWl0dGVkQXJnQ291bnQ7CiAgICAgICAgIG5ld0VuZCArPSBvbWl0dGVkQXJnQ291
bnQ7Ci0gICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KG5ld0VuZCkpIHsKLSAgICAgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotICAg
ICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFyZWdpc3RlckZpbGUt
Pmdyb3cobmV3RW5kKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByICs9IHJlZ2lz
dGVyT2Zmc2V0OwogCiAgICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gciAtIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG9taXR0ZWRBcmdDb3VudDsKQEAgLTU2MCwxMCArNTU2LDgg
QEAgQUxXQVlTX0lOTElORSBSZWdpc3Rlciogc2xpZGVSZWdpc3RlcldpbgogICAgICAgICByZWdp
c3Rlck9mZnNldCArPSBudW1QYXJhbWV0ZXJzOwogICAgICAgICBuZXdFbmQgKz0gbnVtUGFyYW1l
dGVyczsKIAotICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdFbmQpKSB7Ci0gICAg
ICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsK
LSAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICB9CisgICAgICAgIGlmICghcmVnaXN0ZXJG
aWxlLT5ncm93KG5ld0VuZCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgciArPSBy
ZWdpc3Rlck9mZnNldDsKIAogICAgICAgICBSZWdpc3RlciogYXJndiA9IHIgLSBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJzIC0gYXJnYzsKQEAgLTc2Nyw3
ICs3NjEsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjp1bndpbmRDYWxsRnJhCiAgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSB0aGlzLT5zY29wZUNoYWluKHIpOwogCiAgICAg
aWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVi
dWdnZXIoKSkgewotICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNhbGxGcmFtZShl
eGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGNvZGVCbG9jaywgc2NvcGVDaGFpbiwg
ciwgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNh
bGxGcmFtZShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGNvZGVCbG9jaywgc2NvcGVDaGFp
biwgciwgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBpZiAocltSZWdpc3RlckZpbGU6OkNhbGxl
ZV0uanNWYWx1ZShleGVjKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChkZWJ1
Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGNvZGVCbG9j
ay0+b3duZXJOb2RlLT5sYXN0TGluZSgpKTsKICAgICAgICAgZWxzZQpAQCAtNzk4LDcgKzc5Miw2
IEBAIE5FVkVSX0lOTElORSBib29sIE1hY2hpbmU6OnVud2luZENhbGxGcmEKICAgICBpZiAoaXNI
b3N0Q2FsbEZyYW1lKHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBleGVjLT5tX2Nh
bGxGcmFtZSA9IHI7CiAgICAgY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOwogICAgIHZQ
QyA9IHZQQ0ZvclBDKGNvZGVCbG9jaywgcmV0dXJuUEMpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
ODQ5LDcgKzg0Miw3IEBAIE5FVkVSX0lOTElORSBJbnN0cnVjdGlvbiogTWFjaGluZTo6dGhyb3cK
IAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCktPmRlYnVnZ2VyKCkpIHsKICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSB0
aGlzLT5zY29wZUNoYWluKHIpOwotICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNh
bGxGcmFtZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGNvZGVCbG9jaywgc2Nv
cGVDaGFpbiwgciwgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBk
ZWJ1Z2dlckNhbGxGcmFtZShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGNvZGVCbG9jaywg
c2NvcGVDaGFpbiwgciwgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0
aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwg
Y29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKHZQQykpOwogICAgIH0KIApAQCAtOTA0LDggKzg5
Nyw2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHAKICAgICBpZiAo
Y29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQogICAgICAgICBzY29wZUNoYWluID0gc2Nv
cGVDaGFpbi0+Y29weSgpOwogCi0gICAgRXhlY1N0YXRlIG5ld0V4ZWMocik7Ci0KICAgICBQcm9m
aWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwog
ICAgIGlmICgqcHJvZmlsZXIpCiAgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShleGVj
LCBwcm9ncmFtTm9kZS0+c291cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CkBAIC05
MTQsOSArOTA1LDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShQcm9ncmFtTm9kZSogcAog
I2lmIEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUpCiAgICAgICAgIENU
STo6Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZp
bGUsIHIsICZuZXdFeGVjLmdsb2JhbERhdGEoKSwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZpbGUs
IHIsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7CiAjZWxzZQotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVy
RmlsZSwgciwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0
ZShOb3JtYWwsICZtX3JlZ2lzdGVyRmlsZSwgciwgZXhjZXB0aW9uKTsKICNlbmRpZgogICAgIG1f
cmVlbnRyeURlcHRoLS07CiAKQEAgLTk1OCwxNSArOTQ5LDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICAgICAgYXJndlsrK2RzdF0gPSAqaXQ7CiAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZmdW5jdGlvbkJvZHlOb2RlLT5ieXRlQ29kZShzY29w
ZUNoYWluKTsKLSAgICBSZWdpc3RlciogciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4
ZWMsIGNvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxlLCBhcmd2LCBhcmdjICsgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplLCBhcmdjLCAqZXhjZXB0aW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoKmV4Y2VwdGlvbiAhPSAwKSkgeworICAgIFJlZ2lzdGVyKiByID0gc2xpZGVSZWdpc3Rlcldp
bmRvd0ZvckNhbGwoY29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIGFyZ3YsIGFyZ2MgKyBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIGFyZ2MpOworICAgIGlmIChVTkxJS0VMWSgh
cikpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVj
KTsKICAgICAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKICAgICB9CiAgICAgLy8gYSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWls
dC1pbiBjYWxsZXIKLSAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVCbG9jaywgMCwgc2Nv
cGVDaGFpbiwgbWFrZUhvc3RDYWxsRnJhbWVQb2ludGVyKGV4ZWMtPm1fY2FsbEZyYW1lKSwgMCwg
YXJnYywgZnVuY3Rpb24pOwotCi0gICAgRXhlY1N0YXRlIG5ld0V4ZWMocik7CisgICAgaW5pdGlh
bGl6ZUNhbGxGcmFtZShyLCBjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIG1ha2VIb3N0Q2FsbEZy
YW1lUG9pbnRlcihleGVjLT5yZWdpc3RlcnMoKSksIDAsIGFyZ2MsIGZ1bmN0aW9uKTsKIAogICAg
IFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KCk7CiAgICAgaWYgKCpwcm9maWxlcikKQEAgLTk3Niw5ICs5NjYsOSBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAjaWYgRU5BQkxFKENUSSkKICAgICBpZiAoIWNv
ZGVCbG9jay0+Y3RpQ29kZSkKICAgICAgICAgQ1RJOjpjb21waWxlKHRoaXMsIGV4ZWMsIGNvZGVC
bG9jayk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gQ1RJOjpleGVjdXRlKGNvZGVCbG9jay0+Y3Rp
Q29kZSwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgJm5ld0V4ZWMuZ2xvYmFsRGF0YSgp
LCBleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxv
Y2stPmN0aUNvZGUsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwg
ZXhjZXB0aW9uKTsKICNlbHNlCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUo
Tm9ybWFsLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOworICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBy
LCBleGNlcHRpb24pOwogI2VuZGlmCiAgICAgbV9yZWVudHJ5RGVwdGgtLTsKIApAQCAtMTA0Nywx
MyArMTAzNywxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAK
ICAgICAvLyBhIDAgY29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNhbGxlcgogICAgIHJb
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhpc09iajsKLSAgICBpbml0aWFsaXplQ2FsbEZy
YW1lKHIsIGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgbWFrZUhvc3RDYWxsRnJhbWVQb2ludGVy
KGV4ZWMtPm1fY2FsbEZyYW1lKSwgMCwgMCwgMCk7CisgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShy
LCBjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIG1ha2VIb3N0Q2FsbEZyYW1lUG9pbnRlcihleGVj
LT5yZWdpc3RlcnMoKSksIDAsIDAsIDApOwogCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbikKICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPmNvcHkoKTsKIAot
ICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKHIpOwotCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFBy
b2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQog
ICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoZXhlYywgZXZhbE5vZGUtPnNvdXJjZVVS
TCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwpAQCAtMTA2Miw5ICsxMDUwLDkgQEAgSlNWYWx1ZSog
TWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbAogI2lmIEVOQUJMRShDVEkpCiAgICAgaWYg
KCFjb2RlQmxvY2stPmN0aUNvZGUpCiAgICAgICAgIENUSTo6Y29tcGlsZSh0aGlzLCBleGVjLCBj
b2RlQmxvY2spOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2st
PmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsICZuZXdFeGVjLmdsb2JhbERh
dGEoKSwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29k
ZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4tPmdsb2JhbERh
dGEsIGV4Y2VwdGlvbik7CiAjZWxzZQotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVj
dXRlKE5vcm1hbCwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgZXhjZXB0aW9uKTsKKyAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZtX3JlZ2lzdGVyRmls
ZSwgciwgZXhjZXB0aW9uKTsKICNlbmRpZgogICAgIG1fcmVlbnRyeURlcHRoLS07CiAKQEAgLTEw
ODUsNyArMTA3Myw3IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OmRlYnVnKEV4ZWNTdGEK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOwogICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKLSAgICBEZWJ1
Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNhbGxGcmFtZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCksIGNvZGVCbG9jaywgc2NvcGVDaGFpbiwgciwgMCk7CisgICAgRGVidWdnZXJDYWxs
RnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBjb2Rl
QmxvY2ssIHNjb3BlQ2hhaW4sIHIsIDApOwogCiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewog
ICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgpAQCAtMTQ0Myw2ICsxNDMxLDcgQEAgSlNW
YWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogI2VuZGlmCiAKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwogICAgIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlID0gMDsKICAgICBJbnN0
cnVjdGlvbiogaGFuZGxlclZQQyA9IDA7CiAKQEAgLTE0NTIsOCArMTQ0MSw4IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogI2RlZmluZSBWTV9DSEVDS19FWENF
UFRJT04oKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpIHsgXAotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsgXAorICAgICAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uICE9IDAp
KSB7IFwKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
OyBcCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hp
bGUgKDApCkBAIC0xNTI2LDcgKzE1MTUsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhl
Y3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgIGludCByZWdFeHAgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
IHJbZHN0XSA9IG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KHNjb3BlQ2hhaW4ociktPmdsb2JhbE9i
amVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrKHIpLT5yZWdleHBzW3JlZ0V4cF0p
OworICAgICAgICByW2RzdF0gPSBuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChzY29wZUNo
YWluKHIpLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIGNvZGVCbG9jayhyKS0+
cmVnZXhwc1tyZWdFeHBdKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7
CkBAIC0zMjgzLDEwICszMjcyLDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVnaXN0ZXIqIHNhdmVkUiA9IHI7
CiAKLSAgICAgICAgICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChleGVjLCBuZXdD
b2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgciwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50LCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhjZXB0aW9uVmFsdWUgIT0gMCkpCisgICAgICAgICAgICByID0g
c2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHIs
IHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXIp
KSB7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoQ2FsbEZyYW1lOjpjcmVhdGUoc2F2ZWRSKSk7CiAgICAgICAgICAgICAgICAgZ290byB2
bV90aHJvdzsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFt
ZShyLCBuZXdDb2RlQmxvY2ssIHZQQyArIDEsIGNhbGxEYXRhU2NvcGVDaGFpbiwgc2F2ZWRSLCBk
c3QsIGFyZ0NvdW50LCB2KTsKICAgICAKQEAgLTMzMDgsMjEgKzMyOTgsMjAgQEAgSlNWYWx1ZSog
TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAgICBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7CiAgICAgICAgICAgICBpbml0
aWFsaXplQ2FsbEZyYW1lKHIgKyByZWdpc3Rlck9mZnNldCwgMCwgdlBDICsgMSwgc2NvcGVDaGFp
biwgciwgZHN0LCBhcmdDb3VudCwgdik7Ci0gICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9
IHIgKyByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lID0g
Q2FsbEZyYW1lOjpjcmVhdGUociArIHJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgICAgICAgICAgaWYg
KCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHYpKTsKKyAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxF
eGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CiAKICAgICAgICAg
ICAgIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpOwogCi0gICAgICAgICAg
ICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjLCBz
dGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLCB0aGlzVmFsdWUsIGFyZ3MpOwotICAgICAgICAgICAg
ZXhlYy0+bV9jYWxsRnJhbWUgPSByOworICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUg
PSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KHYpLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAKICAgICAgICAgICAgIHJbZHN0XSA9IHJldHVyblZhbHVlOwogCiAgICAgICAgICAgICBp
ZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
Pih2KSk7CisgICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRF
eGVjdXRlKENhbGxGcmFtZTo6Y3JlYXRlKHIpLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsK
IAogICAgICAgICAgICAgKyt2UEM7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTMzNjYs
MTEgKzMzNTUsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQog
ICAgICAgICB2UEMgPSByW1JlZ2lzdGVyRmlsZTo6UmV0dXJuUENdLnZQQygpOwogICAgICAgICBp
bnQgZHN0ID0gcltSZWdpc3RlckZpbGU6OlJldHVyblZhbHVlUmVnaXN0ZXJdLmkoKTsKICAgICAg
ICAgciA9IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKTsKLSAgICAgICAgZXhl
Yy0+bV9jYWxsRnJhbWUgPSByOwogICAgICAgICAKICAgICAgICAgaWYgKGlzSG9zdENhbGxGcmFt
ZShyKSkKICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIAorICAgICAgICBleGVjID0g
Q2FsbEZyYW1lOjpjcmVhdGUocik7CiAgICAgICAgIHJbZHN0XSA9IHJldHVyblZhbHVlOwogCiAg
ICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzM5OCw3ICszMzg3LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IGNv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpLCBqID0gMDsgaiA8IGNvdW50OyArK2ks
ICsraikKICAgICAgICAgICAgIHJbaV0gPSBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW2pd
OwogCi0gICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoZXhlYykgSlNBY3Rp
dmF0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uQm9keU5vZGUqPihjb2RlQmxvY2stPm93
bmVyTm9kZSksIHIpOworICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGds
b2JhbERhdGEpIEpTQWN0aXZhdGlvbihleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2Rl
Kj4oY29kZUJsb2NrLT5vd25lck5vZGUpLCByKTsKICAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9w
dGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0gPSBhY3RpdmF0aW9uOwogICAgICAgICByW1JlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbl0gPSBzY29wZUNoYWluKHIpLT5jb3B5KCktPnB1c2goYWN0aXZhdGlv
bik7CiAKQEAgLTM0MTksOSArMzQwOCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGkKICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHM7CiAgICAgICAgIGlmIChh
Y3RpdmF0aW9uKSB7CiAgICAgICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpT
QWN0aXZhdGlvbjo6aW5mbykpOwotICAgICAgICAgICAgYXJndW1lbnRzID0gbmV3IChleGVjKSBB
cmd1bWVudHMoZXhlYywgc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOwor
ICAgICAgICAgICAgYXJndW1lbnRzID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoZXhlYywg
c3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGFyZ3VtZW50cyA9IG5ldyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHIpOwor
ICAgICAgICAgICAgYXJndW1lbnRzID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoZXhlYywg
cik7CiAgICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBh
cmd1bWVudHM7CiAgICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBh
cmd1bWVudHM7CiAgICAgICAgIApAQCAtMzQ2OSwxNiArMzQ1OCwxOCBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihwcm90b3R5cGUpLT5pbmhlcml0b3JJRCgpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGNhbGxEYXRhU2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBK
U09iamVjdCogbmV3T2JqZWN0ID0gbmV3IChleGVjKSBKU09iamVjdChzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNPYmplY3Qo
c3RydWN0dXJlKTsKIAogICAgICAgICAgICAgcltmaXJzdEFyZ10gPSBuZXdPYmplY3Q7IC8vICJ0
aGlzIiB2YWx1ZQogCiAgICAgICAgICAgICBSZWdpc3Rlciogc2F2ZWRSID0gcjsKIAotICAgICAg
ICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0NvZGVCbG9jaywg
cmVnaXN0ZXJGaWxlLCByLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQsIGV4Y2VwdGlvblZhbHVl
KTsKLSAgICAgICAgICAgIGV4ZWMtPm1fY2FsbEZyYW1lID0gcjsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWShleGNlcHRpb25WYWx1ZSAhPSAwKSkKKyAgICAgICAgICAgIHIgPSBzbGlkZVJlZ2lz
dGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgciwgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ0NvdW50KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcikpIHsKKyAgICAg
ICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihDYWxs
RnJhbWU6OmNyZWF0ZShzYXZlZFIpKTsKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhlYyA9IENhbGxGcmFtZTo6Y3JlYXRlKHIpOwog
CiAgICAgICAgICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIG5ld0NvZGVCbG9jaywgdlBDICsg
MSwgY2FsbERhdGFTY29wZUNoYWluLCBzYXZlZFIsIGRzdCwgYXJnQ291bnQsIHYpOwogICAgIApA
QCAtMzQ5OSw3ICszNDkwLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogCiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNj
b3BlQ2hhaW4ocik7CiAgICAgICAgICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIgKyByZWdpc3Rl
ck9mZnNldCwgMCwgdlBDICsgMSwgc2NvcGVDaGFpbiwgciwgZHN0LCBhcmdDb3VudCwgdik7Ci0g
ICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHIgKyByZWdpc3Rlck9mZnNldDsKKyAgICAg
ICAgICAgIGV4ZWMgPSBDYWxsRnJhbWU6OmNyZWF0ZShyICsgcmVnaXN0ZXJPZmZzZXQpOwogCiAg
ICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKICAgICAgICAgICAgICAg
ICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4odikpOwpAQCAtMzUwNyw3ICszNDk4LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgTUFDSElORV9TQU1QTElOR19j
YWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAKICAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVl
ID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPih2KSwgYXJncyk7Ci0gICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7CisgICAg
ICAgICAgICBleGVjID0gQ2FsbEZyYW1lOjpjcmVhdGUocik7CiAKICAgICAgICAgICAgIFZNX0NI
RUNLX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgcltkc3RdID0gcmV0dXJuVmFsdWU7CkBAIC0z
ODI3LDExICszODE4LDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQogICAgIHZtX3Rocm93OiB7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9
IDA7CiAgICAgICAgIGlmICghdGlja0NvdW50KSB7CiAgICAgICAgICAgICAvLyBUaGUgZXhjZXB0
aW9uVmFsdWUgaXMgYSBsaWUhIChHQ0MgcHJvZHVjZXMgYmFkIGNvZGUgZm9yIHJlYXNvbnMgSSAK
ICAgICAgICAgICAgIC8vIGNhbm5vdCBmYXRob20gaWYgd2UgZG9uJ3QgYXNzaWduIHRvIHRoZSBl
eGNlcHRpb25WYWx1ZSBiZWZvcmUgYnJhbmNoaW5nKQotICAgICAgICAgICAgZXhjZXB0aW9uVmFs
dWUgPSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGVjKTsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24o
Z2xvYmFsRGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgaGFuZGxlclZQQyA9IHRocm93RXhjZXB0
aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UEMsIHIsIGZhbHNlKTsKICAgICAgICAgaWYgKCFo
YW5kbGVyVlBDKSB7CkBAIC0zOTAwLDcgKzM4OTEsNyBAQCB2b2lkIE1hY2hpbmU6OnJldHJpZXZl
TGFzdENhbGxlcihFeGVjU3RhCiAgICAgbGluZU51bWJlciA9IC0xOwogICAgIHNvdXJjZVVSTCA9
IFVTdHJpbmcoKTsKIAotICAgIFJlZ2lzdGVyKiByID0gZXhlYy0+bV9jYWxsRnJhbWU7CisgICAg
UmVnaXN0ZXIqIHIgPSBleGVjLT5yZWdpc3RlcnMoKTsKICAgICBSZWdpc3RlciogY2FsbGVyUiA9
IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKTsKICAgICBpZiAoaXNIb3N0Q2Fs
bEZyYW1lKGNhbGxlclIpKQogICAgICAgICByZXR1cm47CkBAIC0zOTMxLDcgKzM5MjIsNyBAQCBj
b25zdCBSZWdpc3RlciogTWFjaGluZTo6Zmlyc3RDYWxsRnJhbWUoCiAKIFJlZ2lzdGVyKiBNYWNo
aW5lOjpjYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlv
bikgY29uc3QKIHsKLSAgICBmb3IgKFJlZ2lzdGVyKiByID0gZXhlYy0+bV9jYWxsRnJhbWU7IHI7
IHIgPSBzdHJpcEhvc3RDYWxsRnJhbWVCaXQocltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVy
c10ucigpKSkKKyAgICBmb3IgKFJlZ2lzdGVyKiByID0gZXhlYy0+cmVnaXN0ZXJzKCk7IHI7IHIg
PSBzdHJpcEhvc3RDYWxsRnJhbWVCaXQocltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10u
cigpKSkKICAgICAgICAgaWYgKHJbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmdldEpTVmFsdWUoKSA9
PSBmdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiByOwogICAgIHJldHVybiAwOwpAQCAtMzk1
OSw3ICszOTUwLDcgQEAgdm9pZCBNYWNoaW5lOjpnZXRBcmd1bWVudHNEYXRhKFJlZ2lzdGVyKgog
CiBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgZG9TZXRSZXR1cm5BZGRyZXNzVk1UaHJvd1RyYW1w
b2xpbmUodm9pZCoqIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgY3RpU2V0UmV0dXJuQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLCAodm9pZCopY3RpVk1UaHJvd1RyYW1wb2xpbmUpOworICAgIGN0aVNldFJl
dHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpVk1U
aHJvd1RyYW1wb2xpbmUpKTsKIH0KIAogTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJ
Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQq
IHJldHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90KQpAQCAtNDE3NCw0MiArNDE2NSw0MyBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5l
Ojp0cnlDVElDYWNoZUdlCiAgICAgQ1RJOjpjb21waWxlR2V0QnlJZENoYWluKHRoaXMsIGV4ZWMs
IGNvZGVCbG9jaywgc3RydWN0dXJlSUQsIGNoYWluLCBjb3VudCwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcmV0dXJuQWRkcmVzcyk7CiB9CiAKLQotI2RlZmluZSBKU1ZBTFVFX1ZNX0NIRUNLX0VYQ0VQ
VElPTl9BUkcoZXhjZXB0aW9uKSBcCisjZGVmaW5lIFZNX1RIUk9XX0VYQ0VQVElPTigpIFwKICAg
ICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4Y2VwdGlvbiAhPSAwKSkgeyBcCi0gICAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgXAotICAgICAgICAgICAgZXhl
Yy0+c2V0Q1RJUmV0dXJuQWRkcmVzcyhDVElfUkVUVVJOX0FERFJFU1MpOyBcCi0gICAgICAgICAg
ICBkb1NldFJldHVybkFkZHJlc3NWTVRocm93VHJhbXBvbGluZSgmQ1RJX1JFVFVSTl9BRERSRVNT
KTsgXAotICAgICAgICAgICAgcmV0dXJuIDA7IFwKLSAgICAgICAgfSBcCisgICAgICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsgXAorICAgICAgICByZXR1cm4gMDsgXAogICAgIH0gd2hp
bGUgKDApCi0jZGVmaW5lIFZNX0NIRUNLX0VYQ0VQVElPTl92KCkgXAorI2RlZmluZSBWTV9USFJP
V19FWENFUFRJT05fQVRfRU5EKCkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7IFwKLSAgICAgICAgICAgIGV4ZWMtPnNldENUSVJldHVy
bkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTKTsgXAotICAgICAgICAgICAgZG9TZXRSZXR1cm5B
ZGRyZXNzVk1UaHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwKLSAgICAgICAg
ICAgIHJldHVybjsgXAotICAgICAgICB9IFwKKyAgICAgICAgQVNTRVJUKEFSR19nbG9iYWxEYXRh
LT5leGNlcHRpb24pOyBcCisgICAgICAgIEFSR19nbG9iYWxEYXRhLT50aHJvd1JldHVybkFkZHJl
c3MgPSBDVElfUkVUVVJOX0FERFJFU1M7IFwKKyAgICAgICAgZG9TZXRSZXR1cm5BZGRyZXNzVk1U
aHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwKKyAgICB9IHdoaWxlICgwKQor
CisjZGVmaW5lIFZNX0NIRUNLX0VYQ0VQVElPTigpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYg
KFVOTElLRUxZKEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gIT0gMCkpIFwKKyAgICAgICAgICAg
IFZNX1RIUk9XX0VYQ0VQVElPTigpOyBcCiAgICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgVk1fQ0hF
Q0tfRVhDRVBUSU9OKHR5cGUpIFwKKyNkZWZpbmUgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FSRyhleGNl
cHRpb25WYWx1ZSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKSB7IFwKLSAgICAgICAgICAgIGV4ZWMtPnNldENUSVJldHVybkFkZHJlc3Mo
Q1RJX1JFVFVSTl9BRERSRVNTKTsgXAotICAgICAgICAgICAgZG9TZXRSZXR1cm5BZGRyZXNzVk1U
aHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwKLSAgICAgICAgICAgIHJldHVy
biAodHlwZSkwOyBcCisgICAgICAgIGlmIChVTkxJS0VMWSgoZXhjZXB0aW9uVmFsdWUpICE9IDAp
KSB7IFwKKyAgICAgICAgICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSAoZXhjZXB0aW9u
VmFsdWUpOyBcCisgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsgXAogICAgICAgICB9
IFwKICAgICB9IHdoaWxlICgwKQogI2RlZmluZSBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCkg
XAogICAgIGRvIHsgXAotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KSB7IFwKLSAgICAgICAgICAgIC8qcHJpbnRmKCJWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKClc
biIpOyovIFwKLSAgICAgICAgICAgIGV4ZWMtPnNldENUSVJldHVybkFkZHJlc3MoQ1RJX1JFVFVS
Tl9BRERSRVNTKTsgXAotICAgICAgICAgICAgZG9TZXRSZXR1cm5BZGRyZXNzVk1UaHJvd1RyYW1w
b2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKEFSR19n
bG9iYWxEYXRhLT5leGNlcHRpb24gIT0gMCkpIFwKKyAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQ
VElPTl9BVF9FTkQoKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFZNX0NIRUNLX0VYQ0VQ
VElPTl9WT0lEKCkgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoVU5MSUtFTFkoQVJHX2dsb2Jh
bERhdGEtPmV4Y2VwdGlvbiAhPSAwKSkgeyBcCisgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJ
T05fQVRfRU5EKCk7IFwKKyAgICAgICAgICAgIHJldHVybjsgXAogICAgICAgICB9IFwKICAgICB9
IHdoaWxlICgwKQogCi0KIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jb252ZXJ0X3RoaXMoQ1RJ
X0FSR1MpCiB7CiAgICAgSlNWYWx1ZSogdjEgPSBBUkdfc3JjMTsKQEAgLTQyNDYsOSArNDIzOCw4
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9hZGQoQ1RJX0FSR1MpCiAgICAgaWYgKGxlZnRJ
c1N0cmluZyAmJiB2Mi0+aXNTdHJpbmcoKSkgewogICAgICAgICBSZWZQdHI8VVN0cmluZzo6UmVw
PiB2YWx1ZSA9IGNvbmNhdGVuYXRlKHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odjEpLT52YWx1ZSgp
LnJlcCgpLCBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHYyKS0+dmFsdWUoKS5yZXAoKSk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghdmFsdWUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICBWTV9DSEVDS19FWENF
UFRJT05fQVRfRU5EKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBU
SU9OKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4ganNTdHJpbmcoQVJHX2dsb2JhbERh
dGEsIHZhbHVlLnJlbGVhc2UoKSk7CkBAIC00MjYwLDkgKzQyNTEsOCBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfYWRkKENUSV9BUkdTKQogICAgICAgICAgICAgY29uY2F0ZW5hdGUoc3RhdGlj
X2Nhc3Q8SlNTdHJpbmcqPih2MSktPnZhbHVlKCkucmVwKCksIHJpZ2h0KTsKIAogICAgICAgICBp
ZiAoVU5MSUtFTFkoIXZhbHVlKSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
X0FUX0VORCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBqc1N0cmluZyhBUkdfZ2xvYmFsRGF0YSwgdmFs
dWUucmVsZWFzZSgpKTsKICAgICB9CkBAIC00Mjc4LDE5ICs0MjY4LDE3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OmN0aV9vcF9wcmVfaW5jKENUSV9BUkcKICAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSArIDEpOworICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJlcihleGVjKSArIDEpOwog
ICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIE1hY2hpbmU6OmN0aV90aW1lb3V0X2NoZWNrKENUSV9BUkdTKQogewotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IEFSR19leGVjOwotCi0gICAgaWYgKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5l
LT5jaGVja1RpbWVvdXQoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSkKLSAgICAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMp
KTsKLQotICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBpZiAoQVJHX2dsb2Jh
bERhdGEtPm1hY2hpbmUtPmNoZWNrVGltZW91dChBUkdfZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpKSkgeworICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oQVJHX2dsb2JhbERhdGEpOworICAgICAgICBWTV9USFJP
V19FWENFUFRJT05fQVRfRU5EKCk7CisgICAgfQogfQogCiBpbnQgTWFjaGluZTo6Y3RpX29wX2xv
b3BfaWZfbGVzcyhDVElfQVJHUykKQEAgLTQ0NTMsOCArNDQ0MSw4IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9pbnN0YW5jZW9mKENUSV8KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBNYWNoaW5lOjpjb2RlQmxvY2socik7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJl
dHVybkFkZHJlc3NWUENNYXAuY29udGFpbnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7CiAgICAgICAg
IHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdl
dChDVElfUkVUVVJOX0FERFJFU1MpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBiYXNlVmFsLCBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jaykpOwotICAgICAgICBW
TV9DSEVDS19FWENFUFRJT04oSlNWYWx1ZSopOworICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBiYXNl
VmFsLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9j
ayk7CisgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0KIAogICAgIGlmICghYmFz
ZUNlbGwtPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3RhbmNlKCkp
CkBAIC00NDYyLDcgKzQ0NTAsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5zdGFuY2Vv
ZihDVElfCiAKICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yLCAiaW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2JqZWN0IHdpdGgg
YW4gaW52YWxpZCBwcm90b3R5cGUgcHJvcGVydHkuIik7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTihKU1ZhbHVlKik7CisgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0KICAg
ICAgICAgCiAgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSkKQEAgLTQ1MDQsNTEgKzQ0OTIsMzgg
QEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX211bChDVElfQVJHUykKIAogSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX25ld19mdW5jKENUSV9BUkdTKQogewotICAgIFJlZ2lzdGVyKiByID0gQVJH
X3I7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBNYWNoaW5lOjpzY29wZUNoYWlu
KHIpOwotICAgIHJldHVybiBBUkdfZnVuYzEtPm1ha2VGdW5jdGlvbihBUkdfZXhlYywgc2NvcGVD
aGFpbik7CisgICAgcmV0dXJuIEFSR19mdW5jMS0+bWFrZUZ1bmN0aW9uKEFSR19leGVjLCBNYWNo
aW5lOjpzY29wZUNoYWluKEFSR19yKSk7CiB9CiAKIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF9jYWxs
X0pTRnVuY3Rpb24oQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7
Ci0gICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUgPSBBUkdfcmVnaXN0ZXJGaWxlOwotICAg
IFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0KLSAgICBKU1ZhbHVlKiBmdW5jVmFsID0gQVJHX3NyYzE7
Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gQVJHX2ludDI7Ci0gICAgaW50IGFyZ0NvdW50ID0g
QVJHX2ludDM7Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAg
QVNTRVJUKGZ1bmNWYWwtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZUpTKTsKKyAg
ICBBU1NFUlQoQVJHX3NyYzEtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZUpTKTsK
ICNlbmRpZgogCi0gICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICgqQVJH
X3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPihmdW5jVmFsKSk7CisgICAgaWYgKFVOTElLRUxZKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2Ug
IT0gMCkpCisgICAgICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoQ2Fs
bEZyYW1lOjpjcmVhdGUoQVJHX3IpLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KEFSR19zcmMxKSk7
CiAKLSAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gc3RhdGljX2Nhc3Q8
SlNGdW5jdGlvbio+KGZ1bmNWYWwpLT5tX3Njb3BlQ2hhaW4ubm9kZSgpOwotICAgIEZ1bmN0aW9u
Qm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUgPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oZnVu
Y1ZhbCktPm1fYm9keS5nZXQoKTsKKyAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNo
YWluID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KEFSR19zcmMxKS0+bV9zY29wZUNoYWluLm5v
ZGUoKTsKKyAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZzdGF0aWNfY2FzdDxKU0Z1bmN0
aW9uKj4oQVJHX3NyYzEpLT5tX2JvZHktPmJ5dGVDb2RlKGNhbGxEYXRhU2NvcGVDaGFpbik7CiAK
LSAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZmdW5jdGlvbkJvZHlOb2RlLT5ieXRlQ29k
ZShjYWxsRGF0YVNjb3BlQ2hhaW4pOwotICAgIAotICAgIFJlZ2lzdGVyKiBzYXZlZFIgPSByOwot
Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSAwOwotICAgIHIgPSBzbGlkZVJlZ2lzdGVy
V2luZG93Rm9yQ2FsbChleGVjLCBuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgciwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ0NvdW50LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgSlNWQUxVRV9WTV9DSEVD
S19FWENFUFRJT05fQVJHKGV4Y2VwdGlvblZhbHVlKTsKKyAgICBSZWdpc3RlciogciA9IHNsaWRl
UmVnaXN0ZXJXaW5kb3dGb3JDYWxsKG5ld0NvZGVCbG9jaywgQVJHX3JlZ2lzdGVyRmlsZSwgQVJH
X3IsIEFSR19pbnQyLCBBUkdfaW50Myk7CisgICAgaWYgKFVOTElLRUxZKCFyKSkgeworICAgICAg
ICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKENh
bGxGcmFtZTo6Y3JlYXRlKEFSR19yKSk7CisgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwor
ICAgIH0KIAogICAgIHJbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdID0gbmV3Q29kZUJsb2NrOwog
ICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IGNhbGxEYXRhU2NvcGVDaGFpbjsKLSAg
ICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXSA9IHNhdmVkUjsKKyAgICByW1JlZ2lz
dGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXSA9IEFSR19yOwogICAgIC8vIFJlZ2lzdGVyRmlsZTo6
UmV0dXJuUEMgaXMgc2V0IGJ5IGNhbGxlZQogICAgIC8vIFJlZ2lzdGVyRmlsZTo6UmV0dXJuVmFs
dWVSZWdpc3RlciBpcyBzZXQgYnkgY2FsbGVyCi0gICAgcltSZWdpc3RlckZpbGU6OkFyZ3VtZW50
Q291bnRdID0gYXJnQ291bnQ7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNh
a2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKLSAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVl
XSA9IGZ1bmNWYWw7CisgICAgcltSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnRdID0gQVJHX2lu
dDM7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1
bWVudHMiIG9iamVjdCkKKyAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXSA9IEFSR19zcmMxOwog
ICAgIHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dID0gbnVsbEpTVmFs
dWU7CiAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IG51bGxK
U1ZhbHVlOwogCi0gICAgZXhlYy0+bV9jYWxsRnJhbWUgPSByOwogICAgIEFSR19zZXRSKHIpOwog
CiAgICAgcmV0dXJuIG5ld0NvZGVCbG9jay0+Y3RpQ29kZTsKQEAgLTQ1NTYsMTIgKzQ1MzEsMTEg
QEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbihDVAogCiB2b2lkKiBNYWNo
aW5lOjpjdGlfdm1fY29tcGlsZShDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBB
UkdfZXhlYzsKICAgICBSZWdpc3RlciogciA9IEFSR19yOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gTWFjaGluZTo6Y29kZUJsb2NrKHIpOwogCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNv
ZGUpCi0gICAgICAgIENUSTo6Y29tcGlsZShBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZSwgZXhlYywg
Y29kZUJsb2NrKTsKKyAgICAgICAgQ1RJOjpjb21waWxlKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5l
LCBDYWxsRnJhbWU6OmNyZWF0ZShyKSwgY29kZUJsb2NrKTsKIAogICAgIHJldHVybiBjb2RlQmxv
Y2stPmN0aUNvZGU7CiB9CkBAIC00NTczLDE0ICs0NTQ3LDEzIEBAIHZvaWQgTWFjaGluZTo6Y3Rp
X29wX3B1c2hfYWN0aXZhdGlvbihDVEkKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IE1hY2hp
bmU6OmNvZGVCbG9jayhyKTsKICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IE1hY2hp
bmU6OnNjb3BlQ2hhaW4ocik7CiAKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcg
KGV4ZWMpIEpTQWN0aXZhdGlvbihleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2RlKj4o
Y29kZUJsb2NrLT5vd25lck5vZGUpLCByKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBuZXcgKEFSR19nbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24oZXhlYywgc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Cb2R5Tm9kZSo+KGNvZGVCbG9jay0+b3duZXJOb2RlKSwgcik7CiAgICAgcltSZWdpc3Rl
ckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0gPSBhY3RpdmF0aW9uOwogICAgIHJbUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW4tPmNvcHkoKS0+cHVzaChhY3RpdmF0
aW9uKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbihD
VElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKICAgICBKU1ZhbHVl
KiBmdW5jVmFsID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTQ1OTUs
MzQgKzQ1NjgsMzAgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdAog
ICAgICAgICBSZWdpc3RlciogciA9IHNhdmVkUiArIHJlZ2lzdGVyT2Zmc2V0OwogCiAgICAgICAg
IGluaXRpYWxpemVDYWxsRnJhbWUociwgMCwgQVJHX2luc3RyNCArIDEsIHNjb3BlQ2hhaW4oc2F2
ZWRSKSwgc2F2ZWRSLCAwLCBhcmdDb3VudCwgZnVuY1ZhbCk7Ci0gICAgICAgIGV4ZWMtPm1fY2Fs
bEZyYW1lID0gcjsKICAgICAgICAgQVJHX3NldFIocik7CiAKICAgICAgICAgaWYgKCpBUkdfcHJv
ZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPndp
bGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZnVuY1ZhbCkpOworICAgICAg
ICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShDYWxsRnJhbWU6OmNy
ZWF0ZShyKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKSk7CiAKICAgICAgICAgUmVn
aXN0ZXIqIGFyZ3YgPSByIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJn
Q291bnQ7CiAgICAgICAgIEFyZ0xpc3QgYXJnTGlzdChhcmd2ICsgMSwgYXJnQ291bnQgLSAxKTsK
IAogICAgICAgICBDVElfTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAK
LSAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24o
ZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKSwgYXJndlswXS5qc1ZhbHVlKGV4
ZWMpLCBhcmdMaXN0KTsKLSAgICAgICAgZXhlYy0+bV9jYWxsRnJhbWUgPSBzYXZlZFI7CisgICAg
ICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKENhbGxG
cmFtZTo6Y3JlYXRlKHIpLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1bmNWYWwpLCBhcmd2WzBd
LmpzVmFsdWUoQ2FsbEZyYW1lOjpjcmVhdGUocikpLCBhcmdMaXN0KTsKICAgICAgICAgQVJHX3Nl
dFIoc2F2ZWRSKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKEpTVmFsdWUqKTsKKyAgICAg
ICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZl
cmVuY2UpCi0gICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUo
ZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKSk7CisgICAgICAgICAgICAoKkFS
R19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoQ2FsbEZyYW1lOjpjcmVhdGUoc2F2ZWRS
KSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKSk7CiAKICAgICAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOwogICAgIH0KIAogICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUp
OwogCi0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oY3Jl
YXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgZnVuY1ZhbCwgQVJHX2luc3RyNCwgY29kZUJsb2Nr
KHIpKSk7Ci0gICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiAwOwor
ICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihD
YWxsRnJhbWU6OmNyZWF0ZShBUkdfciksIGZ1bmNWYWwsIEFSR19pbnN0cjQsIGNvZGVCbG9jayhB
UkdfcikpOworICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0
aV9vcF9pbml0X2FyZ3VtZW50cyhDVElfQVJHUykKQEAgLTQ2MzQsOSArNDYwMyw5IEBAIHZvaWQg
TWFjaGluZTo6Y3RpX29wX2luaXRfYXJndW1lbnRzKENUSV8KICAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50czsKICAgICBpZiAoYWN0aXZhdGlvbikgewogICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+
aXNPYmplY3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwotICAgICAgICBhcmd1bWVudHMgPSBuZXcg
KGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0
aW9uKSk7CisgICAgICAgIGFyZ3VtZW50cyA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEFyZ3VtZW50
cyhleGVjLCBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGFyZ3VtZW50cyA9IG5ldyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHIpOwor
ICAgICAgICBhcmd1bWVudHMgPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBBcmd1bWVudHMoZXhlYywg
cik7CiAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IGFyZ3Vt
ZW50czsKICAgICByW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVnaXN0ZXJdID0gYXJndW1lbnRz
OwogfQpAQCAtNDcwMywxNCArNDY3MiwxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVz
b2x2ZShDVElfQVJHCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01h
cC5jb250YWlucyhDVElfUkVUVVJOX0FERFJFU1MpKTsKICAgICB1bnNpZ25lZCB2UENJbmRleCA9
IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNT
KTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCBj
b2RlQmxvY2spKTsKLQotICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1
cm4gMDsKKyAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAogdm9pZCogTWFjaGluZTo6Y3Rp
X29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBBUkdfZXhlYzsKICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSA9IEFSR19yZWdp
c3RlckZpbGU7CiAgICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKIApAQCAtNDcyOCw3ICs0Njk0LDcg
QEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cgogICAgIEpTRnVuY3Rp
b24qIGNvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0clZhbCk7CiAK
ICAgICBpZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgKCpBUkdfcHJvZmlsZXJS
ZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShleGVjLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICgqQVJH
X3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoQ2FsbEZyYW1lOjpjcmVhdGUociksIGNv
bnN0cnVjdG9yKTsKIAogICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBj
b25zdHJ1Y3Rvci0+bV9zY29wZUNoYWluLm5vZGUoKTsKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBm
dW5jdGlvbkJvZHlOb2RlID0gY29uc3RydWN0b3ItPm1fYm9keS5nZXQoKTsKQEAgLTQ3MzksMTkg
KzQ3MDUsMTkgQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cgogICAg
ICAgICBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGNvbnN0clByb3RvVmFsKS0+
aW5oZXJpdG9ySUQoKTsKICAgICBlbHNlCiAgICAgICAgIHN0cnVjdHVyZSA9IGNhbGxEYXRhU2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgSlNP
YmplY3QqIG5ld09iamVjdCA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKKyAgICBK
U09iamVjdCogbmV3T2JqZWN0ID0gbmV3IChBUkdfZ2xvYmFsRGF0YSkgSlNPYmplY3Qoc3RydWN0
dXJlKTsKIAogICAgIHJbZmlyc3RBcmddID0gbmV3T2JqZWN0OyAvLyAidGhpcyIgdmFsdWUKIAot
ICAgIFJlZ2lzdGVyKiBzYXZlZFIgPSByOwotCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUg
PSAwOwotICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChleGVjLCBuZXdDb2RlQmxv
Y2ssIHJlZ2lzdGVyRmlsZSwgciwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50LCBleGNlcHRpb25W
YWx1ZSk7Ci0gICAgSlNWQUxVRV9WTV9DSEVDS19FWENFUFRJT05fQVJHKGV4Y2VwdGlvblZhbHVl
KTsKKyAgICByID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdp
c3RlckZpbGUsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCk7CisgICAgaWYgKFVOTElLRUxZ
KCFyKSkgeworICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKENhbGxGcmFtZTo6Y3JlYXRlKEFSR19yKSk7CisgICAgICAgIFZNX1RIUk9X
X0VYQ0VQVElPTigpOworICAgIH0KIAogICAgIHJbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdID0g
bmV3Q29kZUJsb2NrOwogICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IGNhbGxEYXRh
U2NvcGVDaGFpbjsKLSAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXSA9IHNhdmVk
UjsKKyAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXSA9IEFSR19yOwogICAgIC8v
IFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMgaXMgc2V0IGJ5IGNhbGxlZQogICAgIC8vIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuVmFsdWVSZWdpc3RlciBpcyBzZXQgYnkgY2FsbGVyCiAgICAgcltSZWdpc3Rl
ckZpbGU6OkFyZ3VtZW50Q291bnRdID0gYXJnQ291bnQ7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNv
dW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKQEAgLTQ3NTksOCAr
NDcyNSw2IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHIKICAgICBy
W1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9IG51bGxKU1ZhbHVlOwog
ICAgIHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBudWxsSlNWYWx1
ZTsKIAotICAgIGV4ZWMtPm1fY2FsbEZyYW1lID0gcjsKLQogICAgIEFSR19zZXRSKHIpOwogICAg
IHJldHVybiBuZXdDb2RlQmxvY2stPmN0aUNvZGU7CiB9CkBAIC00Nzg4LDcgKzQ3NTIsNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTCiAgICAgICAgIENUSV9NQUNI
SU5FX1NBTVBMSU5HX2NhbGxpbmdIb3N0RnVuY3Rpb24oKTsKIAogICAgICAgICBKU1ZhbHVlKiBy
ZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIGNvbnN0cnVj
dG9yLCBhcmdMaXN0KTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKEpTVmFsdWUqKTsKKyAg
ICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJS
ZWZlcmVuY2UpCiAgICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1
dGUoZXhlYywgY29uc3RydWN0b3IpOwpAQCAtNDc5OSw4ICs0NzYzLDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKUwogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09
IENvbnN0cnVjdFR5cGVOb25lKTsKIAogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVOb3RB
Q29uc3RydWN0b3JFcnJvcihleGVjLCBjb25zdHJWYWwsIEFSR19pbnN0cjYsIGNvZGVCbG9jayhy
KSkpOwotICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gMDsKKyAg
ICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dl
dF9ieV92YWwoQ1RJX0FSR1MpCkBAIC00ODc1LDkgKzQ4MzgsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfcmVzb2x2ZV9mdW5jKENUCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJu
QWRkcmVzc1ZQQ01hcC5jb250YWlucyhDVElfUkVUVVJOX0FERFJFU1MpKTsKICAgICB1bnNpZ25l
ZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JF
VFVSTl9BRERSRVNTKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlVW5kZWZpbmVkVmFy
aWFibGVFcnJvcihleGVjLCBpZGVudCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSAr
IHZQQ0luZGV4LCBjb2RlQmxvY2spKTsKLQotICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQo
KTsKLSAgICByZXR1cm4gMDsKKyAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAogSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX3N1YihDVElfQVJHUykKQEAgLTQ5MTksNyArNDg4MCw3IEBAIHZv
aWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWwoQ1RJX0FSR1MKICAgICAgICAgICAgIGJhc2VW
YWx1ZS0+cHV0KGV4ZWMsIGksIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBJZGVudGlm
aWVyIHByb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIUFSR19nbG9iYWxEYXRh
LT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJl
dyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAg
ICAgICAgIGJhc2VWYWx1ZS0+cHV0KGV4ZWMsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAg
ICAgIH0KQEAgLTQ5NDMsNyArNDkwNCw3IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92
YWxfYXJyYXkoQ1QKICAgICBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVj
LCBKU0ltbWVkaWF0ZTo6ZnJvbShpKS0+dG9TdHJpbmcoZXhlYykpOwogICAgICAgICAvLyBGSVhN
RTogY2FuIHRvU3RyaW5nIHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlPwotICAgICAgICBpZiAoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJp
bmcgdGhyZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIUFSR19nbG9iYWxEYXRhLT5leGNl
cHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBl
eGNlcHRpb24uCiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAg
IGJhc2VWYWx1ZS0+cHV0KGV4ZWMsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0K
QEAgLTUwMjAsOSArNDk4MSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX3Nr
aXAoQ1QKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRh
aW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJs
b2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwogICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9j
aykpOwotCi0gICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiAwOwor
ICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bf
cmVzb2x2ZV9nbG9iYWwoQ1RJX0FSR1MpCkBAIC01MDUwLDEwICs1MDA5LDggQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfZ2xvYmFsKAogICAgIH0KICAgICAKICAgICBSZWdpc3Rl
ciogciA9IEFSR19yOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIGlkZW50LCB2UEMsIGNvZGVCbG9jayhyKSkpOwotICAgIAotICAgIFZN
X0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBleGVjLT5zZXRF
eGNlcHRpb24oY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCwgdlBDLCBj
b2RlQmxvY2socikpKTsgICAgCisgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKIEpTVmFs
dWUqIE1hY2hpbmU6OmN0aV9vcF9kaXYoQ1RJX0FSR1MpCkBAIC01MTIyLDcgKzUwNzksNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcG9zdF9pbmMoQ1RJX0FSCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gQVJHX2V4ZWM7CiAKICAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGV4
ZWMpOwotICAgIFZNX0NIRUNLX0VYQ0VQVElPTihKU1ZhbHVlKik7CisgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OKCk7CiAgICAgQVJHX3NldDJuZFJlc3VsdChqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwg
bnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpKTsKICAgICByZXR1cm4gbnVtYmVyOwog
fQpAQCAtNTIzNyw5ICs1MTk0LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVf
d2l0aF9iYQogICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuY29u
dGFpbnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7CiAgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2Rl
QmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CiAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywg
aWRlbnQsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJs
b2NrKSk7Ci0KLSAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIDA7
CisgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9uZXdfZnVuY19leHAoQ1RJX0FSR1MpCkBAIC01Mjg3LDcgKzUyNDIsNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpjdGlfb3BfcG9zdF9kZWMoQ1RJX0FSCiAgICAgRXhlY1N0YXRlKiBleGVjID0gQVJH
X2V4ZWM7CiAKICAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAg
IFZNX0NIRUNLX0VYQ0VQVElPTihKU1ZhbHVlKik7CisgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAKICAgICBBUkdfc2V0Mm5kUmVzdWx0KGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBudW1iZXIt
PnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSkpOwogICAgIHJldHVybiBudW1iZXI7CkBAIC01MzIz
LDcgKzUyNzgsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0eG9yKENUSV9BUkdTCiAK
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfcmVnZXhwKENUSV9BUkdTKQogewotICAgIHJl
dHVybiBuZXcgKEFSR19leGVjKSBSZWdFeHBPYmplY3Qoc2NvcGVDaGFpbihBUkdfciktPmdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgQVJHX3JlZ2V4cDEpOworICAgIHJldHVybiBu
ZXcgKEFSR19nbG9iYWxEYXRhKSBSZWdFeHBPYmplY3Qoc2NvcGVDaGFpbihBUkdfciktPmdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgQVJHX3JlZ2V4cDEpOwogfQogCiBKU1ZhbHVl
KiBNYWNoaW5lOjpjdGlfb3BfYml0b3IoQ1RJX0FSR1MpCkBAIC01MzU3LDcgKzUzMTIsNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKENUSV9BCiAgICAgICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2NvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyXS5qc1ZhbHVlKGV4ZWMpKTsKICAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUg
PSAwOwogICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBtYWNoaW5lLT5jYWxsRXZhbChleGVjLCB0
aGlzT2JqZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUsICByLCByZWdpc3Rlck9mZnNldCAt
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50LCBhcmdDb3VudCwg
ZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBKU1ZBTFVFX1ZNX0NIRUNLX0VYQ0VQVElPTl9BUkco
ZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVJHKGV4Y2VwdGlv
blZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTUzNzQsMjEgKzUz
MjksMjAgQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX3Rocm93KENUSV9BUkdTKQogICAgIHVuc2ln
bmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElf
UkVUVVJOX0FERFJFU1MpOwogCiAgICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBBUkdfc3Jj
MTsKLSAgICBJbnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IEFSR19nbG9iYWxEYXRhLT5tYWNoaW5l
LT50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCByLCB0cnVlKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9u
VmFsdWUpOwogCi0gICAgaWYgKGhhbmRsZXJWUEMpIHsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgQVJHX3NldFIocik7CisgICAgSW5zdHJ1Y3Rp
b24qIGhhbmRsZXJWUEMgPSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+dGhyb3dFeGNlcHRpb24o
ZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2
UENJbmRleCwgciwgdHJ1ZSk7CiAKLSAgICAgICAgdm9pZCogY2F0Y2hSb3V0aW5lID0gTWFjaGlu
ZTo6Y29kZUJsb2NrKHIpLT5uYXRpdmVFeGNlcHRpb25Db2RlRm9ySGFuZGxlclZQQyhoYW5kbGVy
VlBDKTsKLSAgICAgICAgQVNTRVJUKGNhdGNoUm91dGluZSk7Ci0gICAgICAgIGN0aVNldFJldHVy
bkFkZHJlc3MoJkNUSV9SRVRVUk5fQUREUkVTUywgY2F0Y2hSb3V0aW5lKTsKLSAgICAgICAgcmV0
dXJuIGNhdGNoUm91dGluZTsKLSAgICB9IGVsc2UgewotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIGlmICghaGFuZGxlclZQQykgewogICAgICAgICAqQVJHX2V4Y2VwdGlvbiA9
IGV4Y2VwdGlvblZhbHVlOwogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlh
dGUoKTsKICAgICB9CisKKyAgICBBUkdfc2V0UihyKTsKKyAgICB2b2lkKiBjYXRjaFJvdXRpbmUg
PSBNYWNoaW5lOjpjb2RlQmxvY2sociktPm5hdGl2ZUV4Y2VwdGlvbkNvZGVGb3JIYW5kbGVyVlBD
KGhhbmRsZXJWUEMpOworICAgIEFTU0VSVChjYXRjaFJvdXRpbmUpOworICAgIGN0aVNldFJldHVy
bkFkZHJlc3MoJkNUSV9SRVRVUk5fQUREUkVTUywgY2F0Y2hSb3V0aW5lKTsKKyAgICByZXR1cm4g
ZXhjZXB0aW9uVmFsdWU7CiB9CiAKIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIE1hY2hpbmU6OmN0
aV9vcF9nZXRfcG5hbWVzKENUSV9BUkdTKQpAQCAtNTQxMSw3ICs1MzY1LDcgQEAgdm9pZCBNYWNo
aW5lOjpjdGlfb3BfcHVzaF9zY29wZShDVElfQVJHUwogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3Jj
MTsKIAogICAgIEpTT2JqZWN0KiBvID0gdi0+dG9PYmplY3QoZXhlYyk7Ci0gICAgVk1fQ0hFQ0tf
RVhDRVBUSU9OX3YoKTsKKyAgICBWTV9DSEVDS19FWENFUFRJT05fVk9JRCgpOwogCiAgICAgUmVn
aXN0ZXIqIHIgPSBBUkdfcjsKICAgICByW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBzY29w
ZUNoYWluKHIpLT5wdXNoKG8pOwpAQCAtNTUwNCw3ICs1NDU4LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX2luKENUSV9BUkdTKQogICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1
cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgICAgICB1
bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQo
Q1RJX1JFVFVSTl9BRERSRVNTKTsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZUlu
dmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIsIGJhc2VWYWwsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTihKU1ZhbHVlKik7CisgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0K
IAogICAgIEpTVmFsdWUqIHByb3BOYW1lID0gQVJHX3NyYzE7CkBAIC01NTE1LDE0ICs1NDY5LDEz
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pbihDVElfQVJHUykKICAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBpKSk7CiAKICAgICBJZGVudGlm
aWVyIHByb3BlcnR5KGV4ZWMsIHByb3BOYW1lLT50b1N0cmluZyhleGVjKSk7Ci0gICAgVk1fQ0hF
Q0tfRVhDRVBUSU9OKEpTVmFsdWUqKTsKKyAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKICAgICBy
ZXR1cm4ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5KSk7CiB9
CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9wdXNoX25ld19zY29wZShDVElfQVJHUykKIHsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU09iamVjdCogc2NvcGUgPSBu
ZXcgKGV4ZWMpIEpTU3RhdGljU2NvcGVPYmplY3QoZXhlYywgKkFSR19pZDEsIEFSR19zcmMyLCBE
b250RGVsZXRlKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBK
U1N0YXRpY1Njb3BlT2JqZWN0KEFSR19leGVjLCAqQVJHX2lkMSwgQVJHX3NyYzIsIERvbnREZWxl
dGUpOwogCiAgICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKICAgICByW1JlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbl0gPSBzY29wZUNoYWluKHIpLT5wdXNoKHNjb3BlKTsKQEAgLTU2MTEsOSArNTU2NCw5
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfdmFsKENUSV8KICAgICBpZiAoc3Vi
c2NyaXB0LT5nZXRVSW50MzIoaSkpCiAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2Jq
LT5kZWxldGVQcm9wZXJ0eShleGVjLCBpKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFZNX0NIRUNL
X0VYQ0VQVElPTihKU1ZhbHVlKik7CisgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAg
ICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykp
OwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oSlNWYWx1ZSopOworICAgICAgICBWTV9DSEVD
S19FWENFUFRJT04oKTsKICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0
ZVByb3BlcnR5KGV4ZWMsIHByb3BlcnR5KSk7CiAgICAgfQogCkBAIC01NjczLDMzICs1NjI2LDMx
IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV92bV90aHJvdyhDVElfQVJHUykKICAgICBSZWdpc3Rlciog
ciA9IEFSR19yOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJsb2Nr
KHIpOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5jb250
YWlucyhleGVjLT5jdGlSZXR1cm5BZGRyZXNzKCkpKTsKLSAgICB1bnNpZ25lZCB2UENJbmRleCA9
IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoZXhlYy0+Y3RpUmV0dXJuQWRk
cmVzcygpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNv
bnRhaW5zKEFSR19nbG9iYWxEYXRhLT50aHJvd1JldHVybkFkZHJlc3MpKTsKKyAgICB1bnNpZ25l
ZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQVJHX2ds
b2JhbERhdGEtPnRocm93UmV0dXJuQWRkcmVzcyk7CiAKLSAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOwotCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IEFSR19nbG9iYWxEYXRhLT5leGNl
cHRpb247CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAgICBBUkdfZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uID0gMDsKIAogICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBDID0gQVJHX2dsb2Jh
bERhdGEtPm1hY2hpbmUtPnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIHIsIGZhbHNlKTsKIAotICAg
IGlmIChoYW5kbGVyVlBDKSB7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb25W
YWx1ZSk7Ci0gICAgICAgIEFSR19zZXRSKHIpOwotCi0gICAgICAgIHZvaWQqIGNhdGNoUm91dGlu
ZSA9IE1hY2hpbmU6OmNvZGVCbG9jayhyKS0+bmF0aXZlRXhjZXB0aW9uQ29kZUZvckhhbmRsZXJW
UEMoaGFuZGxlclZQQyk7Ci0gICAgICAgIEFTU0VSVChjYXRjaFJvdXRpbmUpOwotICAgICAgICBj
dGlTZXRSZXR1cm5BZGRyZXNzKCZDVElfUkVUVVJOX0FERFJFU1MsIGNhdGNoUm91dGluZSk7Ci0g
ICAgICAgIHJldHVybiBjYXRjaFJvdXRpbmU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoIWhhbmRsZXJWUEMpIHsKICAgICAgICAgKkFSR19l
eGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpu
dWxsSW1tZWRpYXRlKCk7CiAgICAgfQorCisgICAgQVJHX3NldFIocik7CisgICAgdm9pZCogY2F0
Y2hSb3V0aW5lID0gTWFjaGluZTo6Y29kZUJsb2NrKHIpLT5uYXRpdmVFeGNlcHRpb25Db2RlRm9y
SGFuZGxlclZQQyhoYW5kbGVyVlBDKTsKKyAgICBBU1NFUlQoY2F0Y2hSb3V0aW5lKTsKKyAgICBj
dGlTZXRSZXR1cm5BZGRyZXNzKCZDVElfUkVUVVJOX0FERFJFU1MsIGNhdGNoUm91dGluZSk7Cisg
ICAgcmV0dXJuIGV4Y2VwdGlvblZhbHVlOwogfQogCiAjdW5kZWYgVk1fQ0hFQ0tfRVhDRVBUSU9O
Ci0jdW5kZWYgVk1fQ0hFQ0tfRVhDRVBUSU9OX3YKKyN1bmRlZiBWTV9DSEVDS19FWENFUFRJT05f
QVJHCiAjdW5kZWYgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORAorI3VuZGVmIFZNX0NIRUNLX0VY
Q0VQVElPTl9WT0lECiAKICNlbmRpZiAvLyBFTkFCTEUoQ1RJKQogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDM3MjkwKQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBjb25zdCBVU3RyaW5nKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3RpCiAgICAg
SlNGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4obV9yZWdpc3Rl
cnNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmdldEpTVmFsdWUoKSk7CiAgICAgaWYgKCFmdW5jdGlv
bikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICZmdW5jdGlvbi0+bmFtZShtX2V4ZWMp
OworICAgIHJldHVybiAmZnVuY3Rpb24tPm5hbWUobV9zY29wZUNoYWluLT5nbG9iYWxEYXRhKTsK
IH0KIAogRGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgRGVidWdnZXJDYWxsRnJhbWU6OnR5cGUoKSBj
b25zdApAQCAtNjgsMTYgKzY4LDE0IEBAIEpTVmFsdWUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFs
dWF0ZShjb24KICAgICBpZiAoIW1fY29kZUJsb2NrKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IEV4ZWNTdGF0ZSBuZXdFeGVjKG1fcmVnaXN0ZXJzKTsKLQogICAgIGludCBlcnJMaW5lOwogICAg
IFVTdHJpbmcgZXJyTXNnOwogICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3Jp
cHQpOwotICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBuZXdFeGVjLnBhcnNlcigpLT5w
YXJzZTxFdmFsTm9kZT4oJm5ld0V4ZWMsIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOworICAg
IFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBtX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEtPnBh
cnNlci0+cGFyc2U8RXZhbE5vZGU+KENhbGxGcmFtZTo6Y3JlYXRlKG1fcmVnaXN0ZXJzKSwgc291
cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYgKCFldmFsTm9kZSkKLSAgICAgICAgcmV0
dXJuIEVycm9yOjpjcmVhdGUoJm5ld0V4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUs
IHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7Cisg
ICAgICAgIHJldHVybiBFcnJvcjo6Y3JlYXRlKENhbGxGcmFtZTo6Y3JlYXRlKG1fcmVnaXN0ZXJz
KSwgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlLnByb3ZpZGVyKCktPmFzSUQo
KSwgc291cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKIAotICAgIHJldHVybiBuZXdFeGVjLm1hY2hp
bmUoKS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgJm5ld0V4ZWMsIHRoaXNPYmplY3QoKSwgbV9z
Y29wZUNoYWluLCAmZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbV9zY29wZUNoYWluLT5nbG9iYWxE
YXRhLT5tYWNoaW5lLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBDYWxsRnJhbWU6OmNyZWF0ZSht
X3JlZ2lzdGVycyksIHRoaXNPYmplY3QoKSwgbV9zY29wZUNoYWluLCAmZXhjZXB0aW9uKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJD
YWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJDYWxs
RnJhbWUuaAkocmV2aXNpb24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJD
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZQogICAgICAgICB9OwogCi0gICAgICAgIERlYnVn
Z2VyQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9i
YWxPYmplY3QsIGNvbnN0IENvZGVCbG9jayogY29kZUJsb2NrLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgUmVnaXN0ZXIqIHIsIEpTVmFsdWUqIGV4Y2VwdGlvbikKLSAgICAgICAgICAgIDog
bV9leGVjKGV4ZWMpCi0gICAgICAgICAgICAsIG1fZHluYW1pY0dsb2JhbE9iamVjdChkeW5hbWlj
R2xvYmFsT2JqZWN0KQorICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZShKU0dsb2JhbE9iamVjdCog
ZHluYW1pY0dsb2JhbE9iamVjdCwgY29uc3QgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBSZWdpc3RlciogciwgSlNWYWx1ZSogZXhjZXB0aW9uKQorICAg
ICAgICAgICAgOiBtX2R5bmFtaWNHbG9iYWxPYmplY3QoZHluYW1pY0dsb2JhbE9iamVjdCkKICAg
ICAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAgICAgLCBtX3Njb3Bl
Q2hhaW4oc2NvcGVDaGFpbikKICAgICAgICAgICAgICwgbV9yZWdpc3RlcnMocikKQEAgLTYxLDEz
ICs2MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFt
aWNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2R5bmFtaWNHbG9iYWxPYmplY3Q7IH0K
ICAgICAgICAgY29uc3QgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVy
biBtX3Njb3BlQ2hhaW47IH0KICAgICAgICAgY29uc3QgVVN0cmluZyogZnVuY3Rpb25OYW1lKCkg
Y29uc3Q7Ci0gICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIHR5cGUoKSBjb25zdDsKKyAg
ICAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0KCkg
Y29uc3Q7CiAgICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmLCBKU1ZhbHVl
KiYgZXhjZXB0aW9uKSBjb25zdDsKICAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9leGNlcHRpb247IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEV4ZWNTdGF0
ZSogbV9leGVjOwogICAgICAgICBKU0dsb2JhbE9iamVjdCogbV9keW5hbWljR2xvYmFsT2JqZWN0
OwogICAgICAgICBjb25zdCBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBTY29wZUNo
YWluTm9kZSogbV9zY29wZUNoYWluOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNp
b24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDg1ICsyOSw3MSBAQAogCiBuYW1lc3BhY2UgSlNDICB7CiAKKyAgICBjbGFzcyBF
eGVjU3RhdGU7CiAgICAgY2xhc3MgSlNWYWx1ZTsKICAgICBjbGFzcyBSZWdpc3RlcjsKIAorICAg
IHR5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1
cnJlbnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZp
cnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rpb25zLgotICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IE5v
bmNvcHlhYmxlIHsKLSNpZiBFTkFCTEUoQ1RJKQotICAgICAgICBmcmllbmQgY2xhc3MgQ1RJOwot
I2VuZGlmCi0gICAgICAgIGZyaWVuZCBjbGFzcyBNYWNoaW5lOwotICAgICAgICBmcmllbmQgY2xh
c3MgRGVidWdnZXJDYWxsRnJhbWU7CisgICAgY2xhc3MgRXhlY1N0YXRlIDogcHJpdmF0ZSBSZWdp
c3RlciwgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgRXhlY1N0
YXRlKFJlZ2lzdGVyKiBjYWxsRnJhbWUpCi0gICAgICAgICAgICA6IG1fZXhjZXB0aW9uKDApCi0g
ICAgICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLSAgICAgICAgewotICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGNyZWF0ZShSZWdpc3RlciogY2FsbEZyYW1lQmFz
ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbEZyYW1lQmFzZSk7IH0KKyAg
ICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycygpIHsgcmV0dXJuIHRoaXM7IH0KIAogICAgICAgICAv
LyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KLSAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdAorICAgICAgICBKU0dsb2JhbE9i
amVjdCogZHluYW1pY0dsb2JhbE9iamVjdCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBNYWNoaW5lOjpzY29wZUNoYWluKE1hY2hpbmU6OmZpcnN0Q2FsbEZyYW1lKG1fY2FsbEZyYW1l
KSktPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgcmV0dXJuIE1hY2hpbmU6OnNjb3BlQ2hh
aW4oTWFjaGluZTo6Zmlyc3RDYWxsRnJhbWUodGhpcykpLT5nbG9iYWxPYmplY3QoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggdGhlIGN1cnJlbnQgc2Ny
aXB0IHdhcyBkZWZpbmVkLiAoQ2FuIGRpZmZlcgotICAgICAgICAvLyBmcm9tIGR5bmFtaWNHbG9i
YWxPYmplY3QoKSBkdXJpbmcgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIGZyYW1lcy4pCi0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KCkgY29uc3QKKyAgICAgICAgLy8g
R2xvYmFsIG9iamVjdCBpbiB3aGljaCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb2RlIHdhcyBk
ZWZpbmVkLgorICAgICAgICAvLyBEaWZmZXJzIGZyb20gZHluYW1pY0dsb2JhbE9iamVjdCgpIGR1
cmluZyBmdW5jdGlvbiBjYWxscyBhY3Jvc3Mgd2ViIGJyb3dzZXIgZnJhbWVzLgorICAgICAgICBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBNYWNoaW5lOjpzY29wZUNoYWluKG1fY2FsbEZyYW1lKS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgICAgICAgICByZXR1cm4gTWFjaGluZTo6c2NvcGVDaGFpbih0aGlzKS0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVl
KCkgY29uc3QKKyAgICAgICAgLy8gRGlmZmVycyBmcm9tIGxleGljYWxHbG9iYWxPYmplY3QgYmVj
YXVzZSB0aGlzIHdpbGwgaGF2ZSBET00gd2luZG93IHNoZWxsIHJhdGhlciB0aGFuCisgICAgICAg
IC8vIHRoZSBhY3R1YWwgRE9NIHdpbmRvdy4KKyAgICAgICAgSlNPYmplY3QqIGdsb2JhbFRoaXNW
YWx1ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNYWNoaW5lOjpzY29wZUNoYWlu
KG1fY2FsbEZyYW1lKS0+Z2xvYmFsVGhpc09iamVjdCgpOworICAgICAgICAgICAgcmV0dXJuIE1h
Y2hpbmU6OnNjb3BlQ2hhaW4odGhpcyktPmdsb2JhbFRoaXNPYmplY3QoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIC8vIEV4Y2VwdGlvbiBwcm9wb2dhdGlvbi4KLSAgICAgICAgdm9pZCBzZXRFeGNl
cHRpb24oSlNWYWx1ZSogZXhjZXB0aW9uKSB7IG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9Ci0g
ICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fZXhjZXB0aW9uID0gMDsgfQotICAgICAg
ICBKU1ZhbHVlKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQotICAg
ICAgICBKU1ZhbHVlKiogZXhjZXB0aW9uU2xvdCgpIHsgcmV0dXJuICZtX2V4Y2VwdGlvbjsgfQot
ICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb247
IH0KLSNpZiBFTkFCTEUoQ1RJKQotICAgICAgICB2b2lkIHNldENUSVJldHVybkFkZHJlc3Modm9p
ZCogY3RpUkEpIHsgbV9jdGlSZXR1cm5BZGRyZXNzID0gY3RpUkE7IH0KLSAgICAgICAgdm9pZCog
Y3RpUmV0dXJuQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY3RpUmV0dXJuQWRkcmVzczsgfQot
I2VuZGlmCi0KLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgY29uc3QKKyAgICAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpNYWNoaW5lOjpzY29wZUNoYWluKG1fY2FsbEZyYW1lKS0+Z2xvYmFsRGF0YTsKKyAgICAg
ICAgICAgIHJldHVybiAqTWFjaGluZTo6c2NvcGVDaGFpbih0aGlzKS0+Z2xvYmFsRGF0YTsKICAg
ICAgICAgfQogCisgICAgICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgYWNjZXNzIHRv
IGdsb2JhbCBkYXRhLgorCisgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpTVmFsdWUqIGV4Y2Vw
dGlvbikgeyBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9CisgICAgICAgIHZv
aWQgY2xlYXJFeGNlcHRpb24oKSB7IGdsb2JhbERhdGEoKS5leGNlcHRpb24gPSAwOyB9CisgICAg
ICAgIEpTVmFsdWUqIGV4Y2VwdGlvbigpIHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNlcHRpb247
IH0KKyAgICAgICAgSlNWYWx1ZSoqIGV4Y2VwdGlvblNsb3QoKSB7IHJldHVybiAmZ2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbjsgfQorICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIHsgcmV0dXJuICEh
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQorCiAgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRl
bnRpZmllclRhYmxlKCkgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZTsgfQot
ICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsg
cmV0dXJuICpnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lczsgfQotICAgICAgICBjb25zdCBBcmdM
aXN0JiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLmVtcHR5TGlzdDsg
fQorICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIHsgcmV0
dXJuICpnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lczsgfQorICAgICAgICBjb25zdCBBcmdMaXN0
JiBlbXB0eUxpc3QoKSB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLmVtcHR5TGlzdDsgfQogICAgICAg
ICBMZXhlciogbGV4ZXIoKSB7IHJldHVybiBnbG9iYWxEYXRhKCkubGV4ZXI7IH0KICAgICAgICAg
UGFyc2VyKiBwYXJzZXIoKSB7IHJldHVybiBnbG9iYWxEYXRhKCkucGFyc2VyOyB9Ci0gICAgICAg
IE1hY2hpbmUqIG1hY2hpbmUoKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkubWFjaGluZTsg
fQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheVRhYmxlKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmFycmF5VGFibGU7IH0KLSAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1
cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmRhdGVUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlKiBtYXRoVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5nbG9i
YWxEYXRhKCkubWF0aFRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG51
bWJlclRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51
bWJlclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxl
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cFRhYmxl
OyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cENvbnN0cnVjdG9yVGFi
bGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ29u
c3RydWN0b3JUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdU
YWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5zdHJpbmdU
YWJsZTsgfQorICAgICAgICBNYWNoaW5lKiBtYWNoaW5lKCkgeyByZXR1cm4gZ2xvYmFsRGF0YSgp
Lm1hY2hpbmU7IH0KKyAgICAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuICZnbG9iYWxEYXRhKCku
aGVhcDsgfQogCi0gICAgICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiAmZ2xvYmFsRGF0
YSgpLmhlYXA7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuYXJy
YXlUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmRhdGVU
YWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBtYXRoVGFibGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1hdGhUYWJs
ZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJUYWJsZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubnVtYmVyVGFi
bGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnJlZ0V4cFRh
YmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cENvbnN0cnVjdG9y
VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLnJlZ0V4cENvbnN0cnVjdG9yVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogc3RyaW5nVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLnN0cmluZ1RhYmxlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICAv
LyBEZWZhdWx0IGNvbnN0cnVjdG9yIHJlcXVpcmVkIGZvciBnY2MgMy4KLSAgICAgICAgRXhlY1N0
YXRlKCkgeyB9Ci0KLSAgICAgICAgYm9vbCBpc0dsb2JhbE9iamVjdChKU09iamVjdCopIGNvbnN0
OwotCi0gICAgICAgIEpTVmFsdWUqIG1fZXhjZXB0aW9uOwotI2lmIEVOQUJMRShDVEkpCi0gICAg
ICAgIHZvaWQqIG1fY3RpUmV0dXJuQWRkcmVzczsKLSNlbmRpZgotICAgICAgICBSZWdpc3Rlciog
bV9jYWxsRnJhbWU7IC8vIFRoZSBtb3N0IHJlY2VudCBjYWxsIGZyYW1lLgorICAgICAgICBFeGVj
U3RhdGUoKTsKKyAgICAgICAgfkV4ZWNTdGF0ZSgpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAzNzI5MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEyICs2NywxMiBAQCBKU1ZhbHVlKiBmdW5jdGlvblByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTCiB7CiAgICAgaWYgKHRoaXNWYWx1ZS0+aXNPYmplY3QoJkpTRnVu
Y3Rpb246OmluZm8pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nh
c3Q8SlNGdW5jdGlvbio+KHRoaXNWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCAiZnVuY3Rpb24gIiArIGZ1bmN0aW9uLT5uYW1lKGV4ZWMpICsgIigiICsgZnVuY3Rpb24tPm1f
Ym9keS0+cGFyYW1TdHJpbmcoKSArICIpICIgKyBmdW5jdGlvbi0+bV9ib2R5LT50b1NvdXJjZVN0
cmluZygpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiICsgZnVu
Y3Rpb24tPm5hbWUoJmV4ZWMtPmdsb2JhbERhdGEoKSkgKyAiKCIgKyBmdW5jdGlvbi0+bV9ib2R5
LT5wYXJhbVN0cmluZygpICsgIikgIiArIGZ1bmN0aW9uLT5tX2JvZHktPnRvU291cmNlU3RyaW5n
KCkpOwogICAgIH0KIAogICAgIGlmICh0aGlzVmFsdWUtPmlzT2JqZWN0KCZJbnRlcm5hbEZ1bmN0
aW9uOjppbmZvKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRp
Y19jYXN0PEludGVybmFsRnVuY3Rpb24qPih0aGlzVmFsdWUpOwotICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgImZ1bmN0aW9uICIgKyBmdW5jdGlvbi0+bmFtZShleGVjKSArICIoKSB7XG4g
ICAgW25hdGl2ZSBjb2RlXVxufSIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1
bmN0aW9uICIgKyBmdW5jdGlvbi0+bmFtZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKSArICIoKSB7XG4g
ICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAgIH0KIAogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSW50ZXJuYWxGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0ludGVybmFsRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAzNzI5MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOSBAQCBJbnRlcm5hbEZ1bmN0aW9u
OjpJbnRlcm5hbEZ1bmN0aW9uKEpTR2xvCiAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGdsb2JhbERhdGEsIG5hbWUudXN0cmluZygpKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1jb25zdCBVU3RyaW5nJiBJbnRl
cm5hbEZ1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0ZSogZXhlYykKK2NvbnN0IFVTdHJpbmcmIEludGVy
bmFsRnVuY3Rpb246Om5hbWUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIEpTVmFs
dWUqIHYgPSBnZXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpOworICAgIEpTVmFs
dWUqIHYgPSBnZXREaXJlY3QoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bmFtZSk7CiAgICAg
QVNTRVJUKHYtPmlzU3RyaW5nKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+
KHYpLT52YWx1ZSgpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0ludGVybmFsRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5o
CShyZXZpc2lvbiAzNzI5MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdDsgCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBjb25zdCBVU3RyaW5nJiBu
YW1lKEV4ZWNTdGF0ZSopOworICAgICAgICBjb25zdCBVU3RyaW5nJiBuYW1lKEpTR2xvYmFsRGF0
YSopOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1
Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykgCiAgICAgICAgIHsgCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
SlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
SlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIHN0cmluZ1RhYmxlOwogCiBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0
YShib29sIGlzU2hhcmVkKQogICAgIDogbWFjaGluZShuZXcgTWFjaGluZSkKKyAgICAsIGV4Y2Vw
dGlvbigwKQogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKICAgICAsIGFycmF5VGFi
bGUobmV3IEhhc2hUYWJsZShKU0M6OmFycmF5VGFibGUpKQogICAgICwgZGF0ZVRhYmxlKG5ldyBI
YXNoVGFibGUoSlNDOjpkYXRlVGFibGUpKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xv
YmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERhdGEu
aAkocmV2aXNpb24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIE1hY2hpbmUqIG1hY2hpbmU7CiAKKyAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOworI2lm
IEVOQUJMRShDVEkpCisgICAgICAgIHZvaWQqIHRocm93UmV0dXJuQWRkcmVzczsKKyNlbmRpZgor
CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlUYWJsZTsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBkYXRlVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogbWF0aFRhYmxlOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzNzI5MCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Miw4ICsxNDIsNiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0
aGlzCiAgICAgZCgpLT5yZWN1cnNpb24gPSAwOwogICAgIGQoKS0+ZGVidWdnZXIgPSAwOwogCi0g
ICAgZCgpLT5nbG9iYWxFeGVjLnNldChuZXcgRXhlY1N0YXRlKGQoKS0+Z2xvYmFsQ2FsbEZyYW1l
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSk7Ci0KICAgICBkKCktPnByb2Zp
bGVHcm91cCA9IDA7CiAKICAgICByZXNldChwcm90b3R5cGUoKSk7CkBAIC0xOTgsNyArMTk2LDcg
QEAgc3RhdGljIGlubGluZSBKU09iamVjdCogbGFzdEluUHJvdG90eXBlQwogCiB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90b3R5cGUpCiB7Ci0gICAgRXhlY1N0YXRlKiBl
eGVjID0gZCgpLT5nbG9iYWxFeGVjLmdldCgpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEpTR2xv
YmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKICAgICAvLyBQcm90b3R5cGVzCiAKQEAgLTM2NCw4
ICszNjIsNiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjptYXJrKCkKICAgICBpZiAocmVnaXN0ZXJG
aWxlLmdsb2JhbE9iamVjdCgpID09IHRoaXMpCiAgICAgICAgIHJlZ2lzdGVyRmlsZS5tYXJrR2xv
YmFscygmZ2xvYmFsRGF0YSgpLT5oZWFwKTsKIAotICAgIG1hcmtJZk5lZWRlZChkKCktPmdsb2Jh
bEV4ZWMtPmV4Y2VwdGlvbigpKTsKLQogICAgIG1hcmtJZk5lZWRlZChkKCktPnJlZ0V4cENvbnN0
cnVjdG9yKTsKICAgICBtYXJrSWZOZWVkZWQoZCgpLT5lcnJvckNvbnN0cnVjdG9yKTsKICAgICBt
YXJrSWZOZWVkZWQoZCgpLT5ldmFsRXJyb3JDb25zdHJ1Y3Rvcik7CkBAIC00MTAsNyArNDA2LDcg
QEAgSlNHbG9iYWxPYmplY3QqIEpTR2xvYmFsT2JqZWN0Ojp0b0dsb2JhbAogCiBFeGVjU3RhdGUq
IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKIHsKLSAgICByZXR1cm4gZCgpLT5nbG9iYWxF
eGVjLmdldCgpOworICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShkKCktPmdsb2JhbENhbGxG
cmFtZSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiB9CiAKIGJvb2wgSlNH
bG9iYWxPYmplY3Q6OmlzRHluYW1pY1Njb3BlKCkgY29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9K
U0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzNzI5MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9K
U0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBTY29wZUNoYWluIGdsb2JhbFNjb3Bl
Q2hhaW47CiAgICAgICAgICAgICBSZWdpc3RlciBnbG9iYWxDYWxsRnJhbWVbUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplXTsKLSAgICAgICAgICAgIE93blB0cjxFeGVjU3RhdGU+IGds
b2JhbEV4ZWM7CiAKICAgICAgICAgICAgIGludCByZWN1cnNpb247CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzcyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgdm9pZCBKU09iamVj
dDo6cmVtb3ZlRGlyZWN0KGNvbnN0IElkZW50aQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCB1bnNp
Z25lZCBhdHRyKQogewotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLT5u
YW1lKGV4ZWMpKSwgZnVuY3Rpb24sIGF0dHIpOworICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4
ZWMsIGZ1bmN0aW9uLT5uYW1lKCZleGVjLT5nbG9iYWxEYXRhKCkpKSwgZnVuY3Rpb24sIGF0dHIp
OwogfQogCiBORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xv
dChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUqKiBsb2NhdGlvbikKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9jb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAzNzI5MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9j
b2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODEsNiArOTgxLDggQEAgYm9vbCBIZWFw
Ojpjb2xsZWN0KCkKICAgICBtYXJrUHJvdGVjdGVkT2JqZWN0cygpOwogICAgIGlmIChtX21hcmtM
aXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKICAgICAgICAgQXJnTGlzdDo6bWFya0xp
c3RzKCptX21hcmtMaXN0U2V0KTsKKyAgICBpZiAobV9nbG9iYWxEYXRhLT5leGNlcHRpb24gJiYg
IW1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLT5tYXJrZWQoKSkKKyAgICAgICAgbV9nbG9iYWxEYXRh
LT5leGNlcHRpb24tPm1hcmsoKTsKICAgICBtX2dsb2JhbERhdGEtPm1hY2hpbmUtPnJlZ2lzdGVy
RmlsZSgpLm1hcmtDYWxsRnJhbWVzKHRoaXMpOwogICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLm1hcmsoKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDM3MjkwKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9p
ZCBQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zbwogICAgIEpTVmFsdWUqIGZ1bmN0
aW9uOwogCiAgICAgZXhlYy0+bWFjaGluZSgpLT5yZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgbGlu
ZU51bWJlciwgc291cmNlSUQsIHNvdXJjZVVSTCwgZnVuY3Rpb24pOwotICAgIG1fY3VycmVudE5v
ZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihl
eGVjLCBmdW5jdGlvbiA/IGZ1bmN0aW9uLT50b1RoaXNPYmplY3QoZXhlYykgOiAwLCBzb3VyY2VV
UkwsIGxpbmVOdW1iZXIpLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQoKSk7CisgICAgbV9jdXJy
ZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlm
aWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uID8gZnVuY3Rpb24tPnRvVGhpc09iamVj
dChleGVjKSA6IDAsIHNvdXJjZVVSTCwgbGluZU51bWJlciksIG1faGVhZC5nZXQoKSwgbV9oZWFk
LmdldCgpKTsKICAgICBtX2hlYWQtPmluc2VydE5vZGUobV9jdXJyZW50Tm9kZS5nZXQoKSk7CiB9
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHJldmlzaW9uIDM3Mjkw
KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBHbG9iYWxDb2RlRXhlY3V0aW9u
ID0KIHN0YXRpYyBjb25zdCBjaGFyKiBBbm9ueW1vdXNGdW5jdGlvbiA9ICIoYW5vbnltb3VzIGZ1
bmN0aW9uKSI7CiBzdGF0aWMgdW5zaWduZWQgUHJvZmlsZXNVSUQgPSAwOwogCi1zdGF0aWMgQ2Fs
bElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoRXhlY1N0YXRl
KiwgSlNGdW5jdGlvbiopOworc3RhdGljIENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlm
aWVyRnJvbUZ1bmN0aW9uSW1wKEpTR2xvYmFsRGF0YSosIEpTRnVuY3Rpb24qKTsKIAogUHJvZmls
ZXIqIFByb2ZpbGVyOjpzX3NoYXJlZFByb2ZpbGVyID0gMDsKIFByb2ZpbGVyKiBQcm9maWxlcjo6
c19zaGFyZWRFbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UgPSAwOwpAQCAtMTA1LDE0ICsxMDUsMTQg
QEAgdm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleAogewogICAgIEFTU0VS
VCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25U
b1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6d2lsbEV4ZWN1
dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIGNhbGxlZEZ1bmN0aW9uLCAiIiwgMCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNo
RnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6
d2lsbEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGNh
bGxlZEZ1bmN0aW9uLCAiIiwgMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmls
ZUdyb3VwKCkpOwogfQogCiB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKIHsK
ICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBDYWxsSWRl
bnRpZmllciBjYWxsSWRlbnRpZmllciA9IGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIDAsIHNv
dXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICBDYWxsSWRlbnRpZmllciBjYWxsSWRl
bnRpZmllciA9IGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIDAsIHNv
dXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKIAogICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1By
b2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6d2lsbEV4ZWN1dGUs
IGNhbGxJZGVudGlmaWVyLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91
cCgpKTsKIH0KQEAgLTEyMSwzMyArMTIxLDMzIEBAIHZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUo
RXhlY1N0YXRlKiBleGUKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHko
KSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywg
JlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMs
IGNhbGxlZEZ1bmN0aW9uLCAiIiwgMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJv
ZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFBy
b2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZp
ZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgY2FsbGVkRnVuY3Rpb24sICIiLCAwKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKIHZvaWQgUHJvZmlsZXI6
OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBzdGFydGluZ0xpbmVOdW1iZXIpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRQcm9maWxlcy5p
c0VtcHR5KCkpOwogCi0gICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJv
ZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmll
cihleGVjLCAwLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1By
b2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwg
Y3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgc291cmNlVVJMLCBz
dGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVH
cm91cCgpKTsKIH0KIAotQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlm
aWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZEZ1bmN0aW9uLCBjb25zdCBVU3Ry
aW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCitDYWxsSWRlbnRp
ZmllciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBKU09iamVjdCogY2FsbGVkRnVuY3Rpb24sIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3Vy
Y2VVUkwsIGludCBkZWZhdWx0TGluZU51bWJlcikKIHsKICAgICBpZiAoIWNhbGxlZEZ1bmN0aW9u
KQogICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoR2xvYmFsQ29kZUV4ZWN1dGlvbiwgZGVm
YXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwogCiAgICAgaWYgKGNhbGxlZEZ1bmN0
aW9uLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpCi0gICAgICAgIHJldHVybiBjcmVhdGVD
YWxsSWRlbnRpZmllckZyb21GdW5jdGlvbkltcChleGVjLCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbGVkRnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxJZGVudGlmaWVy
RnJvbUZ1bmN0aW9uSW1wKGdsb2JhbERhdGEsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWxs
ZWRGdW5jdGlvbikpOwogICAgIGlmIChjYWxsZWRGdW5jdGlvbi0+aW5oZXJpdHMoJkludGVybmFs
RnVuY3Rpb246OmluZm8pKQotICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoc3RhdGljX2Nh
c3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNhbGxlZEZ1bmN0aW9uKS0+bmFtZShleGVjKSwgZGVmYXVs
dFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gQ2FsbElkZW50
aWZpZXIoc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNhbGxlZEZ1bmN0aW9uKS0+bmFt
ZShnbG9iYWxEYXRhKSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwogCiAg
ICAgVVN0cmluZyBuYW1lID0gIigiICsgY2FsbGVkRnVuY3Rpb24tPmNsYXNzTmFtZSgpICsgIiBv
YmplY3QpIjsKICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIobmFtZSwgZGVmYXVsdFNvdXJjZVVS
TCwgZGVmYXVsdExpbmVOdW1iZXIpOwogfQogCi1DYWxsSWRlbnRpZmllciBjcmVhdGVDYWxsSWRl
bnRpZmllckZyb21GdW5jdGlvbkltcChFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uKQorQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikKIHsKLSAgICBj
b25zdCBVU3RyaW5nJiBuYW1lID0gZnVuY3Rpb24tPm5hbWUoZXhlYyk7CisgICAgY29uc3QgVVN0
cmluZyYgbmFtZSA9IGZ1bmN0aW9uLT5uYW1lKGdsb2JhbERhdGEpOwogICAgIHJldHVybiBDYWxs
SWRlbnRpZmllcihuYW1lLmlzRW1wdHkoKSA/IEFub255bW91c0Z1bmN0aW9uIDogbmFtZSwgZnVu
Y3Rpb24tPm1fYm9keS0+c291cmNlVVJMKCksIGZ1bmN0aW9uLT5tX2JvZHktPmxpbmVObygpKTsK
IH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCShyZXZpc2lvbiAzNzI5MCkK
KysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDYWxsSWRlbnRpZmll
cjsKICAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNs
YXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIFByb2ZpbGVHZW5lcmF0b3I7CiAgICAgY2xhc3MgVVN0
cmluZzsKQEAgLTUwLDcgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgUHJvZmlsZXIqIHByb2ZpbGVyKCk7IAotICAgICAgICBzdGF0aWMgQ2FsbElk
ZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKKyAgICAgICAgc3RhdGljIENh
bGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTT2JqZWN0
KiwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CiAKICAgICAgICAg
dm9pZCBzdGFydFByb2ZpbGluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiB0aXRsZSk7CiAg
ICAgICAgIFBhc3NSZWZQdHI8UHJvZmlsZT4gc3RvcFByb2ZpbGluZyhFeGVjU3RhdGUqLCBjb25z
dCBVU3RyaW5nJiB0aXRsZSk7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzcyOTIpCisrKyBXZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA4LTEwLTA0ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTI5NQorICAgICAgICAgIEJ1ZyAyMTI5NTogUmVwbGFjZSBFeGVjU3RhdGUgd2l0aCBhIGNhbGwg
ZnJhbWUgUmVnaXN0ZXIgcG9pbnRlcgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50
aW5lZE9iamVjdFdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXI6OmFsbG93c1Vud3JhcHBlZEFjY2Vzc0Zyb20pOgorICAgICAgICBSZW1vdmUg
Ym9ndXMgImNvbnN0Ii4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlci5oOiBEaXR0by4KKwogMjAwOC0xMC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgLSB0cnkgdG8gZml4IGJ1aWxkCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAkocmV2aXNpb24g
MzcyOTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcjo6fkpTUXVhcmFudGluCiB7CiB9CiAKLWJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXI6OmFsbG93c1Vud3JhcHBlZEFjY2Vzc0Zyb20oY29uc3QgRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YWxsb3dzVW53cmFwcGVkQWNj
ZXNzRnJvbShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdW53cmFwcGVk
R2xvYmFsT2JqZWN0LT5wcm9maWxlR3JvdXAoKSA9PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCktPnByb2ZpbGVHcm91cCgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24gMzcyOTApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiB1bndyYXBwZWRHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3Vud3Jh
cHBlZEdsb2JhbE9iamVjdDsgfTsKICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4
ZWNTdGF0ZSgpIGNvbnN0OwogCi0gICAgICAgIGJvb2wgYWxsb3dzVW53cmFwcGVkQWNjZXNzRnJv
bShjb25zdCBKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIGFsbG93c1Vud3Jh
cHBlZEFjY2Vzc0Zyb20oSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzcyOTApCisr
KyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisy
MDA4LTEwLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICAtIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NQorICAgICAgICAgIEJ1
ZyAyMTI5NTogUmVwbGFjZSBFeGVjU3RhdGUgd2l0aCBhIGNhbGwgZnJhbWUgUmVnaXN0ZXIgcG9p
bnRlcgorCisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbToKKyAgICAgICAg
KFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcik6IFJlbW92ZSAwIHBhc3NlZCBm
b3IgRXhlY1N0YXRlLgorCiAyMDA4LTEwLTAzICBKb2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeGVkIFJlbGVhc2UgYnVpbGQKSW5kZXg6IFdlYktpdC9tYWMv
V2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHJldmlzaW9uIDM3MjkwKQorKysgV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw3IEBAIFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcihKU0cKICAgICA6IG1f
Y2FsbGluZ0RlbGVnYXRlKGZhbHNlKQogewogICAgIGF0dGFjaChnbG9iYWxPYmplY3QpOwotICAg
IERlYnVnZ2VyQ2FsbEZyYW1lIGdsb2JhbENhbGxGcmFtZSgwLCBnbG9iYWxPYmplY3QsIDAsIGds
b2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLm5vZGUoKSwgMCwgMCk7CisgICAgRGVidWdn
ZXJDYWxsRnJhbWUgZ2xvYmFsQ2FsbEZyYW1lKGdsb2JhbE9iamVjdCwgMCwgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxTY29wZUNoYWluKCkubm9kZSgpLCAwLCAwKTsKICAgICBjYWxsRXZlbnQoZ2xvYmFs
Q2FsbEZyYW1lLCAwLCAtMSk7CiB9CiAKSW5kZXg6IFdlYktpdFNpdGUvY29kaW5nL1JlZlB0ci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFNpdGUvY29kaW5nL1JlZlB0ci5odG1sCShyZXZpc2lv
biAzNzI5MCkKKysrIFdlYktpdFNpdGUvY29kaW5nL1JlZlB0ci5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0VGl0bGUoVGl0bGUqIHQpCiAg
CiBSZWZQdHImbHQ7Tm9kZSZndDsgY3JlYXRlU3BlY2lhbE5vZGUoKQogewotICAgIFJlZlB0ciZs
dDtOb2RlJmd0OyBhID0gbmV3IE5vZGU7CisgICAgUmVmUHRyJmx0O05vZGUmZ3Q7IGEgPSBjcmVh
dGVOb2RlKCk7CiAgICAgYS0mZ3Q7c2V0U3BlY2lhbCh0cnVlKTsKICAgICByZXR1cm4gYTsKIH0K
QEAgLTE1MCw3ICsxNTAsNyBAQCBMZXTigJlzIHRha2UgYSBsb29rIGF0IGEgbmV3IHZlcnNpb24g
b2YgCiAKIFBhc3NSZWZQdHImbHQ7Tm9kZSZndDsgY3JlYXRlU3BlY2lhbE5vZGUoKQogewotICAg
IFBhc3NSZWZQdHImbHQ7Tm9kZSZndDsgYSA9IG5ldyBOb2RlOworICAgIFBhc3NSZWZQdHImbHQ7
Tm9kZSZndDsgYSA9IGNyZWF0ZU5vZGUoKTsKICAgICBhLSZndDtzZXRTcGVjaWFsKHRydWUpOwog
ICAgIHJldHVybiBhOwogfQpAQCAtMjAzLDcgKzIwMyw3IEBAIGNoYW5naW5nIHJlZmVyZW5jZSBj
b3VudHMuPC9wPgogCiA8cHJlIGNsYXNzPSJjb2RlIj5QYXNzUmVmUHRyJmx0O05vZGUmZ3Q7IGNy
ZWF0ZVNwZWNpYWxOb2RlKCkKIHsKLSAgICBSZWZQdHImbHQ7Tm9kZSZndDsgYSA9IG5ldyBOb2Rl
OworICAgIFJlZlB0ciZsdDtOb2RlJmd0OyBhID0gY3JlYXRlTm9kZSgpOwogICAgIGEtJmd0O3Nl
dENyZWF0ZWQodHJ1ZSk7CiAgICAgcmV0dXJuIGEucmVsZWFzZSgpOwogfQo=
</data>
<flag name="review"
          id="10923"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>